diff --git a/OWNERS b/OWNERS
index 03cfac9..ab5bd18 100644
--- a/OWNERS
+++ b/OWNERS
@@ -23,6 +23,9 @@
 # via https://android.git.corp.google.com/All-Projects/+/refs/meta/config/rules.pl.
 per-file */api/*current.txt = *
 
+# Test mapping changes can be made by anyone
+per-file */TEST_MAPPING = *
+
 # Support bulk translation updates
 per-file */res*/values*/*.xml = byi@google.com, delphij@google.com
 
diff --git a/TestProtoLibraries.bp b/TestProtoLibraries.bp
index 513d45f..afc11bb 100644
--- a/TestProtoLibraries.bp
+++ b/TestProtoLibraries.bp
@@ -30,6 +30,6 @@
         type: "full",
     },
     errorprone: {
-        javacflags: ["-Xep:MissingOverride:OFF"], // b/72714520
+        enabled: false,
     },
 }
diff --git a/apex/media/OWNERS b/apex/media/OWNERS
index ced2fb5..73f02d3 100644
--- a/apex/media/OWNERS
+++ b/apex/media/OWNERS
@@ -1,10 +1,10 @@
-andrewlewis@google.com
-aquilescanta@google.com
-chz@google.com
+# Bug component: 1344
 hdmoon@google.com
 hkuang@google.com
 jinpark@google.com
 klhyun@google.com
 lnilsson@google.com
-marcone@google.com
 sungsoo@google.com
+
+# go/android-fwk-media-solutions for info on areas of ownership.
+include platform/frameworks/av:/media/janitors/media_solutions_OWNERS
diff --git a/cmds/idmap2/Android.bp b/cmds/idmap2/Android.bp
index aad5d23..5370dc3 100644
--- a/cmds/idmap2/Android.bp
+++ b/cmds/idmap2/Android.bp
@@ -56,9 +56,6 @@
         "-readability-redundant-access-specifiers",
         "-readability-uppercase-literal-suffix",
     ],
-    tidy_flags: [
-        "-system-headers",
-    ],
 }
 
 cc_library {
diff --git a/cmds/idmap2/tests/Idmap2BinaryTests.cpp b/cmds/idmap2/tests/Idmap2BinaryTests.cpp
index e7e9e4c..a1206f9 100644
--- a/cmds/idmap2/tests/Idmap2BinaryTests.cpp
+++ b/cmds/idmap2/tests/Idmap2BinaryTests.cpp
@@ -93,7 +93,7 @@
                                "--idmap-path", GetIdmapPath()});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
 
   struct stat st;
   ASSERT_EQ(stat(GetIdmapPath().c_str(), &st), 0);
@@ -119,7 +119,7 @@
                                "--idmap-path", GetIdmapPath()});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
 
   // clang-format off
   result = ExecuteBinary({"idmap2",
@@ -127,14 +127,14 @@
                           "--idmap-path", GetIdmapPath()});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
-  ASSERT_NE(result->stdout.find(R::target::integer::literal::int1 + " -> 0x7f010000"),
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
+  ASSERT_NE(result->stdout_str.find(R::target::integer::literal::int1 + " -> 0x7f010000"),
             std::string::npos);
-  ASSERT_NE(result->stdout.find(R::target::string::literal::str1 + " -> 0x7f020000"),
+  ASSERT_NE(result->stdout_str.find(R::target::string::literal::str1 + " -> 0x7f020000"),
             std::string::npos);
-  ASSERT_NE(result->stdout.find(R::target::string::literal::str3 + " -> 0x7f020001"),
+  ASSERT_NE(result->stdout_str.find(R::target::string::literal::str3 + " -> 0x7f020001"),
             std::string::npos);
-  ASSERT_NE(result->stdout.find(R::target::string::literal::str4 + " -> 0x7f020002"),
+  ASSERT_NE(result->stdout_str.find(R::target::string::literal::str4 + " -> 0x7f020002"),
             std::string::npos);
 
   // clang-format off
@@ -144,8 +144,8 @@
                           "--idmap-path", GetIdmapPath()});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
-  ASSERT_NE(result->stdout.find("00000000: 504d4449  magic"), std::string::npos);
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
+  ASSERT_NE(result->stdout_str.find("00000000: 504d4449  magic"), std::string::npos);
 
   // clang-format off
   result = ExecuteBinary({"idmap2",
@@ -170,7 +170,7 @@
                                "--idmap-path", GetIdmapPath()});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
 
   // clang-format off
   result = ExecuteBinary({"idmap2",
@@ -180,9 +180,9 @@
                           "--resid", R::target::string::literal::str1});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
-  ASSERT_NE(result->stdout.find("overlay-1"), std::string::npos);
-  ASSERT_EQ(result->stdout.find("overlay-1-sv"), std::string::npos);
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
+  ASSERT_NE(result->stdout_str.find("overlay-1"), std::string::npos);
+  ASSERT_EQ(result->stdout_str.find("overlay-1-sv"), std::string::npos);
 
   // clang-format off
   result = ExecuteBinary({"idmap2",
@@ -192,9 +192,9 @@
                           "--resid", "test.target:string/str1"});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
-  ASSERT_NE(result->stdout.find("overlay-1"), std::string::npos);
-  ASSERT_EQ(result->stdout.find("overlay-1-sv"), std::string::npos);
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
+  ASSERT_NE(result->stdout_str.find("overlay-1"), std::string::npos);
+  ASSERT_EQ(result->stdout_str.find("overlay-1-sv"), std::string::npos);
 
   // clang-format off
   result = ExecuteBinary({"idmap2",
@@ -204,8 +204,8 @@
                           "--resid", "test.target:string/str1"});
   // clang-format on
   ASSERT_THAT(result, NotNull());
-  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
-  ASSERT_NE(result->stdout.find("overlay-1-sv"), std::string::npos);
+  ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr_str;
+  ASSERT_NE(result->stdout_str.find("overlay-1-sv"), std::string::npos);
 
   unlink(GetIdmapPath().c_str());
 }
diff --git a/core/api/current.txt b/core/api/current.txt
index 64976fa..bc61d15 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -8756,6 +8756,7 @@
     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_AUTHORIZATION = 8; // 0x8
     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
@@ -9082,6 +9083,7 @@
     method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionState(android.bluetooth.BluetoothDevice);
     method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
     field public static final int A2DP = 2; // 0x2
+    field public static final int CSIP_SET_COORDINATOR = 25; // 0x19
     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
@@ -30328,6 +30330,7 @@
     method public void close();
     method @NonNull public static android.os.SharedMemory create(@Nullable String, int) throws android.system.ErrnoException;
     method public int describeContents();
+    method @NonNull public static android.os.SharedMemory fromFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
     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;
@@ -38093,6 +38096,7 @@
     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 void onRedirectionTimeout();
     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);
diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt
index bfa5a7b..66d6124 100644
--- a/core/api/module-lib-current.txt
+++ b/core/api/module-lib-current.txt
@@ -132,6 +132,11 @@
     field public static final int VPN_UID = 1016; // 0x3f8
   }
 
+  public final class ServiceManager {
+    method public static boolean isDeclared(@NonNull String);
+    method @Nullable public static android.os.IBinder waitForDeclaredService(@NonNull String);
+  }
+
   public class StatsServiceManager {
     method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsCompanionServiceRegisterer();
     method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsManagerServiceRegisterer();
@@ -155,6 +160,11 @@
     method public static int getNumSignalStrengthLevels();
   }
 
+  public class SubscriptionManager {
+    method public void addSubscriptionInfoRecord(@NonNull String, @Nullable String, int, int);
+    method public void removeSubscriptionInfoRecord(@NonNull String, int);
+  }
+
   public class TelephonyManager {
     method @NonNull public static int[] getAllNetworkTypes();
   }
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index efde6f1..385c407 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -1510,6 +1510,7 @@
   public final class BluetoothDevice implements android.os.Parcelable {
     method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean cancelBondProcess();
     method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean createBondOutOfBand(int, @Nullable android.bluetooth.OobData, @Nullable android.bluetooth.OobData);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean fetchUuidsWithSdp(int);
     method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public byte[] getMetadata(int);
     method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getSimAccessPermission();
     method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public boolean isConnected();
@@ -1643,7 +1644,9 @@
     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 COORDINATED_SET;
     field @NonNull public static final android.os.ParcelUuid DIP;
+    field @NonNull public static final android.os.ParcelUuid GENERIC_MEDIA_CONTROL;
     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;
@@ -1654,6 +1657,7 @@
     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 MEDIA_CONTROL;
     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;
@@ -7766,6 +7770,7 @@
     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_LMKD_NATIVE = "lmkd_native";
     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";
diff --git a/core/java/Android.bp b/core/java/Android.bp
index 7ad5e05..eee696b 100644
--- a/core/java/Android.bp
+++ b/core/java/Android.bp
@@ -285,6 +285,23 @@
     },
 }
 
+aidl_interface {
+    name: "android.debug_aidl",
+    unstable: true,
+    srcs: [
+        "android/debug/AdbTransportType.aidl",
+        "android/debug/FingerprintAndPairDevice.aidl",
+        "android/debug/IAdbCallback.aidl",
+        "android/debug/IAdbManager.aidl",
+        "android/debug/PairDevice.aidl",
+    ],
+    backend: {
+        cpp: {
+            enabled: true,
+        },
+    },
+}
+
 // Avoid including Parcelable classes as we don't want to have two copies of
 // Parcelable cross the libraries. This is used by telephony-common (frameworks/opt/telephony)
 // and TeleService app (packages/services/Telephony).
diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl
index ce68e08..fb9ef53 100644
--- a/core/java/android/accounts/IAccountManager.aidl
+++ b/core/java/android/accounts/IAccountManager.aidl
@@ -105,12 +105,15 @@
         String statusToken);
 
     /* Returns Map<String, Integer> from package name to visibility with all values stored for given account */
+    @SuppressWarnings(value = {"untyped-collection"})
     Map getPackagesAndVisibilityForAccount(in Account account);
+    @SuppressWarnings(value = {"untyped-collection"})
     boolean addAccountExplicitlyWithVisibility(in Account account, String password, in Bundle extras,
             in Map visibility);
     boolean setAccountVisibility(in Account a, in String packageName, int newVisibility);
     int getAccountVisibility(in Account a, in String packageName);
     /* Type may be null returns Map <Account, Integer>*/
+    @SuppressWarnings(value = {"untyped-collection"})
     Map getAccountsAndVisibilityForPackage(in String packageName, in String accountType);
 
     void registerAccountListener(in String[] accountTypes, String opPackageName);
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 193f775..56ec8ea 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -352,11 +352,12 @@
     @UnsupportedAppUsage
     Configuration mConfiguration;
     Configuration mCompatConfiguration;
+    @GuardedBy("this")
+    private boolean mUpdateHttpProxyOnBind = false;
     @UnsupportedAppUsage
     Application mInitialApplication;
     @UnsupportedAppUsage
-    final ArrayList<Application> mAllApplications
-            = new ArrayList<Application>();
+    final ArrayList<Application> mAllApplications = new ArrayList<>();
     /**
      * Bookkeeping of instantiated backup agents indexed first by user id, then by package name.
      * Indexing by user id supports parallel backups across users on system packages as they run in
@@ -1040,17 +1041,16 @@
                 IUiAutomationConnection instrumentationUiConnection, int debugMode,
                 boolean enableBinderTracking, boolean trackAllocation,
                 boolean isRestrictedBackupMode, boolean persistent, Configuration config,
-                CompatibilityInfo compatInfo, Map services, Bundle coreSettings,
+                CompatibilityInfo compatInfo, Map<String, IBinder> services, Bundle coreSettings,
                 String buildSerial, AutofillOptions autofillOptions,
                 ContentCaptureOptions contentCaptureOptions, long[] disabledCompatChanges) {
             if (services != null) {
                 if (false) {
                     // Test code to make sure the app could see the passed-in services.
-                    for (Object oname : services.keySet()) {
-                        if (services.get(oname) == null) {
+                    for (String name : services.keySet()) {
+                        if (services.get(name) == null) {
                             continue; // AM just passed in a null service.
                         }
-                        String name = (String) oname;
 
                         // See b/79378449 about the following exemption.
                         switch (name) {
@@ -1127,8 +1127,18 @@
         }
 
         public void updateHttpProxy() {
-            ActivityThread.updateHttpProxy(
-                    getApplication() != null ? getApplication() : getSystemContext());
+            final Application app;
+            synchronized (ActivityThread.this) {
+                app = getApplication();
+                if (null == app) {
+                    // The app is not bound yet. Make a note to update the HTTP proxy when the
+                    // app is bound.
+                    mUpdateHttpProxyOnBind = true;
+                    return;
+                }
+            }
+            // App is present, update the proxy inline.
+            ActivityThread.updateHttpProxy(app);
         }
 
         public void processInBackground() {
@@ -6697,6 +6707,15 @@
             app.setContentCaptureOptions(data.contentCaptureOptions);
 
             mInitialApplication = app;
+            final boolean updateHttpProxy;
+            synchronized (this) {
+                updateHttpProxy = mUpdateHttpProxyOnBind;
+                // This synchronized block ensures that any subsequent call to updateHttpProxy()
+                // will see a non-null mInitialApplication.
+            }
+            if (updateHttpProxy) {
+                ActivityThread.updateHttpProxy(app);
+            }
 
             // don't bring up providers in restricted mode; they may depend on the
             // app's custom Application class
diff --git a/core/java/android/app/IApplicationThread.aidl b/core/java/android/app/IApplicationThread.aidl
index 6e9157e..45a8388 100644
--- a/core/java/android/app/IApplicationThread.aidl
+++ b/core/java/android/app/IApplicationThread.aidl
@@ -72,7 +72,7 @@
             IInstrumentationWatcher testWatcher, IUiAutomationConnection uiAutomationConnection,
             int debugMode, boolean enableBinderTracking, boolean trackAllocation,
             boolean restrictedBackupMode, boolean persistent, in Configuration config,
-            in CompatibilityInfo compatInfo, in Map services,
+            in CompatibilityInfo compatInfo, in Map<String, IBinder> services,
             in Bundle coreSettings, in String buildSerial, in AutofillOptions autofillOptions,
             in ContentCaptureOptions contentCaptureOptions, in long[] disabledCompatChanges);
     void runIsolatedEntryPoint(in String entryPoint, in String[] entryPointArgs);
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 3ad8b4b..d28e489 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -223,14 +223,14 @@
     void addCrossProfileIntentFilter(in ComponentName admin, in IntentFilter filter, int flags);
     void clearCrossProfileIntentFilters(in ComponentName admin);
 
-    boolean setPermittedAccessibilityServices(in ComponentName admin,in List packageList);
-    List getPermittedAccessibilityServices(in ComponentName admin);
-    List getPermittedAccessibilityServicesForUser(int userId);
+    boolean setPermittedAccessibilityServices(in ComponentName admin,in List<String> packageList);
+    List<String> getPermittedAccessibilityServices(in ComponentName admin);
+    List<String> getPermittedAccessibilityServicesForUser(int userId);
     boolean isAccessibilityServicePermittedByAdmin(in ComponentName admin, String packageName, int userId);
 
-    boolean setPermittedInputMethods(in ComponentName admin,in List packageList);
-    List getPermittedInputMethods(in ComponentName admin);
-    List getPermittedInputMethodsForCurrentUser();
+    boolean setPermittedInputMethods(in ComponentName admin,in List<String> packageList);
+    List<String> getPermittedInputMethods(in ComponentName admin);
+    List<String> getPermittedInputMethodsForCurrentUser();
     boolean isInputMethodPermittedByAdmin(in ComponentName admin, String packageName, int userId);
 
     boolean setPermittedCrossProfileNotificationListeners(in ComponentName admin, in List<String> packageList);
diff --git a/core/java/android/app/usage/UsageStats.java b/core/java/android/app/usage/UsageStats.java
index 4d73a61..6d777cf 100644
--- a/core/java/android/app/usage/UsageStats.java
+++ b/core/java/android/app/usage/UsageStats.java
@@ -171,9 +171,9 @@
         mLaunchCount = stats.mLaunchCount;
         mAppLaunchCount = stats.mAppLaunchCount;
         mLastEvent = stats.mLastEvent;
-        mActivities = stats.mActivities;
-        mForegroundServices = stats.mForegroundServices;
-        mChooserCounts = stats.mChooserCounts;
+        mActivities = stats.mActivities.clone();
+        mForegroundServices = new ArrayMap<>(stats.mForegroundServices);
+        mChooserCounts = new ArrayMap<>(stats.mChooserCounts);
     }
 
     /**
diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java
index 16413e1..4dcb3dc 100644
--- a/core/java/android/bluetooth/BluetoothA2dp.java
+++ b/core/java/android/bluetooth/BluetoothA2dp.java
@@ -946,6 +946,10 @@
     public boolean setBufferLengthMillis(@BluetoothCodecConfig.SourceCodecType int codec,
             int value) {
         if (VDBG) log("setBufferLengthMillis(" + codec + ", " + value + ")");
+        if (value < 0) {
+            Log.e(TAG, "Trying to set audio buffer length to a negative value: " + value);
+            return false;
+        }
         try {
             final IBluetoothA2dp service = getService();
             if (service != null && isEnabled()) {
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 0969ec2..38fb90d 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -1622,13 +1622,38 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH)
     public boolean fetchUuidsWithSdp() {
+        return fetchUuidsWithSdp(TRANSPORT_AUTO);
+    }
+
+    /**
+     * Perform a service discovery on the remote device to get the UUIDs supported with the
+     * specific transport.
+     *
+     * <p>This API is asynchronous and {@link #ACTION_UUID} intent is sent,
+     * with the UUIDs supported by the remote end. If there is an error
+     * in getting the SDP or GATT records or if the process takes a long time, or the device
+     * is bonding and we have its UUIDs cached, {@link #ACTION_UUID} intent is sent with the
+     * UUIDs that is currently present in the cache. Clients should use the {@link #getUuids}
+     * to get UUIDs if service discovery is not to be performed. If there is an ongoing bonding
+     * process, service discovery or device inquiry, the request will be queued.
+     *
+     * @param transport - provide type of transport (e.g. LE or Classic).
+     * @return False if the check fails, True if the process of initiating an ACL connection
+     * to the remote device was started or cached UUIDs will be broadcast with the specific
+     * transport.
+     *
+     * @hide
+     */
+    @SystemApi
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+    public boolean fetchUuidsWithSdp(@Transport int transport) {
         final IBluetooth service = sService;
         if (service == null || !isBluetoothEnabled()) {
             Log.e(TAG, "BT not enabled. Cannot fetchUuidsWithSdp");
             return false;
         }
         try {
-            return service.fetchRemoteUuids(this);
+            return service.fetchRemoteUuids(this, transport);
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
         }
diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java
index b3a7c88..b3ccdd0 100644
--- a/core/java/android/bluetooth/BluetoothGatt.java
+++ b/core/java/android/bluetooth/BluetoothGatt.java
@@ -101,6 +101,9 @@
     /** A read or write operation was requested with an invalid offset */
     public static final int GATT_INVALID_OFFSET = 0x7;
 
+    /** Insufficient authorization for a given operation */
+    public static final int GATT_INSUFFICIENT_AUTHORIZATION = 0x8;
+
     /** A write operation exceeds the maximum length of the attribute */
     public static final int GATT_INVALID_ATTRIBUTE_LENGTH = 0xd;
 
diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java
index b76d6b8..c4649b4 100644
--- a/core/java/android/bluetooth/BluetoothProfile.java
+++ b/core/java/android/bluetooth/BluetoothProfile.java
@@ -222,12 +222,25 @@
     int VOLUME_CONTROL = 23;
 
     /**
+     * @hide
+     * Media Control Profile server
+     *
+     */
+    int MCP_SERVER = 24;
+
+    /**
+     * Coordinated Set Identification Profile set coordinator
+     *
+     */
+    int CSIP_SET_COORDINATOR = 25;
+
+    /**
      * Max profile ID. This value should be updated whenever a new profile is added to match
      * the largest value assigned to a profile.
      *
      * @hide
      */
-    int MAX_PROFILE_ID = 23;
+    int MAX_PROFILE_ID = 25;
 
     /**
      * Default priority for devices that we try to auto-connect to and
diff --git a/core/java/android/bluetooth/BluetoothUuid.java b/core/java/android/bluetooth/BluetoothUuid.java
index d82cf19..7e4ee9e8 100644
--- a/core/java/android/bluetooth/BluetoothUuid.java
+++ b/core/java/android/bluetooth/BluetoothUuid.java
@@ -172,6 +172,21 @@
     /** @hide */
     @NonNull
     @SystemApi
+    public static final ParcelUuid GENERIC_MEDIA_CONTROL =
+            ParcelUuid.fromString("00001849-0000-1000-8000-00805F9B34FB");
+    /** @hide */
+    @NonNull
+    @SystemApi
+    public static final ParcelUuid MEDIA_CONTROL =
+            ParcelUuid.fromString("00001848-0000-1000-8000-00805F9B34FB");
+    /** @hide */
+    @NonNull
+    @SystemApi
+    public static final ParcelUuid COORDINATED_SET =
+            ParcelUuid.fromString("00001846-0000-1000-8000-00805F9B34FB");
+    /** @hide */
+    @NonNull
+    @SystemApi
     public static final ParcelUuid BASE_UUID =
             ParcelUuid.fromString("00000000-0000-1000-8000-00805F9B34FB");
 
diff --git a/core/java/android/bluetooth/le/ScanFilter.java b/core/java/android/bluetooth/le/ScanFilter.java
index ddc93327..9da6ff3 100644
--- a/core/java/android/bluetooth/le/ScanFilter.java
+++ b/core/java/android/bluetooth/le/ScanFilter.java
@@ -168,6 +168,15 @@
                 dest.writeByteArray(mManufacturerDataMask);
             }
         }
+
+        // IRK
+        if (mDeviceAddress != null) {
+            dest.writeInt(mAddressType);
+            dest.writeInt(mIrk == null ? 0 : 1);
+            if (mIrk != null) {
+                dest.writeByteArray(mIrk);
+            }
+        }
     }
 
     /**
@@ -187,8 +196,10 @@
             if (in.readInt() == 1) {
                 builder.setDeviceName(in.readString());
             }
+            String address = null;
+            // If we have a non-null address
             if (in.readInt() == 1) {
-                builder.setDeviceAddress(in.readString());
+                address = in.readString();
             }
             if (in.readInt() == 1) {
                 ParcelUuid uuid = in.readParcelable(ParcelUuid.class.getClassLoader());
@@ -245,6 +256,17 @@
                 }
             }
 
+            // IRK
+            if (address != null) {
+                final int addressType = in.readInt();
+                if (in.readInt() == 1) {
+                    final byte[] irk = new byte[16];
+                    in.readByteArray(irk);
+                    builder.setDeviceAddress(address, addressType, irk);
+                } else {
+                    builder.setDeviceAddress(address, addressType);
+                }
+            }
             return builder.build();
         }
     };
diff --git a/core/java/android/content/OWNERS b/core/java/android/content/OWNERS
index 8ad1349..c7f92c9 100644
--- a/core/java/android/content/OWNERS
+++ b/core/java/android/content/OWNERS
@@ -1,12 +1,14 @@
 # Remain no owner because multiple modules may touch this file.
 per-file Context.java = *
 per-file ContextWrapper.java = *
-per-file Content* = varunshah@google.com, omakoto@google.com, jsharkey@google.com
+per-file Content* = file:/services/core/java/com/android/server/am/OWNERS
 per-file IntentFilter.java = toddke@google.com
 per-file IntentFilter.java = patb@google.com
+per-file IntentFilter.java = file:/services/core/java/com/android/server/am/OWNERS
 per-file Intent.java = toddke@google.com
 per-file Intent.java = patb@google.com
 per-file Intent.java = file:/services/core/java/com/android/server/wm/OWNERS
+per-file Intent.java = file:/services/core/java/com/android/server/am/OWNERS
 per-file AutofillOptions* = file:/core/java/android/service/autofill/OWNERS
 per-file ContentCaptureOptions* = file:/core/java/android/service/contentcapture/OWNERS
 per-file LocusId* = file:/core/java/android/service/contentcapture/OWNERS
diff --git a/core/java/android/content/om/IOverlayManager.aidl b/core/java/android/content/om/IOverlayManager.aidl
index 0b950b4..11ea16f 100644
--- a/core/java/android/content/om/IOverlayManager.aidl
+++ b/core/java/android/content/om/IOverlayManager.aidl
@@ -39,7 +39,7 @@
      *         requested user, an empty map is returned.
      */
     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
-    Map getAllOverlays(in int userId);
+    Map<String, List<OverlayInfo>> getAllOverlays(in int userId);
 
     /**
      * Returns information about all overlays for the given target package for
@@ -51,7 +51,7 @@
      * @return A list of OverlayInfo objects; if no overlays exist for the
      *         requested package, an empty list is returned.
      */
-    List getOverlayInfosForTarget(in String targetPackageName, in int userId);
+    List<OverlayInfo> getOverlayInfosForTarget(in String targetPackageName, in int userId);
 
     /**
      * Returns information about the overlay with the given package name for the
diff --git a/core/java/android/debug/FingerprintAndPairDevice.aidl b/core/java/android/debug/FingerprintAndPairDevice.aidl
new file mode 100644
index 0000000..b439e14
--- /dev/null
+++ b/core/java/android/debug/FingerprintAndPairDevice.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.debug;
+
+import android.debug.PairDevice;
+
+/**
+ * @see {@link android.debug.IAdbManager#getPairedDevices()}
+ * @hide
+ */
+parcelable FingerprintAndPairDevice {
+    String keyFingerprint;
+    PairDevice device;
+}
\ No newline at end of file
diff --git a/core/java/android/debug/IAdbCallback.aidl b/core/java/android/debug/IAdbCallback.aidl
new file mode 100644
index 0000000..9c8f1cf
--- /dev/null
+++ b/core/java/android/debug/IAdbCallback.aidl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.debug;
+
+import android.debug.AdbTransportType;
+
+/**
+ * Callback interface of {@link android.debug.IAdbCallbackManager}.
+ *
+ * @hide
+ */
+oneway interface IAdbCallback {
+    /**
+     * On debugging enabled, service providing IAdbManager calls this function.
+     */
+    void onDebuggingChanged(boolean enabled, AdbTransportType type);
+}
diff --git a/core/java/android/debug/IAdbManager.aidl b/core/java/android/debug/IAdbManager.aidl
index aea7633..314c405 100644
--- a/core/java/android/debug/IAdbManager.aidl
+++ b/core/java/android/debug/IAdbManager.aidl
@@ -16,6 +16,9 @@
 
 package android.debug;
 
+import android.debug.FingerprintAndPairDevice;
+import android.debug.IAdbCallback;
+
 /**
  * Interface to communicate remotely with the {@code AdbService} in the system server.
  *
@@ -58,9 +61,10 @@
     void denyWirelessDebugging();
 
     /**
-     * Returns a Map<String, PairDevice> with the key fingerprint mapped to the device information.
+     * Returns an array of NamedPairDevice with the key fingerprint mapped to the device
+     * information.
      */
-    Map getPairedDevices();
+    FingerprintAndPairDevice[] getPairedDevices();
 
     /**
      * Unpair the device identified by the key fingerprint it uses.
@@ -108,4 +112,14 @@
      * QR code.
      */
     boolean isAdbWifiQrSupported();
+
+    /**
+     * Register callback for ADB debugging changed notification.
+     */
+    void registerCallback(IAdbCallback callback);
+
+    /**
+     * Unregister callback for ADB debugging changed notification.
+     */
+    void unregisterCallback(IAdbCallback callback);
 }
diff --git a/core/java/android/debug/PairDevice.aidl b/core/java/android/debug/PairDevice.aidl
new file mode 100644
index 0000000..c72a5ed
--- /dev/null
+++ b/core/java/android/debug/PairDevice.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.debug;
+
+/**
+ * Contains information about the client in an ADB connection.
+ * @see {@link android.debug.IAdbManager#getPairedDevices()}
+ * @hide
+ */
+parcelable PairDevice {
+    /**
+     * The human-readable name of the device.
+     */
+    String name;
+
+    /**
+     * The device's guid.
+     */
+    String guid;
+
+    /**
+     * Indicates whether the device is currently connected to adbd.
+     */
+    boolean connected;
+}
\ No newline at end of file
diff --git a/core/java/android/debug/PairDevice.java b/core/java/android/debug/PairDevice.java
deleted file mode 100644
index 2d5b446..0000000
--- a/core/java/android/debug/PairDevice.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.debug;
-
-import android.annotation.NonNull;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.internal.annotations.Immutable;
-import com.android.internal.util.Preconditions;
-
-/**
- * Contains information about the client in an ADB connection.
- * @hide
- */
-@Immutable
-public class PairDevice implements Parcelable {
-    /**
-     * The human-readable name of the device.
-     */
-    @NonNull private final String mName;
-
-    /**
-     * The device's guid.
-     */
-    @NonNull private final String mGuid;
-
-    /**
-     * Indicates whether the device is currently connected to adbd.
-     */
-    private final boolean mConnected;
-
-    public PairDevice(@NonNull String name, @NonNull String guid, boolean connected) {
-        Preconditions.checkStringNotEmpty(name);
-        Preconditions.checkStringNotEmpty(guid);
-        mName = name;
-        mGuid = guid;
-        mConnected = connected;
-    }
-
-    /**
-     * @return the device name.
-     */
-    @NonNull
-    public String getDeviceName() {
-        return mName;
-    }
-
-    /**
-     * @return the device GUID.
-     */
-    @NonNull
-    public String getGuid() {
-        return mGuid;
-    }
-
-    /**
-     * @return the adb connection state of the device.
-     */
-    public boolean isConnected() {
-        return mConnected;
-    }
-
-    @Override
-    public void writeToParcel(@NonNull Parcel dest, int flags) {
-        dest.writeString(mName);
-        dest.writeString(mGuid);
-        dest.writeBoolean(mConnected);
-    }
-
-    /**
-     * @return Human-readable info about the object.
-     */
-    @Override
-    public String toString() {
-        return "\n" + mName + "\n" + mGuid + "\n" + mConnected;
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @NonNull
-    public static final Parcelable.Creator<PairDevice> CREATOR =
-            new Creator<PairDevice>() {
-                @Override
-                public PairDevice createFromParcel(Parcel source) {
-                    return new PairDevice(source.readString(), source.readString(),
-                            source.readBoolean());
-                }
-
-                @Override
-                public PairDevice[] newArray(int size) {
-                    return new PairDevice[size];
-                }
-            };
-}
diff --git a/core/java/android/hardware/biometrics/OWNERS b/core/java/android/hardware/biometrics/OWNERS
index 2065ffa..0b4d9d9 100644
--- a/core/java/android/hardware/biometrics/OWNERS
+++ b/core/java/android/hardware/biometrics/OWNERS
@@ -1,8 +1,3 @@
 # Bug component: 879035
 
-curtislb@google.com
-ilyamaty@google.com
-jaggies@google.com
-joshmccloskey@google.com
-kchyn@google.com
-
+include /services/core/java/com/android/server/biometrics/OWNERS
diff --git a/core/java/android/hardware/radio/ITuner.aidl b/core/java/android/hardware/radio/ITuner.aidl
index 429f1f3..7bf234b 100644
--- a/core/java/android/hardware/radio/ITuner.aidl
+++ b/core/java/android/hardware/radio/ITuner.aidl
@@ -80,14 +80,14 @@
     void setConfigFlag(int flag, boolean value);
 
     /**
-     * @param parameters Vendor-specific key-value pairs, must be Map<String, String>
-     * @return Vendor-specific key-value pairs, must be Map<String, String>
+     * @param parameters Vendor-specific key-value pairs
+     * @return Vendor-specific key-value pairs
      */
-    Map setParameters(in Map parameters);
+    Map<String, String> setParameters(in Map<String, String> parameters);
 
     /**
      * @param keys Parameter keys to fetch
-     * @return Vendor-specific key-value pairs, must be Map<String, String>
+     * @return Vendor-specific key-value pairs
      */
-    Map getParameters(in List<String> keys);
+    Map<String, String> getParameters(in List<String> keys);
 }
diff --git a/core/java/android/hardware/radio/ITunerCallback.aidl b/core/java/android/hardware/radio/ITunerCallback.aidl
index b32daa5..f98947b 100644
--- a/core/java/android/hardware/radio/ITunerCallback.aidl
+++ b/core/java/android/hardware/radio/ITunerCallback.aidl
@@ -36,7 +36,7 @@
     void onProgramListUpdated(in ProgramList.Chunk chunk);
 
     /**
-     * @param parameters Vendor-specific key-value pairs, must be Map<String, String>
+     * @param parameters Vendor-specific key-value pairs
      */
-    void onParametersUpdated(in Map parameters);
+    void onParametersUpdated(in Map<String, String> parameters);
 }
diff --git a/core/java/android/hardware/radio/TunerCallbackAdapter.java b/core/java/android/hardware/radio/TunerCallbackAdapter.java
index beff0f7..e3f7001 100644
--- a/core/java/android/hardware/radio/TunerCallbackAdapter.java
+++ b/core/java/android/hardware/radio/TunerCallbackAdapter.java
@@ -220,7 +220,7 @@
     }
 
     @Override
-    public void onParametersUpdated(Map parameters) {
+    public void onParametersUpdated(Map<String, String> parameters) {
         mHandler.post(() -> mCallback.onParametersUpdated(parameters));
     }
 }
diff --git a/core/java/android/net/PacProxyManager.java b/core/java/android/net/PacProxyManager.java
index 8f7ad8c..da79634 100644
--- a/core/java/android/net/PacProxyManager.java
+++ b/core/java/android/net/PacProxyManager.java
@@ -94,7 +94,7 @@
     }
 
     /**
-     * Updates the PAC Proxy Installer with current Proxy information.
+     * Updates the PAC Proxy Service with current Proxy information.
      */
     @RequiresPermission(anyOf = {
             android.Manifest.permission.NETWORK_STACK,
diff --git a/core/java/android/net/VpnManager.java b/core/java/android/net/VpnManager.java
index 662ebb3..5c28553 100644
--- a/core/java/android/net/VpnManager.java
+++ b/core/java/android/net/VpnManager.java
@@ -389,6 +389,10 @@
 
     /**
      * Starts a legacy VPN.
+     *
+     * Legacy VPN is deprecated starting from Android S. So this API shouldn't be called if the
+     * initial SDK version of device is Android S+. Otherwise, UnsupportedOperationException will be
+     * thrown.
      * @hide
      */
     public void startLegacyVpn(VpnProfile profile) {
diff --git a/core/java/android/os/DropBoxManager.java b/core/java/android/os/DropBoxManager.java
index fd576c9..d701676 100644
--- a/core/java/android/os/DropBoxManager.java
+++ b/core/java/android/os/DropBoxManager.java
@@ -30,6 +30,7 @@
 
 import com.android.internal.os.IDropBoxManagerService;
 
+import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
 import java.io.File;
@@ -234,7 +235,8 @@
             } else {
                 return null;
             }
-            return (mFlags & IS_GZIPPED) != 0 ? new GZIPInputStream(is) : is;
+            return (mFlags & IS_GZIPPED) != 0
+                ? new GZIPInputStream(new BufferedInputStream(is)) : is;
         }
 
         public static final @android.annotation.NonNull Parcelable.Creator<Entry> CREATOR = new Parcelable.Creator() {
diff --git a/core/java/android/os/ServiceManager.java b/core/java/android/os/ServiceManager.java
index f853e67..06a2c87 100644
--- a/core/java/android/os/ServiceManager.java
+++ b/core/java/android/os/ServiceManager.java
@@ -17,6 +17,8 @@
 package android.os;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.util.ArrayMap;
 import android.util.Log;
@@ -28,6 +30,7 @@
 import java.util.Map;
 
 /** @hide */
+@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
 public final class ServiceManager {
     private static final String TAG = "ServiceManager";
     private static final Object sLock = new Object();
@@ -98,10 +101,12 @@
         int COUNT = GET_SERVICE + 1;
     }
 
+    /** @hide */
     public static final StatLogger sStatLogger = new StatLogger(new String[] {
             "getService()",
     });
 
+    /** @hide */
     @UnsupportedAppUsage
     public ServiceManager() {
     }
@@ -123,6 +128,7 @@
      *
      * @param name the name of the service to get
      * @return a reference to the service, or <code>null</code> if the service doesn't exist
+     * @hide
      */
     @UnsupportedAppUsage
     public static IBinder getService(String name) {
@@ -160,6 +166,7 @@
      *
      * @param name the name of the new service
      * @param service the service object
+     * @hide
      */
     @UnsupportedAppUsage
     public static void addService(String name, IBinder service) {
@@ -174,6 +181,7 @@
      * @param service the service object
      * @param allowIsolated set to true to allow isolated sandboxed processes
      * to access this service
+     * @hide
      */
     @UnsupportedAppUsage
     public static void addService(String name, IBinder service, boolean allowIsolated) {
@@ -189,6 +197,7 @@
      * @param allowIsolated set to true to allow isolated sandboxed processes
      * @param dumpPriority supported dump priority levels as a bitmask
      * to access this service
+     * @hide
      */
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     public static void addService(String name, IBinder service, boolean allowIsolated,
@@ -203,6 +212,7 @@
     /**
      * Retrieve an existing service called @a name from the
      * service manager.  Non-blocking.
+     * @hide
      */
     @UnsupportedAppUsage
     public static IBinder checkService(String name) {
@@ -239,6 +249,7 @@
      *
      * @return true if the service is declared somewhere (eg. VINTF manifest) and
      * waitForService should always be able to return the service.
+     * @hide
      */
     public static String[] getDeclaredInstances(@NonNull String iface) {
         try {
@@ -256,8 +267,13 @@
      * will wait for it to be ready.
      *
      * @return {@code null} only if there are permission problems or fatal errors.
+     * @hide
      */
-    public static native IBinder waitForService(@NonNull String name);
+    public static IBinder waitForService(@NonNull String name) {
+        return Binder.allowBlocking(waitForServiceNative(name));
+    }
+
+    private static native IBinder waitForServiceNative(@NonNull String name);
 
     /**
      * Returns the specified service from the service manager, if declared.
@@ -267,8 +283,10 @@
      *
      * @return {@code null} if the service is not declared in the manifest, or if there are
      * permission problems, or if there are fatal errors.
+     * @hide
      */
-    public static IBinder waitForDeclaredService(@NonNull String name) {
+    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
+    @Nullable public static IBinder waitForDeclaredService(@NonNull String name) {
         return isDeclared(name) ? waitForService(name) : null;
     }
 
@@ -276,6 +294,7 @@
      * Return a list of all currently running services.
      * @return an array of all currently running services, or <code>null</code> in
      * case of an exception
+     * @hide
      */
     @UnsupportedAppUsage
     public static String[] listServices() {
diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java
index 136e3de..46eb2ec 100644
--- a/core/java/android/os/SharedMemory.java
+++ b/core/java/android/os/SharedMemory.java
@@ -93,6 +93,26 @@
         }
     }
 
+    /**
+     * Creates an instance from existing shared memory passed as {@link ParcelFileDescriptor}.
+     *
+     * <p> The {@code fd} should be a shared memory created from
+       {@code SharedMemory or ASharedMemory}. This can be useful when shared memory is passed as
+       file descriptor through JNI or binder service implemented in cpp.
+     * <p> Note that newly created {@code SharedMemory} takes ownership of passed {@code fd} and
+     * the original {@code fd} becomes detached (Check {@link ParcelFileDescriptor#detachFd()}).
+     * If the caller wants to use the file descriptor after the call, the caller should duplicate
+     * the file descriptor (Check {@link ParcelFileDescriptor#dup()}) and pass the duped version
+     * instead.
+     *
+     * @param fd File descriptor of shared memory passed as {@link ParcelFileDescriptor}.
+     */
+    public static @NonNull SharedMemory fromFileDescriptor(@NonNull ParcelFileDescriptor fd) {
+        FileDescriptor f = new FileDescriptor();
+        f.setInt$(fd.detachFd());
+        return new SharedMemory(f);
+    }
+
     private static final int PROT_MASK = OsConstants.PROT_READ | OsConstants.PROT_WRITE
             | OsConstants.PROT_EXEC | OsConstants.PROT_NONE;
 
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java
index bd84c84..c89f4f5 100644
--- a/core/java/android/provider/DeviceConfig.java
+++ b/core/java/android/provider/DeviceConfig.java
@@ -201,6 +201,14 @@
             "intelligence_content_suggestions";
 
     /**
+     * Namespace for all lmkd related features.
+     *
+     * @hide
+     */
+    @SystemApi
+    public static final String NAMESPACE_LMKD_NATIVE = "lmkd_native";
+
+    /**
      * Namespace for all media native related features.
      *
      * @hide
diff --git a/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java b/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java
index 346fe29..0771157 100644
--- a/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java
+++ b/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java
@@ -210,7 +210,7 @@
         if (contentDigests.containsKey(CONTENT_DIGEST_VERITY_CHUNKED_SHA256)) {
             byte[] verityDigest = contentDigests.get(CONTENT_DIGEST_VERITY_CHUNKED_SHA256);
             verityRootHash = ApkSigningBlockUtils.parseVerityDigestAndVerifySourceLength(
-                    verityDigest, apk.length(), signatureInfo);
+                    verityDigest, apk.getChannel().size(), signatureInfo);
         }
 
         byte[] digest = pickBestDigestForV4(contentDigests);
diff --git a/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java b/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java
index 4ab541b..44f01a4 100644
--- a/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java
+++ b/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java
@@ -209,7 +209,7 @@
         if (contentDigests.containsKey(CONTENT_DIGEST_VERITY_CHUNKED_SHA256)) {
             byte[] verityDigest = contentDigests.get(CONTENT_DIGEST_VERITY_CHUNKED_SHA256);
             result.verityRootHash = ApkSigningBlockUtils.parseVerityDigestAndVerifySourceLength(
-                    verityDigest, apk.length(), signatureInfo);
+                    verityDigest, apk.getChannel().size(), signatureInfo);
         }
 
         result.digest = pickBestDigestForV4(contentDigests);
diff --git a/core/java/android/util/apk/ApkSigningBlockUtils.java b/core/java/android/util/apk/ApkSigningBlockUtils.java
index 6efe95c..f79b5b9 100644
--- a/core/java/android/util/apk/ApkSigningBlockUtils.java
+++ b/core/java/android/util/apk/ApkSigningBlockUtils.java
@@ -349,7 +349,7 @@
             SignatureInfo signatureInfo) throws SecurityException {
         try {
             byte[] expectedRootHash = parseVerityDigestAndVerifySourceLength(expectedDigest,
-                    apk.length(), signatureInfo);
+                    apk.getChannel().size(), signatureInfo);
             VerityBuilder.VerityResult verity = VerityBuilder.generateApkVerityTree(apk,
                     signatureInfo, new ByteBufferFactory() {
                         @Override
diff --git a/core/java/android/util/apk/VerityBuilder.java b/core/java/android/util/apk/VerityBuilder.java
index e81e3f7..3dfa4cd 100644
--- a/core/java/android/util/apk/VerityBuilder.java
+++ b/core/java/android/util/apk/VerityBuilder.java
@@ -90,7 +90,7 @@
             throws IOException, SecurityException, NoSuchAlgorithmException, DigestException {
         long signingBlockSize =
                 signatureInfo.centralDirOffset - signatureInfo.apkSigningBlockOffset;
-        long dataSize = apk.length() - signingBlockSize;
+        long dataSize = apk.getChannel().size() - signingBlockSize;
         int[] levelOffset = calculateVerityLevelOffset(dataSize);
         int merkleTreeSize = levelOffset[levelOffset.length - 1];
 
@@ -108,7 +108,7 @@
             @NonNull SignatureInfo signatureInfo, @NonNull ByteBuffer footerOutput)
             throws IOException {
         footerOutput.order(ByteOrder.LITTLE_ENDIAN);
-        generateApkVerityHeader(footerOutput, apk.length(), DEFAULT_SALT);
+        generateApkVerityHeader(footerOutput, apk.getChannel().size(), DEFAULT_SALT);
         long signingBlockSize =
                 signatureInfo.centralDirOffset - signatureInfo.apkSigningBlockOffset;
         generateApkVerityExtensions(footerOutput, signatureInfo.apkSigningBlockOffset,
@@ -310,11 +310,11 @@
                 eocdCdOffsetFieldPosition + ZIP_EOCD_CENTRAL_DIR_OFFSET_FIELD_SIZE;
         consumeByChunk(digester,
                 new MemoryMappedFileDataSource(apk.getFD(), offsetAfterEocdCdOffsetField,
-                    apk.length() - offsetAfterEocdCdOffsetField),
+                    apk.getChannel().size() - offsetAfterEocdCdOffsetField),
                 MMAP_REGION_SIZE_BYTES);
 
         // 5. Pad 0s up to the nearest 4096-byte block before hashing.
-        int lastIncompleteChunkSize = (int) (apk.length() % CHUNK_SIZE_BYTES);
+        int lastIncompleteChunkSize = (int) (apk.getChannel().size() % CHUNK_SIZE_BYTES);
         if (lastIncompleteChunkSize != 0) {
             digester.consume(ByteBuffer.allocate(CHUNK_SIZE_BYTES - lastIncompleteChunkSize));
         }
diff --git a/core/java/com/android/internal/net/VpnProfile.java b/core/java/com/android/internal/net/VpnProfile.java
index 6e1d3ce..5f84b5a 100644
--- a/core/java/com/android/internal/net/VpnProfile.java
+++ b/core/java/com/android/internal/net/VpnProfile.java
@@ -377,12 +377,15 @@
     /** Checks if this profile specifies a LegacyVpn type. */
     public static boolean isLegacyType(int type) {
         switch (type) {
-            case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: // fall through
-            case VpnProfile.TYPE_IKEV2_IPSEC_RSA: // fall through
-            case VpnProfile.TYPE_IKEV2_IPSEC_PSK:
-                return false;
-            default:
+            case VpnProfile.TYPE_PPTP:
+            case VpnProfile.TYPE_L2TP_IPSEC_PSK:
+            case VpnProfile.TYPE_L2TP_IPSEC_RSA:
+            case VpnProfile.TYPE_IPSEC_XAUTH_PSK:
+            case VpnProfile.TYPE_IPSEC_XAUTH_RSA:
+            case VpnProfile.TYPE_IPSEC_HYBRID_RSA:
                 return true;
+            default:
+                return false;
         }
     }
 
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 0e02af2..cd52db4 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -33,13 +33,11 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.os.ServiceSpecificException;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.ZygoteProcess;
-import android.os.storage.StorageManager;
 import android.provider.DeviceConfig;
 import android.security.keystore2.AndroidKeyStoreProvider;
 import android.system.ErrnoException;
@@ -58,7 +56,6 @@
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.internal.util.Preconditions;
 
-import dalvik.system.DexFile;
 import dalvik.system.VMRuntime;
 import dalvik.system.ZygoteHooks;
 
@@ -517,7 +514,6 @@
 
         final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH");
         if (systemServerClasspath != null) {
-            performSystemServerDexOpt(systemServerClasspath);
             // Capturing profiles is only supported for debug or eng builds since selinux normally
             // prevents it.
             if (shouldProfileSystemServer() && (Build.IS_USERDEBUG || Build.IS_ENG)) {
@@ -659,95 +655,6 @@
     }
 
     /**
-     * Performs dex-opt on the elements of {@code classPath}, if needed. We choose the instruction
-     * set of the current runtime.
-     */
-    private static void performSystemServerDexOpt(String classPath) {
-        final String[] classPathElements = classPath.split(":");
-        final String instructionSet = VMRuntime.getRuntime().vmInstructionSet();
-
-        String classPathForElement = "";
-        for (String classPathElement : classPathElements) {
-            // We default to the verify filter because the compilation will happen on /data and
-            // system server cannot load executable code outside /system.
-            String systemServerFilter = SystemProperties.get(
-                    "dalvik.vm.systemservercompilerfilter", "verify");
-
-            String classLoaderContext =
-                        getSystemServerClassLoaderContext(classPathForElement);
-            int dexoptNeeded;
-            try {
-                dexoptNeeded = DexFile.getDexOptNeeded(
-                        classPathElement, instructionSet, systemServerFilter,
-                        classLoaderContext, false /* newProfile */, false /* downgrade */);
-            } catch (FileNotFoundException ignored) {
-                // Do not add to the classpath.
-                Log.w(TAG, "Missing classpath element for system server: " + classPathElement);
-                continue;
-            } catch (IOException e) {
-                // Not fully clear what to do here as we don't know the cause of the
-                // IO exception. Add to the classpath to be conservative, but don't
-                // attempt to compile it.
-                Log.w(TAG, "Error checking classpath element for system server: "
-                        + classPathElement, e);
-                dexoptNeeded = DexFile.NO_DEXOPT_NEEDED;
-            }
-
-            if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) {
-                final String packageName = "*";
-                final String outputPath = null;
-                final int dexFlags = 0;
-                final String uuid = StorageManager.UUID_PRIVATE_INTERNAL;
-                final String seInfo = null;
-                final int targetSdkVersion = 0;  // SystemServer targets the system's SDK version
-                // Wait for installd to be made available
-                IInstalld installd = IInstalld.Stub.asInterface(
-                        ServiceManager.waitForService("installd"));
-
-                try {
-                    installd.dexopt(classPathElement, Process.SYSTEM_UID, packageName,
-                            instructionSet, dexoptNeeded, outputPath, dexFlags, systemServerFilter,
-                            uuid, classLoaderContext, seInfo, false /* downgrade */,
-                            targetSdkVersion, /*profileName*/ null, /*dexMetadataPath*/ null,
-                            "server-dexopt");
-                } catch (RemoteException | ServiceSpecificException e) {
-                    // Ignore (but log), we need this on the classpath for fallback mode.
-                    Log.w(TAG, "Failed compiling classpath element for system server: "
-                            + classPathElement, e);
-                }
-            }
-
-            classPathForElement = encodeSystemServerClassPath(
-                    classPathForElement, classPathElement);
-        }
-    }
-
-    /**
-     * Encodes the system server class loader context in a format that is accepted by dexopt. This
-     * assumes the system server is always loaded with a {@link dalvik.system.PathClassLoader}.
-     *
-     * Note that ideally we would use the {@code DexoptUtils} to compute this. However we have no
-     * dependency here on the server so we hard code the logic again.
-     */
-    private static String getSystemServerClassLoaderContext(String classPath) {
-        return classPath == null ? "PCL[]" : "PCL[" + classPath + "]";
-    }
-
-    /**
-     * Encodes the class path in a format accepted by dexopt.
-     *
-     * @param classPath  The old class path (may be empty).
-     * @param newElement  The new class path elements
-     * @return The class path encoding resulted from appending {@code newElement} to {@code
-     * classPath}.
-     */
-    private static String encodeSystemServerClassPath(String classPath, String newElement) {
-        return (classPath == null || classPath.isEmpty())
-                ? newElement
-                : classPath + ":" + newElement;
-    }
-
-    /**
      * Prepare the arguments and forks for the system server process.
      *
      * @return A {@code Runnable} that provides an entrypoint into system_server code in the child
diff --git a/core/java/com/android/internal/telephony/IPhoneStateListener.aidl b/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
index b90722c..09bb327 100644
--- a/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
+++ b/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
@@ -62,6 +62,7 @@
     void onActiveDataSubIdChanged(in int subId);
     void onRadioPowerStateChanged(in int state);
     void onCallAttributesChanged(in CallAttributes callAttributes);
+    @SuppressWarnings(value={"untyped-collection"})
     void onEmergencyNumberListChanged(in Map emergencyNumberList);
     void onOutgoingEmergencyCall(in EmergencyNumber placedEmergencyNumber, int subscriptionId);
     void onOutgoingEmergencySms(in EmergencyNumber sentEmergencyNumber, int subscriptionId);
diff --git a/core/java/com/android/internal/util/OWNERS b/core/java/com/android/internal/util/OWNERS
index 5b68159..100a605d 100644
--- a/core/java/com/android/internal/util/OWNERS
+++ b/core/java/com/android/internal/util/OWNERS
@@ -1,6 +1,7 @@
 per-file AsyncChannel* = lorenzo@google.com, satk@google.com, etancohen@google.com
 per-file MessageUtils*, Protocol*, RingBuffer*, TokenBucket* = jchalard@google.com, lorenzo@google.com, satk@google.com
 per-file *Notification* = file:/services/core/java/com/android/server/notification/OWNERS
+per-file *ContrastColor* = file:/services/core/java/com/android/server/notification/OWNERS
 per-file Protocol* = etancohen@google.com, lorenzo@google.com
 per-file State* = jchalard@google.com, lorenzo@google.com, satk@google.com
 per-file DataClass* = eugenesusla@google.com
\ No newline at end of file
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 59e95c9..1132422 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -546,13 +546,14 @@
         if (!isSystemProcess()) {
             return;
         }
-        // Read configuration of libs from apex module.
+        // Read configuration of features and libs from apex module.
+        int apexPermissionFlag = ALLOW_LIBS | ALLOW_FEATURES;
         // TODO: Use a solid way to filter apex module folders?
         for (File f: FileUtils.listFilesOrEmpty(Environment.getApexDirectory())) {
             if (f.isFile() || f.getPath().contains("@")) {
                 continue;
             }
-            readPermissions(Environment.buildPath(f, "etc", "permissions"), ALLOW_LIBS);
+            readPermissions(Environment.buildPath(f, "etc", "permissions"), apexPermissionFlag);
         }
     }
 
diff --git a/core/jni/android_os_ServiceManager.cpp b/core/jni/android_os_ServiceManager.cpp
index c747949..d642d0e 100644
--- a/core/jni/android_os_ServiceManager.cpp
+++ b/core/jni/android_os_ServiceManager.cpp
@@ -29,11 +29,8 @@
 
 // Native because we have a client-side wait in waitForService() and we do not
 // want an unnecessary second copy of it.
-static jobject android_os_ServiceManager_waitForService(
-        JNIEnv *env,
-        jclass /* clazzObj */,
-        jstring serviceNameObj) {
-
+static jobject android_os_ServiceManager_waitForServiceNative(JNIEnv* env, jclass /* clazzObj */,
+                                                              jstring serviceNameObj) {
     const jchar* serviceName = env->GetStringCritical(serviceNameObj, nullptr);
     if (!serviceName) {
         jniThrowNullPointerException(env, nullptr);
@@ -55,12 +52,9 @@
 // ----------------------------------------------------------------------------
 
 static const JNINativeMethod method_table[] = {
-     /* name, signature, funcPtr */
-    {
-        "waitForService",
-        "(Ljava/lang/String;)Landroid/os/IBinder;",
-        (void*)android_os_ServiceManager_waitForService
-    },
+        /* name, signature, funcPtr */
+        {"waitForServiceNative", "(Ljava/lang/String;)Landroid/os/IBinder;",
+         (void*)android_os_ServiceManager_waitForServiceNative},
 };
 
 int register_android_os_ServiceManager(JNIEnv* env) {
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index 6374305..ff9e27f 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -263,8 +263,12 @@
         sprintf(proc_path, "/proc/%d/cmdline", pid);
         fd = open(proc_path, O_RDONLY | O_CLOEXEC);
         if (fd >= 0) {
-            int rc = read(fd, cmdline, sizeof(cmdline)-1);
-            cmdline[rc] = 0;
+            ssize_t rc = read(fd, cmdline, sizeof(cmdline) - 1);
+            if (rc < 0) {
+                ALOGE("read /proc/%d/cmdline (%s)", pid, strerror(errno));
+            } else {
+                cmdline[rc] = 0;
+            }
             close(fd);
         }
 
diff --git a/core/jni/com_android_internal_content_om_OverlayConfig.cpp b/core/jni/com_android_internal_content_om_OverlayConfig.cpp
index 6aa7c10..b37269c 100644
--- a/core/jni/com_android_internal_content_om_OverlayConfig.cpp
+++ b/core/jni/com_android_internal_content_om_OverlayConfig.cpp
@@ -73,13 +73,13 @@
   }
 
   if (result->status != 0) {
-    LOG(ERROR) << "idmap2: " << result->stderr;
-    return nullptr;
+      LOG(ERROR) << "idmap2: " << result->stderr_str;
+      return nullptr;
   }
 
   // Return the paths of the idmaps created or updated during the idmap invocation.
   std::vector<std::string> idmap_paths;
-  std::istringstream input(result->stdout);
+  std::istringstream input(result->stdout_str);
   std::string path;
   while (std::getline(input, path)) {
     idmap_paths.push_back(path);
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
index 2be5c47..37d059a 100644
--- a/core/res/res/xml/sms_short_codes.xml
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -88,9 +88,12 @@
     <!-- Cyprus: 4-6 digits (not confirmed), known premium codes listed, plus EU -->
     <shortcode country="cy" pattern="\\d{4,6}" premium="7510" free="116\\d{3}" />
 
-    <!-- Czechia: 7-8 digits, starting with 9, plus EU:
-         http://www.o2.cz/osobni/en/services-by-alphabet/91670-premium_sms.html -->
-    <shortcode country="cz" premium="9\\d{6,7}" free="116\\d{3}" />
+    <!-- Czechia: Premium numbers start with 90, and are either 5 or 7 digits (5 digits is a
+         subscription request, you will be charged for the messages received, but it's necessary
+         to warn on the _request_ as that's the last chance to stop), plus EU:
+         https://www.t-mobile.cz/platebni-a-premium-sms
+         https://www.vodafone.cz/pece/vyuctovani-platby-kredit/platby-mobilem/cena-premium-sms/ -->
+    <shortcode country="cz" premium="90\\d{5}|90\\d{3}" free="116\\d{3}" />
 
     <!-- Germany: 4-5 digits plus 1232xxx (premium codes from http://www.vodafone.de/infofaxe/537.pdf and http://premiumdienste.eplus.de/pdf/kodex.pdf), plus EU. To keep the premium regex from being too large, it only includes payment processors that have been used by SMS malware, with the regular pattern matching the other premium short codes. -->
     <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}|81214|81215|47529|70296|83782|3011|73240|72438" />
diff --git a/core/tests/coretests/src/com/android/internal/util/OWNERS b/core/tests/coretests/src/com/android/internal/util/OWNERS
new file mode 100644
index 0000000..d832745
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/util/OWNERS
@@ -0,0 +1,2 @@
+per-file *Notification* = file:/services/core/java/com/android/server/notification/OWNERS
+per-file *ContrastColor* = file:/services/core/java/com/android/server/notification/OWNERS
\ No newline at end of file
diff --git a/keystore/java/android/security/GenerateRkpKey.java b/keystore/java/android/security/GenerateRkpKey.java
index 053bec74..2e54e63 100644
--- a/keystore/java/android/security/GenerateRkpKey.java
+++ b/keystore/java/android/security/GenerateRkpKey.java
@@ -25,6 +25,8 @@
 import android.util.Log;
 
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -88,7 +90,8 @@
         }
         intent.setComponent(comp);
         mCountDownLatch = new CountDownLatch(1);
-        if (!mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE)) {
+        Executor executor = Executors.newCachedThreadPool();
+        if (!mContext.bindService(intent, Context.BIND_AUTO_CREATE, executor, mConnection)) {
             throw new RemoteException("Failed to bind to GenerateRkpKeyService");
         }
         try {
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreKey.java b/keystore/java/android/security/keystore2/AndroidKeyStoreKey.java
index 5619585..b24a22d 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStoreKey.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStoreKey.java
@@ -102,11 +102,9 @@
         final int prime = 31;
         int result = 1;
 
-        result = prime * result + ((mDescriptor == null) ? 0 : mDescriptor.hashCode());
+        result = prime * result + getClass().hashCode();
         result = prime * result + (int) (mKeyId >>> 32);
         result = prime * result + (int) (mKeyId & 0xffffffff);
-        result = prime * result + ((mAuthorizations == null) ? 0 : mAuthorizations.hashCode());
-        result = prime * result + ((mAlgorithm == null) ? 0 : mAlgorithm.hashCode());
         return result;
     }
 
@@ -122,10 +120,6 @@
             return false;
         }
         AndroidKeyStoreKey other = (AndroidKeyStoreKey) obj;
-        if (mKeyId != other.mKeyId) {
-            return false;
-        }
-
-        return true;
+        return mKeyId == other.mKeyId;
     }
 }
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStorePublicKey.java b/keystore/java/android/security/keystore2/AndroidKeyStorePublicKey.java
index db3e567..4842984 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStorePublicKey.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStorePublicKey.java
@@ -23,6 +23,7 @@
 import android.system.keystore2.KeyMetadata;
 
 import java.security.PublicKey;
+import java.util.Objects;
 
 /**
  * {@link PublicKey} backed by Android Keystore.
@@ -75,9 +76,14 @@
         if (!super.equals(obj)) {
             return false;
         }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        return true;
+
+        /*
+         * getClass().equals(ojb.getClass()) is implied by the call to super.equals() above. This
+         * means we can cast obj to AndroidKeyStorePublicKey here.
+         */
+        final AndroidKeyStorePublicKey other = (AndroidKeyStorePublicKey) obj;
+
+        return Objects.equals(mCertificate, other.mCertificate) && Objects.equals(mCertificateChain,
+                other.mCertificateChain);
     }
 }
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
index f3cfcf1..67358c4 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
@@ -579,7 +579,7 @@
         //
         // Note: mNamespace == KeyProperties.NAMESPACE_APPLICATION implies that the target domain
         // is Domain.APP and Domain.SELINUX is the target domain otherwise.
-        if (alias != descriptor.alias
+        if (!alias.equals(descriptor.alias)
                 || descriptor.domain != targetDomain
                 || (descriptor.domain == Domain.SELINUX && descriptor.nspace != targetNamespace)) {
             throw new KeyStoreException("Can only replace keys with same alias: " + alias
diff --git a/libs/androidfw/LocaleDataTables.cpp b/libs/androidfw/LocaleDataTables.cpp
index 8a10599..2c3567a 100644
--- a/libs/androidfw/LocaleDataTables.cpp
+++ b/libs/androidfw/LocaleDataTables.cpp
@@ -1,37 +1,37 @@
 // Auto-generated by ./tools/localedata/extract_icu_data.py
 
 const char SCRIPT_CODES[][4] = {
-    /* 0  */ {'A', 'h', 'o', 'm'},
-    /* 1  */ {'A', 'r', 'a', 'b'},
-    /* 2  */ {'A', 'r', 'm', 'i'},
-    /* 3  */ {'A', 'r', 'm', 'n'},
-    /* 4  */ {'A', 'v', 's', 't'},
-    /* 5  */ {'B', 'a', 'm', 'u'},
-    /* 6  */ {'B', 'a', 's', 's'},
-    /* 7  */ {'B', 'e', 'n', 'g'},
-    /* 8  */ {'B', 'r', 'a', 'h'},
-    /* 9  */ {'C', 'a', 'k', 'm'},
-    /* 10 */ {'C', 'a', 'n', 's'},
-    /* 11 */ {'C', 'a', 'r', 'i'},
-    /* 12 */ {'C', 'h', 'a', 'm'},
-    /* 13 */ {'C', 'h', 'e', 'r'},
-    /* 14 */ {'C', 'h', 'r', 's'},
-    /* 15 */ {'C', 'o', 'p', 't'},
-    /* 16 */ {'C', 'p', 'r', 't'},
-    /* 17 */ {'C', 'y', 'r', 'l'},
-    /* 18 */ {'D', 'e', 'v', 'a'},
-    /* 19 */ {'E', 'g', 'y', 'p'},
-    /* 20 */ {'E', 't', 'h', 'i'},
-    /* 21 */ {'G', 'e', 'o', 'r'},
-    /* 22 */ {'G', 'o', 'n', 'g'},
-    /* 23 */ {'G', 'o', 'n', 'm'},
-    /* 24 */ {'G', 'o', 't', 'h'},
-    /* 25 */ {'G', 'r', 'e', 'k'},
-    /* 26 */ {'G', 'u', 'j', 'r'},
-    /* 27 */ {'G', 'u', 'r', 'u'},
-    /* 28 */ {'H', 'a', 'n', 's'},
-    /* 29 */ {'H', 'a', 'n', 't'},
-    /* 30 */ {'H', 'a', 't', 'r'},
+    /* 0  */ {'A', 'g', 'h', 'b'},
+    /* 1  */ {'A', 'h', 'o', 'm'},
+    /* 2  */ {'A', 'r', 'a', 'b'},
+    /* 3  */ {'A', 'r', 'm', 'i'},
+    /* 4  */ {'A', 'r', 'm', 'n'},
+    /* 5  */ {'A', 'v', 's', 't'},
+    /* 6  */ {'B', 'a', 'm', 'u'},
+    /* 7  */ {'B', 'a', 's', 's'},
+    /* 8  */ {'B', 'e', 'n', 'g'},
+    /* 9  */ {'B', 'r', 'a', 'h'},
+    /* 10 */ {'C', 'a', 'k', 'm'},
+    /* 11 */ {'C', 'a', 'n', 's'},
+    /* 12 */ {'C', 'a', 'r', 'i'},
+    /* 13 */ {'C', 'h', 'a', 'm'},
+    /* 14 */ {'C', 'h', 'e', 'r'},
+    /* 15 */ {'C', 'h', 'r', 's'},
+    /* 16 */ {'C', 'o', 'p', 't'},
+    /* 17 */ {'C', 'p', 'r', 't'},
+    /* 18 */ {'C', 'y', 'r', 'l'},
+    /* 19 */ {'D', 'e', 'v', 'a'},
+    /* 20 */ {'E', 'g', 'y', 'p'},
+    /* 21 */ {'E', 't', 'h', 'i'},
+    /* 22 */ {'G', 'e', 'o', 'r'},
+    /* 23 */ {'G', 'o', 'n', 'g'},
+    /* 24 */ {'G', 'o', 'n', 'm'},
+    /* 25 */ {'G', 'o', 't', 'h'},
+    /* 26 */ {'G', 'r', 'e', 'k'},
+    /* 27 */ {'G', 'u', 'j', 'r'},
+    /* 28 */ {'G', 'u', 'r', 'u'},
+    /* 29 */ {'H', 'a', 'n', 's'},
+    /* 30 */ {'H', 'a', 'n', 't'},
     /* 31 */ {'H', 'e', 'b', 'r'},
     /* 32 */ {'H', 'l', 'u', 'w'},
     /* 33 */ {'H', 'm', 'n', 'g'},
@@ -55,52 +55,53 @@
     /* 51 */ {'L', 'y', 'd', 'i'},
     /* 52 */ {'M', 'a', 'n', 'd'},
     /* 53 */ {'M', 'a', 'n', 'i'},
-    /* 54 */ {'M', 'e', 'r', 'c'},
-    /* 55 */ {'M', 'l', 'y', 'm'},
-    /* 56 */ {'M', 'o', 'n', 'g'},
-    /* 57 */ {'M', 'r', 'o', 'o'},
-    /* 58 */ {'M', 'y', 'm', 'r'},
-    /* 59 */ {'N', 'a', 'r', 'b'},
-    /* 60 */ {'N', 'k', 'o', 'o'},
-    /* 61 */ {'N', 's', 'h', 'u'},
-    /* 62 */ {'O', 'g', 'a', 'm'},
-    /* 63 */ {'O', 'l', 'c', 'k'},
-    /* 64 */ {'O', 'r', 'k', 'h'},
-    /* 65 */ {'O', 'r', 'y', 'a'},
-    /* 66 */ {'O', 's', 'g', 'e'},
-    /* 67 */ {'P', 'a', 'u', 'c'},
-    /* 68 */ {'P', 'h', 'l', 'i'},
-    /* 69 */ {'P', 'h', 'n', 'x'},
-    /* 70 */ {'P', 'l', 'r', 'd'},
-    /* 71 */ {'P', 'r', 't', 'i'},
-    /* 72 */ {'R', 'u', 'n', 'r'},
-    /* 73 */ {'S', 'a', 'm', 'r'},
-    /* 74 */ {'S', 'a', 'r', 'b'},
-    /* 75 */ {'S', 'a', 'u', 'r'},
-    /* 76 */ {'S', 'g', 'n', 'w'},
-    /* 77 */ {'S', 'i', 'n', 'h'},
-    /* 78 */ {'S', 'o', 'g', 'd'},
-    /* 79 */ {'S', 'o', 'r', 'a'},
-    /* 80 */ {'S', 'o', 'y', 'o'},
-    /* 81 */ {'S', 'y', 'r', 'c'},
-    /* 82 */ {'T', 'a', 'l', 'e'},
-    /* 83 */ {'T', 'a', 'l', 'u'},
-    /* 84 */ {'T', 'a', 'm', 'l'},
-    /* 85 */ {'T', 'a', 'n', 'g'},
-    /* 86 */ {'T', 'a', 'v', 't'},
-    /* 87 */ {'T', 'e', 'l', 'u'},
-    /* 88 */ {'T', 'f', 'n', 'g'},
-    /* 89 */ {'T', 'h', 'a', 'a'},
-    /* 90 */ {'T', 'h', 'a', 'i'},
-    /* 91 */ {'T', 'i', 'b', 't'},
-    /* 92 */ {'U', 'g', 'a', 'r'},
-    /* 93 */ {'V', 'a', 'i', 'i'},
-    /* 94 */ {'W', 'c', 'h', 'o'},
-    /* 95 */ {'X', 'p', 'e', 'o'},
-    /* 96 */ {'X', 's', 'u', 'x'},
-    /* 97 */ {'Y', 'i', 'i', 'i'},
-    /* 98 */ {'~', '~', '~', 'A'},
-    /* 99 */ {'~', '~', '~', 'B'},
+    /* 54 */ {'M', 'e', 'd', 'f'},
+    /* 55 */ {'M', 'e', 'r', 'c'},
+    /* 56 */ {'M', 'l', 'y', 'm'},
+    /* 57 */ {'M', 'o', 'n', 'g'},
+    /* 58 */ {'M', 'r', 'o', 'o'},
+    /* 59 */ {'M', 'y', 'm', 'r'},
+    /* 60 */ {'N', 'a', 'r', 'b'},
+    /* 61 */ {'N', 'k', 'o', 'o'},
+    /* 62 */ {'N', 's', 'h', 'u'},
+    /* 63 */ {'O', 'g', 'a', 'm'},
+    /* 64 */ {'O', 'l', 'c', 'k'},
+    /* 65 */ {'O', 'r', 'k', 'h'},
+    /* 66 */ {'O', 'r', 'y', 'a'},
+    /* 67 */ {'O', 's', 'g', 'e'},
+    /* 68 */ {'P', 'a', 'u', 'c'},
+    /* 69 */ {'P', 'h', 'l', 'i'},
+    /* 70 */ {'P', 'h', 'n', 'x'},
+    /* 71 */ {'P', 'l', 'r', 'd'},
+    /* 72 */ {'P', 'r', 't', 'i'},
+    /* 73 */ {'R', 'u', 'n', 'r'},
+    /* 74 */ {'S', 'a', 'm', 'r'},
+    /* 75 */ {'S', 'a', 'r', 'b'},
+    /* 76 */ {'S', 'a', 'u', 'r'},
+    /* 77 */ {'S', 'g', 'n', 'w'},
+    /* 78 */ {'S', 'i', 'n', 'h'},
+    /* 79 */ {'S', 'o', 'g', 'd'},
+    /* 80 */ {'S', 'o', 'r', 'a'},
+    /* 81 */ {'S', 'o', 'y', 'o'},
+    /* 82 */ {'S', 'y', 'r', 'c'},
+    /* 83 */ {'T', 'a', 'l', 'e'},
+    /* 84 */ {'T', 'a', 'l', 'u'},
+    /* 85 */ {'T', 'a', 'm', 'l'},
+    /* 86 */ {'T', 'a', 'n', 'g'},
+    /* 87 */ {'T', 'a', 'v', 't'},
+    /* 88 */ {'T', 'e', 'l', 'u'},
+    /* 89 */ {'T', 'f', 'n', 'g'},
+    /* 90 */ {'T', 'h', 'a', 'a'},
+    /* 91 */ {'T', 'h', 'a', 'i'},
+    /* 92 */ {'T', 'i', 'b', 't'},
+    /* 93 */ {'U', 'g', 'a', 'r'},
+    /* 94 */ {'V', 'a', 'i', 'i'},
+    /* 95 */ {'W', 'c', 'h', 'o'},
+    /* 96 */ {'X', 'p', 'e', 'o'},
+    /* 97 */ {'X', 's', 'u', 'x'},
+    /* 98 */ {'Y', 'i', 'i', 'i'},
+    /* 99 */ {'~', '~', '~', 'A'},
+    /* 100 */ {'~', '~', '~', 'B'},
 };
 
 
@@ -109,9 +110,9 @@
     {0xA0000000u, 46u}, // aai -> Latn
     {0xA8000000u, 46u}, // aak -> Latn
     {0xD0000000u, 46u}, // aau -> Latn
-    {0x61620000u, 17u}, // ab -> Cyrl
+    {0x61620000u, 18u}, // ab -> Cyrl
     {0xA0200000u, 46u}, // abi -> Latn
-    {0xC0200000u, 17u}, // abq -> Cyrl
+    {0xC0200000u, 18u}, // abq -> Cyrl
     {0xC4200000u, 46u}, // abr -> Latn
     {0xCC200000u, 46u}, // abt -> Latn
     {0xE0200000u, 46u}, // aby -> Latn
@@ -121,11 +122,11 @@
     {0x80600000u, 46u}, // ada -> Latn
     {0x90600000u, 46u}, // ade -> Latn
     {0xA4600000u, 46u}, // adj -> Latn
-    {0xBC600000u, 91u}, // adp -> Tibt
-    {0xE0600000u, 17u}, // ady -> Cyrl
+    {0xBC600000u, 92u}, // adp -> Tibt
+    {0xE0600000u, 18u}, // ady -> Cyrl
     {0xE4600000u, 46u}, // adz -> Latn
-    {0x61650000u,  4u}, // ae -> Avst
-    {0x84800000u,  1u}, // aeb -> Arab
+    {0x61650000u,  5u}, // ae -> Avst
+    {0x84800000u,  2u}, // aeb -> Arab
     {0xE0800000u, 46u}, // aey -> Latn
     {0x61660000u, 46u}, // af -> Latn
     {0x88C00000u, 46u}, // agc -> Latn
@@ -136,15 +137,15 @@
     {0xC0C00000u, 46u}, // agq -> Latn
     {0x80E00000u, 46u}, // aha -> Latn
     {0xACE00000u, 46u}, // ahl -> Latn
-    {0xB8E00000u,  0u}, // aho -> Ahom
+    {0xB8E00000u,  1u}, // aho -> Ahom
     {0x99200000u, 46u}, // ajg -> Latn
     {0x616B0000u, 46u}, // ak -> Latn
-    {0xA9400000u, 96u}, // akk -> Xsux
+    {0xA9400000u, 97u}, // akk -> Xsux
     {0x81600000u, 46u}, // ala -> Latn
     {0xA1600000u, 46u}, // ali -> Latn
     {0xB5600000u, 46u}, // aln -> Latn
-    {0xCD600000u, 17u}, // alt -> Cyrl
-    {0x616D0000u, 20u}, // am -> Ethi
+    {0xCD600000u, 18u}, // alt -> Cyrl
+    {0x616D0000u, 21u}, // am -> Ethi
     {0xB1800000u, 46u}, // amm -> Latn
     {0xB5800000u, 46u}, // amn -> Latn
     {0xB9800000u, 46u}, // amo -> Latn
@@ -157,25 +158,25 @@
     {0xA5C00000u, 46u}, // aoj -> Latn
     {0xB1C00000u, 46u}, // aom -> Latn
     {0xE5C00000u, 46u}, // aoz -> Latn
-    {0x89E00000u,  1u}, // apc -> Arab
-    {0x8DE00000u,  1u}, // apd -> Arab
+    {0x89E00000u,  2u}, // apc -> Arab
+    {0x8DE00000u,  2u}, // apd -> Arab
     {0x91E00000u, 46u}, // ape -> Latn
     {0xC5E00000u, 46u}, // apr -> Latn
     {0xC9E00000u, 46u}, // aps -> Latn
     {0xE5E00000u, 46u}, // apz -> Latn
-    {0x61720000u,  1u}, // ar -> Arab
-    {0x61725842u, 99u}, // ar-XB -> ~~~B
-    {0x8A200000u,  2u}, // arc -> Armi
+    {0x61720000u,  2u}, // ar -> Arab
+    {0x61725842u, 100u}, // ar-XB -> ~~~B
+    {0x8A200000u,  3u}, // arc -> Armi
     {0x9E200000u, 46u}, // arh -> Latn
     {0xB6200000u, 46u}, // arn -> Latn
     {0xBA200000u, 46u}, // aro -> Latn
-    {0xC2200000u,  1u}, // arq -> Arab
-    {0xCA200000u,  1u}, // ars -> Arab
-    {0xE2200000u,  1u}, // ary -> Arab
-    {0xE6200000u,  1u}, // arz -> Arab
-    {0x61730000u,  7u}, // as -> Beng
+    {0xC2200000u,  2u}, // arq -> Arab
+    {0xCA200000u,  2u}, // ars -> Arab
+    {0xE2200000u,  2u}, // ary -> Arab
+    {0xE6200000u,  2u}, // arz -> Arab
+    {0x61730000u,  8u}, // as -> Beng
     {0x82400000u, 46u}, // asa -> Latn
-    {0x92400000u, 76u}, // ase -> Sgnw
+    {0x92400000u, 77u}, // ase -> Sgnw
     {0x9A400000u, 46u}, // asg -> Latn
     {0xBA400000u, 46u}, // aso -> Latn
     {0xCE400000u, 46u}, // ast -> Latn
@@ -183,29 +184,29 @@
     {0x9A600000u, 46u}, // atg -> Latn
     {0xA6600000u, 46u}, // atj -> Latn
     {0xE2800000u, 46u}, // auy -> Latn
-    {0x61760000u, 17u}, // av -> Cyrl
-    {0xAEA00000u,  1u}, // avl -> Arab
+    {0x61760000u, 18u}, // av -> Cyrl
+    {0xAEA00000u,  2u}, // avl -> Arab
     {0xB6A00000u, 46u}, // avn -> Latn
     {0xCEA00000u, 46u}, // avt -> Latn
     {0xD2A00000u, 46u}, // avu -> Latn
-    {0x82C00000u, 18u}, // awa -> Deva
+    {0x82C00000u, 19u}, // awa -> Deva
     {0x86C00000u, 46u}, // awb -> Latn
     {0xBAC00000u, 46u}, // awo -> Latn
     {0xDEC00000u, 46u}, // awx -> Latn
     {0x61790000u, 46u}, // ay -> Latn
     {0x87000000u, 46u}, // ayb -> Latn
     {0x617A0000u, 46u}, // az -> Latn
-    {0x617A4951u,  1u}, // az-IQ -> Arab
-    {0x617A4952u,  1u}, // az-IR -> Arab
-    {0x617A5255u, 17u}, // az-RU -> Cyrl
-    {0x62610000u, 17u}, // ba -> Cyrl
-    {0xAC010000u,  1u}, // bal -> Arab
+    {0x617A4951u,  2u}, // az-IQ -> Arab
+    {0x617A4952u,  2u}, // az-IR -> Arab
+    {0x617A5255u, 18u}, // az-RU -> Cyrl
+    {0x62610000u, 18u}, // ba -> Cyrl
+    {0xAC010000u,  2u}, // bal -> Arab
     {0xB4010000u, 46u}, // ban -> Latn
-    {0xBC010000u, 18u}, // bap -> Deva
+    {0xBC010000u, 19u}, // bap -> Deva
     {0xC4010000u, 46u}, // bar -> Latn
     {0xC8010000u, 46u}, // bas -> Latn
     {0xD4010000u, 46u}, // bav -> Latn
-    {0xDC010000u,  5u}, // bax -> Bamu
+    {0xDC010000u,  6u}, // bax -> Bamu
     {0x80210000u, 46u}, // bba -> Latn
     {0x84210000u, 46u}, // bbb -> Latn
     {0x88210000u, 46u}, // bbc -> Latn
@@ -219,31 +220,31 @@
     {0xB0410000u, 46u}, // bcm -> Latn
     {0xB4410000u, 46u}, // bcn -> Latn
     {0xB8410000u, 46u}, // bco -> Latn
-    {0xC0410000u, 20u}, // bcq -> Ethi
+    {0xC0410000u, 21u}, // bcq -> Ethi
     {0xD0410000u, 46u}, // bcu -> Latn
     {0x8C610000u, 46u}, // bdd -> Latn
-    {0x62650000u, 17u}, // be -> Cyrl
+    {0x62650000u, 18u}, // be -> Cyrl
     {0x94810000u, 46u}, // bef -> Latn
     {0x9C810000u, 46u}, // beh -> Latn
-    {0xA4810000u,  1u}, // bej -> Arab
+    {0xA4810000u,  2u}, // bej -> Arab
     {0xB0810000u, 46u}, // bem -> Latn
     {0xCC810000u, 46u}, // bet -> Latn
     {0xD8810000u, 46u}, // bew -> Latn
     {0xDC810000u, 46u}, // bex -> Latn
     {0xE4810000u, 46u}, // bez -> Latn
     {0x8CA10000u, 46u}, // bfd -> Latn
-    {0xC0A10000u, 84u}, // bfq -> Taml
-    {0xCCA10000u,  1u}, // bft -> Arab
-    {0xE0A10000u, 18u}, // bfy -> Deva
-    {0x62670000u, 17u}, // bg -> Cyrl
-    {0x88C10000u, 18u}, // bgc -> Deva
-    {0xB4C10000u,  1u}, // bgn -> Arab
-    {0xDCC10000u, 25u}, // bgx -> Grek
-    {0x84E10000u, 18u}, // bhb -> Deva
+    {0xC0A10000u, 85u}, // bfq -> Taml
+    {0xCCA10000u,  2u}, // bft -> Arab
+    {0xE0A10000u, 19u}, // bfy -> Deva
+    {0x62670000u, 18u}, // bg -> Cyrl
+    {0x88C10000u, 19u}, // bgc -> Deva
+    {0xB4C10000u,  2u}, // bgn -> Arab
+    {0xDCC10000u, 26u}, // bgx -> Grek
+    {0x84E10000u, 19u}, // bhb -> Deva
     {0x98E10000u, 46u}, // bhg -> Latn
-    {0xA0E10000u, 18u}, // bhi -> Deva
+    {0xA0E10000u, 19u}, // bhi -> Deva
     {0xACE10000u, 46u}, // bhl -> Latn
-    {0xB8E10000u, 18u}, // bho -> Deva
+    {0xB8E10000u, 19u}, // bho -> Deva
     {0xE0E10000u, 46u}, // bhy -> Latn
     {0x62690000u, 46u}, // bi -> Latn
     {0x85010000u, 46u}, // bib -> Latn
@@ -254,8 +255,8 @@
     {0xB9010000u, 46u}, // bio -> Latn
     {0xC1010000u, 46u}, // biq -> Latn
     {0x9D210000u, 46u}, // bjh -> Latn
-    {0xA1210000u, 20u}, // bji -> Ethi
-    {0xA5210000u, 18u}, // bjj -> Deva
+    {0xA1210000u, 21u}, // bji -> Ethi
+    {0xA5210000u, 19u}, // bjj -> Deva
     {0xB5210000u, 46u}, // bjn -> Latn
     {0xB9210000u, 46u}, // bjo -> Latn
     {0xC5210000u, 46u}, // bjr -> Latn
@@ -266,39 +267,39 @@
     {0xC1410000u, 46u}, // bkq -> Latn
     {0xD1410000u, 46u}, // bku -> Latn
     {0xD5410000u, 46u}, // bkv -> Latn
-    {0xCD610000u, 86u}, // blt -> Tavt
+    {0xCD610000u, 87u}, // blt -> Tavt
     {0x626D0000u, 46u}, // bm -> Latn
     {0x9D810000u, 46u}, // bmh -> Latn
     {0xA9810000u, 46u}, // bmk -> Latn
     {0xC1810000u, 46u}, // bmq -> Latn
     {0xD1810000u, 46u}, // bmu -> Latn
-    {0x626E0000u,  7u}, // bn -> Beng
+    {0x626E0000u,  8u}, // bn -> Beng
     {0x99A10000u, 46u}, // bng -> Latn
     {0xB1A10000u, 46u}, // bnm -> Latn
     {0xBDA10000u, 46u}, // bnp -> Latn
-    {0x626F0000u, 91u}, // bo -> Tibt
+    {0x626F0000u, 92u}, // bo -> Tibt
     {0xA5C10000u, 46u}, // boj -> Latn
     {0xB1C10000u, 46u}, // bom -> Latn
     {0xB5C10000u, 46u}, // bon -> Latn
-    {0xE1E10000u,  7u}, // bpy -> Beng
+    {0xE1E10000u,  8u}, // bpy -> Beng
     {0x8A010000u, 46u}, // bqc -> Latn
-    {0xA2010000u,  1u}, // bqi -> Arab
+    {0xA2010000u,  2u}, // bqi -> Arab
     {0xBE010000u, 46u}, // bqp -> Latn
     {0xD6010000u, 46u}, // bqv -> Latn
     {0x62720000u, 46u}, // br -> Latn
-    {0x82210000u, 18u}, // bra -> Deva
-    {0x9E210000u,  1u}, // brh -> Arab
-    {0xDE210000u, 18u}, // brx -> Deva
+    {0x82210000u, 19u}, // bra -> Deva
+    {0x9E210000u,  2u}, // brh -> Arab
+    {0xDE210000u, 19u}, // brx -> Deva
     {0xE6210000u, 46u}, // brz -> Latn
     {0x62730000u, 46u}, // bs -> Latn
     {0xA6410000u, 46u}, // bsj -> Latn
-    {0xC2410000u,  6u}, // bsq -> Bass
+    {0xC2410000u,  7u}, // bsq -> Bass
     {0xCA410000u, 46u}, // bss -> Latn
-    {0xCE410000u, 20u}, // bst -> Ethi
+    {0xCE410000u, 21u}, // bst -> Ethi
     {0xBA610000u, 46u}, // bto -> Latn
     {0xCE610000u, 46u}, // btt -> Latn
-    {0xD6610000u, 18u}, // btv -> Deva
-    {0x82810000u, 17u}, // bua -> Cyrl
+    {0xD6610000u, 19u}, // btv -> Deva
+    {0x82810000u, 18u}, // bua -> Cyrl
     {0x8A810000u, 46u}, // buc -> Latn
     {0x8E810000u, 46u}, // bud -> Latn
     {0x9A810000u, 46u}, // bug -> Latn
@@ -312,7 +313,7 @@
     {0xC6C10000u, 46u}, // bwr -> Latn
     {0x9EE10000u, 46u}, // bxh -> Latn
     {0x93010000u, 46u}, // bye -> Latn
-    {0xB7010000u, 20u}, // byn -> Ethi
+    {0xB7010000u, 21u}, // byn -> Ethi
     {0xC7010000u, 46u}, // byr -> Latn
     {0xCB010000u, 46u}, // bys -> Latn
     {0xD7010000u, 46u}, // byv -> Latn
@@ -327,44 +328,44 @@
     {0xB4020000u, 46u}, // can -> Latn
     {0xA4220000u, 46u}, // cbj -> Latn
     {0x9C420000u, 46u}, // cch -> Latn
-    {0xBC420000u,  9u}, // ccp -> Cakm
-    {0x63650000u, 17u}, // ce -> Cyrl
+    {0xBC420000u, 10u}, // ccp -> Cakm
+    {0x63650000u, 18u}, // ce -> Cyrl
     {0x84820000u, 46u}, // ceb -> Latn
     {0x80A20000u, 46u}, // cfa -> Latn
     {0x98C20000u, 46u}, // cgg -> Latn
     {0x63680000u, 46u}, // ch -> Latn
     {0xA8E20000u, 46u}, // chk -> Latn
-    {0xB0E20000u, 17u}, // chm -> Cyrl
+    {0xB0E20000u, 18u}, // chm -> Cyrl
     {0xB8E20000u, 46u}, // cho -> Latn
     {0xBCE20000u, 46u}, // chp -> Latn
-    {0xC4E20000u, 13u}, // chr -> Cher
+    {0xC4E20000u, 14u}, // chr -> Cher
     {0x89020000u, 46u}, // cic -> Latn
-    {0x81220000u,  1u}, // cja -> Arab
-    {0xB1220000u, 12u}, // cjm -> Cham
+    {0x81220000u,  2u}, // cja -> Arab
+    {0xB1220000u, 13u}, // cjm -> Cham
     {0xD5220000u, 46u}, // cjv -> Latn
-    {0x85420000u,  1u}, // ckb -> Arab
+    {0x85420000u,  2u}, // ckb -> Arab
     {0xAD420000u, 46u}, // ckl -> Latn
     {0xB9420000u, 46u}, // cko -> Latn
     {0xE1420000u, 46u}, // cky -> Latn
     {0x81620000u, 46u}, // cla -> Latn
     {0x91820000u, 46u}, // cme -> Latn
-    {0x99820000u, 80u}, // cmg -> Soyo
+    {0x99820000u, 81u}, // cmg -> Soyo
     {0x636F0000u, 46u}, // co -> Latn
-    {0xBDC20000u, 15u}, // cop -> Copt
+    {0xBDC20000u, 16u}, // cop -> Copt
     {0xC9E20000u, 46u}, // cps -> Latn
-    {0x63720000u, 10u}, // cr -> Cans
-    {0x9E220000u, 17u}, // crh -> Cyrl
-    {0xA6220000u, 10u}, // crj -> Cans
-    {0xAA220000u, 10u}, // crk -> Cans
-    {0xAE220000u, 10u}, // crl -> Cans
-    {0xB2220000u, 10u}, // crm -> Cans
+    {0x63720000u, 11u}, // cr -> Cans
+    {0x9E220000u, 18u}, // crh -> Cyrl
+    {0xA6220000u, 11u}, // crj -> Cans
+    {0xAA220000u, 11u}, // crk -> Cans
+    {0xAE220000u, 11u}, // crl -> Cans
+    {0xB2220000u, 11u}, // crm -> Cans
     {0xCA220000u, 46u}, // crs -> Latn
     {0x63730000u, 46u}, // cs -> Latn
     {0x86420000u, 46u}, // csb -> Latn
-    {0xDA420000u, 10u}, // csw -> Cans
-    {0x8E620000u, 67u}, // ctd -> Pauc
-    {0x63750000u, 17u}, // cu -> Cyrl
-    {0x63760000u, 17u}, // cv -> Cyrl
+    {0xDA420000u, 11u}, // csw -> Cans
+    {0x8E620000u, 68u}, // ctd -> Pauc
+    {0x63750000u, 18u}, // cu -> Cyrl
+    {0x63760000u, 18u}, // cv -> Cyrl
     {0x63790000u, 46u}, // cy -> Latn
     {0x64610000u, 46u}, // da -> Latn
     {0x8C030000u, 46u}, // dad -> Latn
@@ -372,11 +373,11 @@
     {0x98030000u, 46u}, // dag -> Latn
     {0x9C030000u, 46u}, // dah -> Latn
     {0xA8030000u, 46u}, // dak -> Latn
-    {0xC4030000u, 17u}, // dar -> Cyrl
+    {0xC4030000u, 18u}, // dar -> Cyrl
     {0xD4030000u, 46u}, // dav -> Latn
     {0x8C230000u, 46u}, // dbd -> Latn
     {0xC0230000u, 46u}, // dbq -> Latn
-    {0x88430000u,  1u}, // dcc -> Arab
+    {0x88430000u,  2u}, // dcc -> Arab
     {0xB4630000u, 46u}, // ddn -> Latn
     {0x64650000u, 46u}, // de -> Latn
     {0x8C830000u, 46u}, // ded -> Latn
@@ -384,53 +385,54 @@
     {0x80C30000u, 46u}, // dga -> Latn
     {0x9CC30000u, 46u}, // dgh -> Latn
     {0xA0C30000u, 46u}, // dgi -> Latn
-    {0xACC30000u,  1u}, // dgl -> Arab
+    {0xACC30000u,  2u}, // dgl -> Arab
     {0xC4C30000u, 46u}, // dgr -> Latn
     {0xE4C30000u, 46u}, // dgz -> Latn
     {0x81030000u, 46u}, // dia -> Latn
     {0x91230000u, 46u}, // dje -> Latn
+    {0x95830000u, 54u}, // dmf -> Medf
     {0xA5A30000u, 46u}, // dnj -> Latn
     {0x85C30000u, 46u}, // dob -> Latn
-    {0xA1C30000u, 18u}, // doi -> Deva
+    {0xA1C30000u, 19u}, // doi -> Deva
     {0xBDC30000u, 46u}, // dop -> Latn
     {0xD9C30000u, 46u}, // dow -> Latn
-    {0x9E230000u, 56u}, // drh -> Mong
+    {0x9E230000u, 57u}, // drh -> Mong
     {0xA2230000u, 46u}, // dri -> Latn
-    {0xCA230000u, 20u}, // drs -> Ethi
+    {0xCA230000u, 21u}, // drs -> Ethi
     {0x86430000u, 46u}, // dsb -> Latn
     {0xB2630000u, 46u}, // dtm -> Latn
     {0xBE630000u, 46u}, // dtp -> Latn
     {0xCA630000u, 46u}, // dts -> Latn
-    {0xE2630000u, 18u}, // dty -> Deva
+    {0xE2630000u, 19u}, // dty -> Deva
     {0x82830000u, 46u}, // dua -> Latn
     {0x8A830000u, 46u}, // duc -> Latn
     {0x8E830000u, 46u}, // dud -> Latn
     {0x9A830000u, 46u}, // dug -> Latn
-    {0x64760000u, 89u}, // dv -> Thaa
+    {0x64760000u, 90u}, // dv -> Thaa
     {0x82A30000u, 46u}, // dva -> Latn
     {0xDAC30000u, 46u}, // dww -> Latn
     {0xBB030000u, 46u}, // dyo -> Latn
     {0xD3030000u, 46u}, // dyu -> Latn
-    {0x647A0000u, 91u}, // dz -> Tibt
+    {0x647A0000u, 92u}, // dz -> Tibt
     {0x9B230000u, 46u}, // dzg -> Latn
     {0xD0240000u, 46u}, // ebu -> Latn
     {0x65650000u, 46u}, // ee -> Latn
     {0xA0A40000u, 46u}, // efi -> Latn
     {0xACC40000u, 46u}, // egl -> Latn
-    {0xE0C40000u, 19u}, // egy -> Egyp
+    {0xE0C40000u, 20u}, // egy -> Egyp
     {0x81440000u, 46u}, // eka -> Latn
     {0xE1440000u, 37u}, // eky -> Kali
-    {0x656C0000u, 25u}, // el -> Grek
+    {0x656C0000u, 26u}, // el -> Grek
     {0x81840000u, 46u}, // ema -> Latn
     {0xA1840000u, 46u}, // emi -> Latn
     {0x656E0000u, 46u}, // en -> Latn
-    {0x656E5841u, 98u}, // en-XA -> ~~~A
+    {0x656E5841u, 99u}, // en-XA -> ~~~A
     {0xB5A40000u, 46u}, // enn -> Latn
     {0xC1A40000u, 46u}, // enq -> Latn
     {0x656F0000u, 46u}, // eo -> Latn
     {0xA2240000u, 46u}, // eri -> Latn
     {0x65730000u, 46u}, // es -> Latn
-    {0x9A440000u, 23u}, // esg -> Gonm
+    {0x9A440000u, 24u}, // esg -> Gonm
     {0xD2440000u, 46u}, // esu -> Latn
     {0x65740000u, 46u}, // et -> Latn
     {0xC6640000u, 46u}, // etr -> Latn
@@ -441,7 +443,7 @@
     {0xBAC40000u, 46u}, // ewo -> Latn
     {0xCEE40000u, 46u}, // ext -> Latn
     {0x83240000u, 46u}, // eza -> Latn
-    {0x66610000u,  1u}, // fa -> Arab
+    {0x66610000u,  2u}, // fa -> Arab
     {0x80050000u, 46u}, // faa -> Latn
     {0x84050000u, 46u}, // fab -> Latn
     {0x98050000u, 46u}, // fag -> Latn
@@ -451,7 +453,7 @@
     {0xA0A50000u, 46u}, // ffi -> Latn
     {0xB0A50000u, 46u}, // ffm -> Latn
     {0x66690000u, 46u}, // fi -> Latn
-    {0x81050000u,  1u}, // fia -> Arab
+    {0x81050000u,  2u}, // fia -> Arab
     {0xAD050000u, 46u}, // fil -> Latn
     {0xCD050000u, 46u}, // fit -> Latn
     {0x666A0000u, 46u}, // fj -> Latn
@@ -468,7 +470,7 @@
     {0xBE250000u, 46u}, // frp -> Latn
     {0xC6250000u, 46u}, // frr -> Latn
     {0xCA250000u, 46u}, // frs -> Latn
-    {0x86850000u,  1u}, // fub -> Arab
+    {0x86850000u,  2u}, // fub -> Arab
     {0x8E850000u, 46u}, // fud -> Latn
     {0x92850000u, 46u}, // fue -> Latn
     {0x96850000u, 46u}, // fuf -> Latn
@@ -486,14 +488,14 @@
     {0x9C060000u, 46u}, // gah -> Latn
     {0xA4060000u, 46u}, // gaj -> Latn
     {0xB0060000u, 46u}, // gam -> Latn
-    {0xB4060000u, 28u}, // gan -> Hans
+    {0xB4060000u, 29u}, // gan -> Hans
     {0xD8060000u, 46u}, // gaw -> Latn
     {0xE0060000u, 46u}, // gay -> Latn
     {0x80260000u, 46u}, // gba -> Latn
     {0x94260000u, 46u}, // gbf -> Latn
-    {0xB0260000u, 18u}, // gbm -> Deva
+    {0xB0260000u, 19u}, // gbm -> Deva
     {0xE0260000u, 46u}, // gby -> Latn
-    {0xE4260000u,  1u}, // gbz -> Arab
+    {0xE4260000u,  2u}, // gbz -> Arab
     {0xC4460000u, 46u}, // gcr -> Latn
     {0x67640000u, 46u}, // gd -> Latn
     {0x90660000u, 46u}, // gde -> Latn
@@ -502,38 +504,38 @@
     {0x84860000u, 46u}, // geb -> Latn
     {0xA4860000u, 46u}, // gej -> Latn
     {0xAC860000u, 46u}, // gel -> Latn
-    {0xE4860000u, 20u}, // gez -> Ethi
+    {0xE4860000u, 21u}, // gez -> Ethi
     {0xA8A60000u, 46u}, // gfk -> Latn
-    {0xB4C60000u, 18u}, // ggn -> Deva
+    {0xB4C60000u, 19u}, // ggn -> Deva
     {0xC8E60000u, 46u}, // ghs -> Latn
     {0xAD060000u, 46u}, // gil -> Latn
     {0xB1060000u, 46u}, // gim -> Latn
-    {0xA9260000u,  1u}, // gjk -> Arab
+    {0xA9260000u,  2u}, // gjk -> Arab
     {0xB5260000u, 46u}, // gjn -> Latn
-    {0xD1260000u,  1u}, // gju -> Arab
+    {0xD1260000u,  2u}, // gju -> Arab
     {0xB5460000u, 46u}, // gkn -> Latn
     {0xBD460000u, 46u}, // gkp -> Latn
     {0x676C0000u, 46u}, // gl -> Latn
-    {0xA9660000u,  1u}, // glk -> Arab
+    {0xA9660000u,  2u}, // glk -> Arab
     {0xB1860000u, 46u}, // gmm -> Latn
-    {0xD5860000u, 20u}, // gmv -> Ethi
+    {0xD5860000u, 21u}, // gmv -> Ethi
     {0x676E0000u, 46u}, // gn -> Latn
     {0x8DA60000u, 46u}, // gnd -> Latn
     {0x99A60000u, 46u}, // gng -> Latn
     {0x8DC60000u, 46u}, // god -> Latn
-    {0x95C60000u, 20u}, // gof -> Ethi
+    {0x95C60000u, 21u}, // gof -> Ethi
     {0xA1C60000u, 46u}, // goi -> Latn
-    {0xB1C60000u, 18u}, // gom -> Deva
-    {0xB5C60000u, 87u}, // gon -> Telu
+    {0xB1C60000u, 19u}, // gom -> Deva
+    {0xB5C60000u, 88u}, // gon -> Telu
     {0xC5C60000u, 46u}, // gor -> Latn
     {0xC9C60000u, 46u}, // gos -> Latn
-    {0xCDC60000u, 24u}, // got -> Goth
+    {0xCDC60000u, 25u}, // got -> Goth
     {0x86260000u, 46u}, // grb -> Latn
-    {0x8A260000u, 16u}, // grc -> Cprt
-    {0xCE260000u,  7u}, // grt -> Beng
+    {0x8A260000u, 17u}, // grc -> Cprt
+    {0xCE260000u,  8u}, // grt -> Beng
     {0xDA260000u, 46u}, // grw -> Latn
     {0xDA460000u, 46u}, // gsw -> Latn
-    {0x67750000u, 26u}, // gu -> Gujr
+    {0x67750000u, 27u}, // gu -> Gujr
     {0x86860000u, 46u}, // gub -> Latn
     {0x8A860000u, 46u}, // guc -> Latn
     {0x8E860000u, 46u}, // gud -> Latn
@@ -543,25 +545,25 @@
     {0xE6860000u, 46u}, // guz -> Latn
     {0x67760000u, 46u}, // gv -> Latn
     {0x96A60000u, 46u}, // gvf -> Latn
-    {0xC6A60000u, 18u}, // gvr -> Deva
+    {0xC6A60000u, 19u}, // gvr -> Deva
     {0xCAA60000u, 46u}, // gvs -> Latn
-    {0x8AC60000u,  1u}, // gwc -> Arab
+    {0x8AC60000u,  2u}, // gwc -> Arab
     {0xA2C60000u, 46u}, // gwi -> Latn
-    {0xCEC60000u,  1u}, // gwt -> Arab
+    {0xCEC60000u,  2u}, // gwt -> Arab
     {0xA3060000u, 46u}, // gyi -> Latn
     {0x68610000u, 46u}, // ha -> Latn
-    {0x6861434Du,  1u}, // ha-CM -> Arab
-    {0x68615344u,  1u}, // ha-SD -> Arab
+    {0x6861434Du,  2u}, // ha-CM -> Arab
+    {0x68615344u,  2u}, // ha-SD -> Arab
     {0x98070000u, 46u}, // hag -> Latn
-    {0xA8070000u, 28u}, // hak -> Hans
+    {0xA8070000u, 29u}, // hak -> Hans
     {0xB0070000u, 46u}, // ham -> Latn
     {0xD8070000u, 46u}, // haw -> Latn
-    {0xE4070000u,  1u}, // haz -> Arab
+    {0xE4070000u,  2u}, // haz -> Arab
     {0x84270000u, 46u}, // hbb -> Latn
-    {0xE0670000u, 20u}, // hdy -> Ethi
+    {0xE0670000u, 21u}, // hdy -> Ethi
     {0x68650000u, 31u}, // he -> Hebr
     {0xE0E70000u, 46u}, // hhy -> Latn
-    {0x68690000u, 18u}, // hi -> Deva
+    {0x68690000u, 19u}, // hi -> Deva
     {0x81070000u, 46u}, // hia -> Latn
     {0x95070000u, 46u}, // hif -> Latn
     {0x99070000u, 46u}, // hig -> Latn
@@ -569,24 +571,24 @@
     {0xAD070000u, 46u}, // hil -> Latn
     {0x81670000u, 46u}, // hla -> Latn
     {0xD1670000u, 32u}, // hlu -> Hluw
-    {0x8D870000u, 70u}, // hmd -> Plrd
+    {0x8D870000u, 71u}, // hmd -> Plrd
     {0xCD870000u, 46u}, // hmt -> Latn
-    {0x8DA70000u,  1u}, // hnd -> Arab
-    {0x91A70000u, 18u}, // hne -> Deva
+    {0x8DA70000u,  2u}, // hnd -> Arab
+    {0x91A70000u, 19u}, // hne -> Deva
     {0xA5A70000u, 33u}, // hnj -> Hmng
     {0xB5A70000u, 46u}, // hnn -> Latn
-    {0xB9A70000u,  1u}, // hno -> Arab
+    {0xB9A70000u,  2u}, // hno -> Arab
     {0x686F0000u, 46u}, // ho -> Latn
-    {0x89C70000u, 18u}, // hoc -> Deva
-    {0xA5C70000u, 18u}, // hoj -> Deva
+    {0x89C70000u, 19u}, // hoc -> Deva
+    {0xA5C70000u, 19u}, // hoj -> Deva
     {0xCDC70000u, 46u}, // hot -> Latn
     {0x68720000u, 46u}, // hr -> Latn
     {0x86470000u, 46u}, // hsb -> Latn
-    {0xB6470000u, 28u}, // hsn -> Hans
+    {0xB6470000u, 29u}, // hsn -> Hans
     {0x68740000u, 46u}, // ht -> Latn
     {0x68750000u, 46u}, // hu -> Latn
     {0xA2870000u, 46u}, // hui -> Latn
-    {0x68790000u,  3u}, // hy -> Armn
+    {0x68790000u,  4u}, // hy -> Armn
     {0x687A0000u, 46u}, // hz -> Latn
     {0x69610000u, 46u}, // ia -> Latn
     {0xB4080000u, 46u}, // ian -> Latn
@@ -604,7 +606,7 @@
     {0x69670000u, 46u}, // ig -> Latn
     {0x84C80000u, 46u}, // igb -> Latn
     {0x90C80000u, 46u}, // ige -> Latn
-    {0x69690000u, 97u}, // ii -> Yiii
+    {0x69690000u, 98u}, // ii -> Yiii
     {0xA5280000u, 46u}, // ijj -> Latn
     {0x696B0000u, 46u}, // ik -> Latn
     {0xA9480000u, 46u}, // ikk -> Latn
@@ -614,13 +616,13 @@
     {0xB9680000u, 46u}, // ilo -> Latn
     {0xB9880000u, 46u}, // imo -> Latn
     {0x696E0000u, 46u}, // in -> Latn
-    {0x9DA80000u, 17u}, // inh -> Cyrl
+    {0x9DA80000u, 18u}, // inh -> Cyrl
     {0x696F0000u, 46u}, // io -> Latn
     {0xD1C80000u, 46u}, // iou -> Latn
     {0xA2280000u, 46u}, // iri -> Latn
     {0x69730000u, 46u}, // is -> Latn
     {0x69740000u, 46u}, // it -> Latn
-    {0x69750000u, 10u}, // iu -> Cans
+    {0x69750000u, 11u}, // iu -> Cans
     {0x69770000u, 31u}, // iw -> Hebr
     {0xB2C80000u, 46u}, // iwm -> Latn
     {0xCAC80000u, 46u}, // iws -> Latn
@@ -638,13 +640,13 @@
     {0x6A690000u, 31u}, // ji -> Hebr
     {0x85090000u, 46u}, // jib -> Latn
     {0x89890000u, 46u}, // jmc -> Latn
-    {0xAD890000u, 18u}, // jml -> Deva
+    {0xAD890000u, 19u}, // jml -> Deva
     {0x82290000u, 46u}, // jra -> Latn
     {0xCE890000u, 46u}, // jut -> Latn
     {0x6A760000u, 46u}, // jv -> Latn
     {0x6A770000u, 46u}, // jw -> Latn
-    {0x6B610000u, 21u}, // ka -> Geor
-    {0x800A0000u, 17u}, // kaa -> Cyrl
+    {0x6B610000u, 22u}, // ka -> Geor
+    {0x800A0000u, 18u}, // kaa -> Cyrl
     {0x840A0000u, 46u}, // kab -> Latn
     {0x880A0000u, 46u}, // kac -> Latn
     {0x8C0A0000u, 46u}, // kad -> Latn
@@ -652,37 +654,37 @@
     {0xA40A0000u, 46u}, // kaj -> Latn
     {0xB00A0000u, 46u}, // kam -> Latn
     {0xB80A0000u, 46u}, // kao -> Latn
-    {0x8C2A0000u, 17u}, // kbd -> Cyrl
+    {0x8C2A0000u, 18u}, // kbd -> Cyrl
     {0xB02A0000u, 46u}, // kbm -> Latn
     {0xBC2A0000u, 46u}, // kbp -> Latn
     {0xC02A0000u, 46u}, // kbq -> Latn
     {0xDC2A0000u, 46u}, // kbx -> Latn
-    {0xE02A0000u,  1u}, // kby -> Arab
+    {0xE02A0000u,  2u}, // kby -> Arab
     {0x984A0000u, 46u}, // kcg -> Latn
     {0xA84A0000u, 46u}, // kck -> Latn
     {0xAC4A0000u, 46u}, // kcl -> Latn
     {0xCC4A0000u, 46u}, // kct -> Latn
     {0x906A0000u, 46u}, // kde -> Latn
-    {0x9C6A0000u,  1u}, // kdh -> Arab
+    {0x9C6A0000u,  2u}, // kdh -> Arab
     {0xAC6A0000u, 46u}, // kdl -> Latn
-    {0xCC6A0000u, 90u}, // kdt -> Thai
+    {0xCC6A0000u, 91u}, // kdt -> Thai
     {0x808A0000u, 46u}, // kea -> Latn
     {0xB48A0000u, 46u}, // ken -> Latn
     {0xE48A0000u, 46u}, // kez -> Latn
     {0xB8AA0000u, 46u}, // kfo -> Latn
-    {0xC4AA0000u, 18u}, // kfr -> Deva
-    {0xE0AA0000u, 18u}, // kfy -> Deva
+    {0xC4AA0000u, 19u}, // kfr -> Deva
+    {0xE0AA0000u, 19u}, // kfy -> Deva
     {0x6B670000u, 46u}, // kg -> Latn
     {0x90CA0000u, 46u}, // kge -> Latn
     {0x94CA0000u, 46u}, // kgf -> Latn
     {0xBCCA0000u, 46u}, // kgp -> Latn
     {0x80EA0000u, 46u}, // kha -> Latn
-    {0x84EA0000u, 83u}, // khb -> Talu
-    {0xB4EA0000u, 18u}, // khn -> Deva
+    {0x84EA0000u, 84u}, // khb -> Talu
+    {0xB4EA0000u, 19u}, // khn -> Deva
     {0xC0EA0000u, 46u}, // khq -> Latn
     {0xC8EA0000u, 46u}, // khs -> Latn
-    {0xCCEA0000u, 58u}, // kht -> Mymr
-    {0xD8EA0000u,  1u}, // khw -> Arab
+    {0xCCEA0000u, 59u}, // kht -> Mymr
+    {0xD8EA0000u,  2u}, // khw -> Arab
     {0xE4EA0000u, 46u}, // khz -> Latn
     {0x6B690000u, 46u}, // ki -> Latn
     {0xA50A0000u, 46u}, // kij -> Latn
@@ -693,11 +695,11 @@
     {0x992A0000u, 45u}, // kjg -> Laoo
     {0xC92A0000u, 46u}, // kjs -> Latn
     {0xE12A0000u, 46u}, // kjy -> Latn
-    {0x6B6B0000u, 17u}, // kk -> Cyrl
-    {0x6B6B4146u,  1u}, // kk-AF -> Arab
-    {0x6B6B434Eu,  1u}, // kk-CN -> Arab
-    {0x6B6B4952u,  1u}, // kk-IR -> Arab
-    {0x6B6B4D4Eu,  1u}, // kk-MN -> Arab
+    {0x6B6B0000u, 18u}, // kk -> Cyrl
+    {0x6B6B4146u,  2u}, // kk-AF -> Arab
+    {0x6B6B434Eu,  2u}, // kk-CN -> Arab
+    {0x6B6B4952u,  2u}, // kk-IR -> Arab
+    {0x6B6B4D4Eu,  2u}, // kk-MN -> Arab
     {0x894A0000u, 46u}, // kkc -> Latn
     {0xA54A0000u, 46u}, // kkj -> Latn
     {0x6B6C0000u, 46u}, // kl -> Latn
@@ -716,8 +718,8 @@
     {0x95AA0000u, 46u}, // knf -> Latn
     {0xBDAA0000u, 46u}, // knp -> Latn
     {0x6B6F0000u, 43u}, // ko -> Kore
-    {0xA1CA0000u, 17u}, // koi -> Cyrl
-    {0xA9CA0000u, 18u}, // kok -> Deva
+    {0xA1CA0000u, 18u}, // koi -> Cyrl
+    {0xA9CA0000u, 19u}, // kok -> Deva
     {0xADCA0000u, 46u}, // kol -> Latn
     {0xC9CA0000u, 46u}, // kos -> Latn
     {0xE5CA0000u, 46u}, // koz -> Latn
@@ -729,58 +731,58 @@
     {0x860A0000u, 46u}, // kqb -> Latn
     {0x960A0000u, 46u}, // kqf -> Latn
     {0xCA0A0000u, 46u}, // kqs -> Latn
-    {0xE20A0000u, 20u}, // kqy -> Ethi
+    {0xE20A0000u, 21u}, // kqy -> Ethi
     {0x6B720000u, 46u}, // kr -> Latn
-    {0x8A2A0000u, 17u}, // krc -> Cyrl
+    {0x8A2A0000u, 18u}, // krc -> Cyrl
     {0xA22A0000u, 46u}, // kri -> Latn
     {0xA62A0000u, 46u}, // krj -> Latn
     {0xAE2A0000u, 46u}, // krl -> Latn
     {0xCA2A0000u, 46u}, // krs -> Latn
-    {0xD22A0000u, 18u}, // kru -> Deva
-    {0x6B730000u,  1u}, // ks -> Arab
+    {0xD22A0000u, 19u}, // kru -> Deva
+    {0x6B730000u,  2u}, // ks -> Arab
     {0x864A0000u, 46u}, // ksb -> Latn
     {0x8E4A0000u, 46u}, // ksd -> Latn
     {0x964A0000u, 46u}, // ksf -> Latn
     {0x9E4A0000u, 46u}, // ksh -> Latn
     {0xA64A0000u, 46u}, // ksj -> Latn
     {0xC64A0000u, 46u}, // ksr -> Latn
-    {0x866A0000u, 20u}, // ktb -> Ethi
+    {0x866A0000u, 21u}, // ktb -> Ethi
     {0xB26A0000u, 46u}, // ktm -> Latn
     {0xBA6A0000u, 46u}, // kto -> Latn
     {0xC66A0000u, 46u}, // ktr -> Latn
     {0x6B750000u, 46u}, // ku -> Latn
-    {0x6B754952u,  1u}, // ku-IR -> Arab
-    {0x6B754C42u,  1u}, // ku-LB -> Arab
+    {0x6B754952u,  2u}, // ku-IR -> Arab
+    {0x6B754C42u,  2u}, // ku-LB -> Arab
     {0x868A0000u, 46u}, // kub -> Latn
     {0x8E8A0000u, 46u}, // kud -> Latn
     {0x928A0000u, 46u}, // kue -> Latn
     {0xA68A0000u, 46u}, // kuj -> Latn
-    {0xB28A0000u, 17u}, // kum -> Cyrl
+    {0xB28A0000u, 18u}, // kum -> Cyrl
     {0xB68A0000u, 46u}, // kun -> Latn
     {0xBE8A0000u, 46u}, // kup -> Latn
     {0xCA8A0000u, 46u}, // kus -> Latn
-    {0x6B760000u, 17u}, // kv -> Cyrl
+    {0x6B760000u, 18u}, // kv -> Cyrl
     {0x9AAA0000u, 46u}, // kvg -> Latn
     {0xC6AA0000u, 46u}, // kvr -> Latn
-    {0xDEAA0000u,  1u}, // kvx -> Arab
+    {0xDEAA0000u,  2u}, // kvx -> Arab
     {0x6B770000u, 46u}, // kw -> Latn
     {0xA6CA0000u, 46u}, // kwj -> Latn
     {0xBACA0000u, 46u}, // kwo -> Latn
     {0xC2CA0000u, 46u}, // kwq -> Latn
     {0x82EA0000u, 46u}, // kxa -> Latn
-    {0x8AEA0000u, 20u}, // kxc -> Ethi
+    {0x8AEA0000u, 21u}, // kxc -> Ethi
     {0x92EA0000u, 46u}, // kxe -> Latn
-    {0xAEEA0000u, 18u}, // kxl -> Deva
-    {0xB2EA0000u, 90u}, // kxm -> Thai
-    {0xBEEA0000u,  1u}, // kxp -> Arab
+    {0xAEEA0000u, 19u}, // kxl -> Deva
+    {0xB2EA0000u, 91u}, // kxm -> Thai
+    {0xBEEA0000u,  2u}, // kxp -> Arab
     {0xDAEA0000u, 46u}, // kxw -> Latn
     {0xE6EA0000u, 46u}, // kxz -> Latn
-    {0x6B790000u, 17u}, // ky -> Cyrl
-    {0x6B79434Eu,  1u}, // ky-CN -> Arab
+    {0x6B790000u, 18u}, // ky -> Cyrl
+    {0x6B79434Eu,  2u}, // ky-CN -> Arab
     {0x6B795452u, 46u}, // ky-TR -> Latn
     {0x930A0000u, 46u}, // kye -> Latn
     {0xDF0A0000u, 46u}, // kyx -> Latn
-    {0x9F2A0000u,  1u}, // kzh -> Arab
+    {0x9F2A0000u,  2u}, // kzh -> Arab
     {0xA72A0000u, 46u}, // kzj -> Latn
     {0xC72A0000u, 46u}, // kzr -> Latn
     {0xCF2A0000u, 46u}, // kzt -> Latn
@@ -788,15 +790,15 @@
     {0x840B0000u, 48u}, // lab -> Lina
     {0x8C0B0000u, 31u}, // lad -> Hebr
     {0x980B0000u, 46u}, // lag -> Latn
-    {0x9C0B0000u,  1u}, // lah -> Arab
+    {0x9C0B0000u,  2u}, // lah -> Arab
     {0xA40B0000u, 46u}, // laj -> Latn
     {0xC80B0000u, 46u}, // las -> Latn
     {0x6C620000u, 46u}, // lb -> Latn
-    {0x902B0000u, 17u}, // lbe -> Cyrl
+    {0x902B0000u, 18u}, // lbe -> Cyrl
     {0xD02B0000u, 46u}, // lbu -> Latn
     {0xD82B0000u, 46u}, // lbw -> Latn
     {0xB04B0000u, 46u}, // lcm -> Latn
-    {0xBC4B0000u, 90u}, // lcp -> Thai
+    {0xBC4B0000u, 91u}, // lcp -> Thai
     {0x846B0000u, 46u}, // ldb -> Latn
     {0x8C8B0000u, 46u}, // led -> Latn
     {0x908B0000u, 46u}, // lee -> Latn
@@ -804,23 +806,23 @@
     {0xBC8B0000u, 47u}, // lep -> Lepc
     {0xC08B0000u, 46u}, // leq -> Latn
     {0xD08B0000u, 46u}, // leu -> Latn
-    {0xE48B0000u, 17u}, // lez -> Cyrl
+    {0xE48B0000u, 18u}, // lez -> Cyrl
     {0x6C670000u, 46u}, // lg -> Latn
     {0x98CB0000u, 46u}, // lgg -> Latn
     {0x6C690000u, 46u}, // li -> Latn
     {0x810B0000u, 46u}, // lia -> Latn
     {0x8D0B0000u, 46u}, // lid -> Latn
-    {0x950B0000u, 18u}, // lif -> Deva
+    {0x950B0000u, 19u}, // lif -> Deva
     {0x990B0000u, 46u}, // lig -> Latn
     {0x9D0B0000u, 46u}, // lih -> Latn
     {0xA50B0000u, 46u}, // lij -> Latn
     {0xC90B0000u, 49u}, // lis -> Lisu
     {0xBD2B0000u, 46u}, // ljp -> Latn
-    {0xA14B0000u,  1u}, // lki -> Arab
+    {0xA14B0000u,  2u}, // lki -> Arab
     {0xCD4B0000u, 46u}, // lkt -> Latn
     {0x916B0000u, 46u}, // lle -> Latn
     {0xB56B0000u, 46u}, // lln -> Latn
-    {0xB58B0000u, 87u}, // lmn -> Telu
+    {0xB58B0000u, 88u}, // lmn -> Telu
     {0xB98B0000u, 46u}, // lmo -> Latn
     {0xBD8B0000u, 46u}, // lmp -> Latn
     {0x6C6E0000u, 46u}, // ln -> Latn
@@ -833,25 +835,25 @@
     {0xC5CB0000u, 46u}, // lor -> Latn
     {0xC9CB0000u, 46u}, // los -> Latn
     {0xE5CB0000u, 46u}, // loz -> Latn
-    {0x8A2B0000u,  1u}, // lrc -> Arab
+    {0x8A2B0000u,  2u}, // lrc -> Arab
     {0x6C740000u, 46u}, // lt -> Latn
     {0x9A6B0000u, 46u}, // ltg -> Latn
     {0x6C750000u, 46u}, // lu -> Latn
     {0x828B0000u, 46u}, // lua -> Latn
     {0xBA8B0000u, 46u}, // luo -> Latn
     {0xE28B0000u, 46u}, // luy -> Latn
-    {0xE68B0000u,  1u}, // luz -> Arab
+    {0xE68B0000u,  2u}, // luz -> Arab
     {0x6C760000u, 46u}, // lv -> Latn
-    {0xAECB0000u, 90u}, // lwl -> Thai
-    {0x9F2B0000u, 28u}, // lzh -> Hans
+    {0xAECB0000u, 91u}, // lwl -> Thai
+    {0x9F2B0000u, 29u}, // lzh -> Hans
     {0xE72B0000u, 46u}, // lzz -> Latn
     {0x8C0C0000u, 46u}, // mad -> Latn
     {0x940C0000u, 46u}, // maf -> Latn
-    {0x980C0000u, 18u}, // mag -> Deva
-    {0xA00C0000u, 18u}, // mai -> Deva
+    {0x980C0000u, 19u}, // mag -> Deva
+    {0xA00C0000u, 19u}, // mai -> Deva
     {0xA80C0000u, 46u}, // mak -> Latn
     {0xB40C0000u, 46u}, // man -> Latn
-    {0xB40C474Eu, 60u}, // man-GN -> Nkoo
+    {0xB40C474Eu, 61u}, // man-GN -> Nkoo
     {0xC80C0000u, 46u}, // mas -> Latn
     {0xD80C0000u, 46u}, // maw -> Latn
     {0xE40C0000u, 46u}, // maz -> Latn
@@ -866,12 +868,12 @@
     {0xC44C0000u, 46u}, // mcr -> Latn
     {0xD04C0000u, 46u}, // mcu -> Latn
     {0x806C0000u, 46u}, // mda -> Latn
-    {0x906C0000u,  1u}, // mde -> Arab
-    {0x946C0000u, 17u}, // mdf -> Cyrl
+    {0x906C0000u,  2u}, // mde -> Arab
+    {0x946C0000u, 18u}, // mdf -> Cyrl
     {0x9C6C0000u, 46u}, // mdh -> Latn
     {0xA46C0000u, 46u}, // mdj -> Latn
     {0xC46C0000u, 46u}, // mdr -> Latn
-    {0xDC6C0000u, 20u}, // mdx -> Ethi
+    {0xDC6C0000u, 21u}, // mdx -> Ethi
     {0x8C8C0000u, 46u}, // med -> Latn
     {0x908C0000u, 46u}, // mee -> Latn
     {0xA88C0000u, 46u}, // mek -> Latn
@@ -879,7 +881,7 @@
     {0xC48C0000u, 46u}, // mer -> Latn
     {0xCC8C0000u, 46u}, // met -> Latn
     {0xD08C0000u, 46u}, // meu -> Latn
-    {0x80AC0000u,  1u}, // mfa -> Arab
+    {0x80AC0000u,  2u}, // mfa -> Arab
     {0x90AC0000u, 46u}, // mfe -> Latn
     {0xB4AC0000u, 46u}, // mfn -> Latn
     {0xB8AC0000u, 46u}, // mfo -> Latn
@@ -888,7 +890,7 @@
     {0x9CCC0000u, 46u}, // mgh -> Latn
     {0xACCC0000u, 46u}, // mgl -> Latn
     {0xB8CC0000u, 46u}, // mgo -> Latn
-    {0xBCCC0000u, 18u}, // mgp -> Deva
+    {0xBCCC0000u, 19u}, // mgp -> Deva
     {0xE0CC0000u, 46u}, // mgy -> Latn
     {0x6D680000u, 46u}, // mh -> Latn
     {0xA0EC0000u, 46u}, // mhi -> Latn
@@ -896,26 +898,25 @@
     {0x6D690000u, 46u}, // mi -> Latn
     {0x950C0000u, 46u}, // mif -> Latn
     {0xB50C0000u, 46u}, // min -> Latn
-    {0xC90C0000u, 30u}, // mis -> Hatr
     {0xD90C0000u, 46u}, // miw -> Latn
-    {0x6D6B0000u, 17u}, // mk -> Cyrl
-    {0xA14C0000u,  1u}, // mki -> Arab
+    {0x6D6B0000u, 18u}, // mk -> Cyrl
+    {0xA14C0000u,  2u}, // mki -> Arab
     {0xAD4C0000u, 46u}, // mkl -> Latn
     {0xBD4C0000u, 46u}, // mkp -> Latn
     {0xD94C0000u, 46u}, // mkw -> Latn
-    {0x6D6C0000u, 55u}, // ml -> Mlym
+    {0x6D6C0000u, 56u}, // ml -> Mlym
     {0x916C0000u, 46u}, // mle -> Latn
     {0xBD6C0000u, 46u}, // mlp -> Latn
     {0xC96C0000u, 46u}, // mls -> Latn
     {0xB98C0000u, 46u}, // mmo -> Latn
     {0xD18C0000u, 46u}, // mmu -> Latn
     {0xDD8C0000u, 46u}, // mmx -> Latn
-    {0x6D6E0000u, 17u}, // mn -> Cyrl
-    {0x6D6E434Eu, 56u}, // mn-CN -> Mong
+    {0x6D6E0000u, 18u}, // mn -> Cyrl
+    {0x6D6E434Eu, 57u}, // mn-CN -> Mong
     {0x81AC0000u, 46u}, // mna -> Latn
     {0x95AC0000u, 46u}, // mnf -> Latn
-    {0xA1AC0000u,  7u}, // mni -> Beng
-    {0xD9AC0000u, 58u}, // mnw -> Mymr
+    {0xA1AC0000u,  8u}, // mni -> Beng
+    {0xD9AC0000u, 59u}, // mnw -> Mymr
     {0x6D6F0000u, 46u}, // mo -> Latn
     {0x81CC0000u, 46u}, // moa -> Latn
     {0x91CC0000u, 46u}, // moe -> Latn
@@ -927,39 +928,39 @@
     {0xCDEC0000u, 46u}, // mpt -> Latn
     {0xDDEC0000u, 46u}, // mpx -> Latn
     {0xAE0C0000u, 46u}, // mql -> Latn
-    {0x6D720000u, 18u}, // mr -> Deva
-    {0x8E2C0000u, 18u}, // mrd -> Deva
-    {0xA62C0000u, 17u}, // mrj -> Cyrl
-    {0xBA2C0000u, 57u}, // mro -> Mroo
+    {0x6D720000u, 19u}, // mr -> Deva
+    {0x8E2C0000u, 19u}, // mrd -> Deva
+    {0xA62C0000u, 18u}, // mrj -> Cyrl
+    {0xBA2C0000u, 58u}, // mro -> Mroo
     {0x6D730000u, 46u}, // ms -> Latn
-    {0x6D734343u,  1u}, // ms-CC -> Arab
+    {0x6D734343u,  2u}, // ms-CC -> Arab
     {0x6D740000u, 46u}, // mt -> Latn
     {0x8A6C0000u, 46u}, // mtc -> Latn
     {0x966C0000u, 46u}, // mtf -> Latn
     {0xA26C0000u, 46u}, // mti -> Latn
-    {0xC66C0000u, 18u}, // mtr -> Deva
+    {0xC66C0000u, 19u}, // mtr -> Deva
     {0x828C0000u, 46u}, // mua -> Latn
     {0xC68C0000u, 46u}, // mur -> Latn
     {0xCA8C0000u, 46u}, // mus -> Latn
     {0x82AC0000u, 46u}, // mva -> Latn
     {0xB6AC0000u, 46u}, // mvn -> Latn
-    {0xE2AC0000u,  1u}, // mvy -> Arab
+    {0xE2AC0000u,  2u}, // mvy -> Arab
     {0xAACC0000u, 46u}, // mwk -> Latn
-    {0xC6CC0000u, 18u}, // mwr -> Deva
+    {0xC6CC0000u, 19u}, // mwr -> Deva
     {0xD6CC0000u, 46u}, // mwv -> Latn
     {0xDACC0000u, 34u}, // mww -> Hmnp
     {0x8AEC0000u, 46u}, // mxc -> Latn
     {0xB2EC0000u, 46u}, // mxm -> Latn
-    {0x6D790000u, 58u}, // my -> Mymr
+    {0x6D790000u, 59u}, // my -> Mymr
     {0xAB0C0000u, 46u}, // myk -> Latn
-    {0xB30C0000u, 20u}, // mym -> Ethi
-    {0xD70C0000u, 17u}, // myv -> Cyrl
+    {0xB30C0000u, 21u}, // mym -> Ethi
+    {0xD70C0000u, 18u}, // myv -> Cyrl
     {0xDB0C0000u, 46u}, // myw -> Latn
     {0xDF0C0000u, 46u}, // myx -> Latn
     {0xE70C0000u, 52u}, // myz -> Mand
     {0xAB2C0000u, 46u}, // mzk -> Latn
     {0xB32C0000u, 46u}, // mzm -> Latn
-    {0xB72C0000u,  1u}, // mzn -> Arab
+    {0xB72C0000u,  2u}, // mzn -> Arab
     {0xBF2C0000u, 46u}, // mzp -> Latn
     {0xDB2C0000u, 46u}, // mzw -> Latn
     {0xE72C0000u, 46u}, // mzz -> Latn
@@ -967,7 +968,7 @@
     {0x880D0000u, 46u}, // nac -> Latn
     {0x940D0000u, 46u}, // naf -> Latn
     {0xA80D0000u, 46u}, // nak -> Latn
-    {0xB40D0000u, 28u}, // nan -> Hans
+    {0xB40D0000u, 29u}, // nan -> Hans
     {0xBC0D0000u, 46u}, // nap -> Latn
     {0xC00D0000u, 46u}, // naq -> Latn
     {0xC80D0000u, 46u}, // nas -> Latn
@@ -981,9 +982,9 @@
     {0x6E640000u, 46u}, // nd -> Latn
     {0x886D0000u, 46u}, // ndc -> Latn
     {0xC86D0000u, 46u}, // nds -> Latn
-    {0x6E650000u, 18u}, // ne -> Deva
+    {0x6E650000u, 19u}, // ne -> Deva
     {0x848D0000u, 46u}, // neb -> Latn
-    {0xD88D0000u, 18u}, // new -> Deva
+    {0xD88D0000u, 19u}, // new -> Deva
     {0xDC8D0000u, 46u}, // nex -> Latn
     {0xC4AD0000u, 46u}, // nfr -> Latn
     {0x6E670000u, 46u}, // ng -> Latn
@@ -1011,17 +1012,17 @@
     {0x9DAD0000u, 46u}, // nnh -> Latn
     {0xA9AD0000u, 46u}, // nnk -> Latn
     {0xB1AD0000u, 46u}, // nnm -> Latn
-    {0xBDAD0000u, 94u}, // nnp -> Wcho
+    {0xBDAD0000u, 95u}, // nnp -> Wcho
     {0x6E6F0000u, 46u}, // no -> Latn
     {0x8DCD0000u, 44u}, // nod -> Lana
-    {0x91CD0000u, 18u}, // noe -> Deva
-    {0xB5CD0000u, 72u}, // non -> Runr
+    {0x91CD0000u, 19u}, // noe -> Deva
+    {0xB5CD0000u, 73u}, // non -> Runr
     {0xBDCD0000u, 46u}, // nop -> Latn
     {0xD1CD0000u, 46u}, // nou -> Latn
-    {0xBA0D0000u, 60u}, // nqo -> Nkoo
+    {0xBA0D0000u, 61u}, // nqo -> Nkoo
     {0x6E720000u, 46u}, // nr -> Latn
     {0x862D0000u, 46u}, // nrb -> Latn
-    {0xAA4D0000u, 10u}, // nsk -> Cans
+    {0xAA4D0000u, 11u}, // nsk -> Cans
     {0xB64D0000u, 46u}, // nsn -> Latn
     {0xBA4D0000u, 46u}, // nso -> Latn
     {0xCA4D0000u, 46u}, // nss -> Latn
@@ -1049,18 +1050,18 @@
     {0xB5AE0000u, 46u}, // onn -> Latn
     {0xC9AE0000u, 46u}, // ons -> Latn
     {0xB1EE0000u, 46u}, // opm -> Latn
-    {0x6F720000u, 65u}, // or -> Orya
+    {0x6F720000u, 66u}, // or -> Orya
     {0xBA2E0000u, 46u}, // oro -> Latn
-    {0xD22E0000u,  1u}, // oru -> Arab
-    {0x6F730000u, 17u}, // os -> Cyrl
-    {0x824E0000u, 66u}, // osa -> Osge
-    {0x826E0000u,  1u}, // ota -> Arab
-    {0xAA6E0000u, 64u}, // otk -> Orkh
+    {0xD22E0000u,  2u}, // oru -> Arab
+    {0x6F730000u, 18u}, // os -> Cyrl
+    {0x824E0000u, 67u}, // osa -> Osge
+    {0x826E0000u,  2u}, // ota -> Arab
+    {0xAA6E0000u, 65u}, // otk -> Orkh
     {0xB32E0000u, 46u}, // ozm -> Latn
-    {0x70610000u, 27u}, // pa -> Guru
-    {0x7061504Bu,  1u}, // pa-PK -> Arab
+    {0x70610000u, 28u}, // pa -> Guru
+    {0x7061504Bu,  2u}, // pa-PK -> Arab
     {0x980F0000u, 46u}, // pag -> Latn
-    {0xAC0F0000u, 68u}, // pal -> Phli
+    {0xAC0F0000u, 69u}, // pal -> Phli
     {0xB00F0000u, 46u}, // pam -> Latn
     {0xBC0F0000u, 46u}, // pap -> Latn
     {0xD00F0000u, 46u}, // pau -> Latn
@@ -1070,28 +1071,28 @@
     {0x886F0000u, 46u}, // pdc -> Latn
     {0xCC6F0000u, 46u}, // pdt -> Latn
     {0x8C8F0000u, 46u}, // ped -> Latn
-    {0xB88F0000u, 95u}, // peo -> Xpeo
+    {0xB88F0000u, 96u}, // peo -> Xpeo
     {0xDC8F0000u, 46u}, // pex -> Latn
     {0xACAF0000u, 46u}, // pfl -> Latn
-    {0xACEF0000u,  1u}, // phl -> Arab
-    {0xB4EF0000u, 69u}, // phn -> Phnx
+    {0xACEF0000u,  2u}, // phl -> Arab
+    {0xB4EF0000u, 70u}, // phn -> Phnx
     {0xAD0F0000u, 46u}, // pil -> Latn
     {0xBD0F0000u, 46u}, // pip -> Latn
-    {0x814F0000u,  8u}, // pka -> Brah
+    {0x814F0000u,  9u}, // pka -> Brah
     {0xB94F0000u, 46u}, // pko -> Latn
     {0x706C0000u, 46u}, // pl -> Latn
     {0x816F0000u, 46u}, // pla -> Latn
     {0xC98F0000u, 46u}, // pms -> Latn
     {0x99AF0000u, 46u}, // png -> Latn
     {0xB5AF0000u, 46u}, // pnn -> Latn
-    {0xCDAF0000u, 25u}, // pnt -> Grek
+    {0xCDAF0000u, 26u}, // pnt -> Grek
     {0xB5CF0000u, 46u}, // pon -> Latn
-    {0x81EF0000u, 18u}, // ppa -> Deva
+    {0x81EF0000u, 19u}, // ppa -> Deva
     {0xB9EF0000u, 46u}, // ppo -> Latn
     {0x822F0000u, 39u}, // pra -> Khar
-    {0x8E2F0000u,  1u}, // prd -> Arab
+    {0x8E2F0000u,  2u}, // prd -> Arab
     {0x9A2F0000u, 46u}, // prg -> Latn
-    {0x70730000u,  1u}, // ps -> Arab
+    {0x70730000u,  2u}, // ps -> Arab
     {0xCA4F0000u, 46u}, // pss -> Latn
     {0x70740000u, 46u}, // pt -> Latn
     {0xBE6F0000u, 46u}, // ptp -> Latn
@@ -1101,23 +1102,23 @@
     {0x8A900000u, 46u}, // quc -> Latn
     {0x9A900000u, 46u}, // qug -> Latn
     {0xA0110000u, 46u}, // rai -> Latn
-    {0xA4110000u, 18u}, // raj -> Deva
+    {0xA4110000u, 19u}, // raj -> Deva
     {0xB8110000u, 46u}, // rao -> Latn
     {0x94510000u, 46u}, // rcf -> Latn
     {0xA4910000u, 46u}, // rej -> Latn
     {0xAC910000u, 46u}, // rel -> Latn
     {0xC8910000u, 46u}, // res -> Latn
     {0xB4D10000u, 46u}, // rgn -> Latn
-    {0x98F10000u,  1u}, // rhg -> Arab
+    {0x98F10000u,  2u}, // rhg -> Arab
     {0x81110000u, 46u}, // ria -> Latn
-    {0x95110000u, 88u}, // rif -> Tfng
+    {0x95110000u, 89u}, // rif -> Tfng
     {0x95114E4Cu, 46u}, // rif-NL -> Latn
-    {0xC9310000u, 18u}, // rjs -> Deva
-    {0xCD510000u,  7u}, // rkt -> Beng
+    {0xC9310000u, 19u}, // rjs -> Deva
+    {0xCD510000u,  8u}, // rkt -> Beng
     {0x726D0000u, 46u}, // rm -> Latn
     {0x95910000u, 46u}, // rmf -> Latn
     {0xB9910000u, 46u}, // rmo -> Latn
-    {0xCD910000u,  1u}, // rmt -> Arab
+    {0xCD910000u,  2u}, // rmt -> Arab
     {0xD1910000u, 46u}, // rmu -> Latn
     {0x726E0000u, 46u}, // rn -> Latn
     {0x81B10000u, 46u}, // rna -> Latn
@@ -1128,49 +1129,49 @@
     {0xB9D10000u, 46u}, // roo -> Latn
     {0xBA310000u, 46u}, // rro -> Latn
     {0xB2710000u, 46u}, // rtm -> Latn
-    {0x72750000u, 17u}, // ru -> Cyrl
-    {0x92910000u, 17u}, // rue -> Cyrl
+    {0x72750000u, 18u}, // ru -> Cyrl
+    {0x92910000u, 18u}, // rue -> Cyrl
     {0x9A910000u, 46u}, // rug -> Latn
     {0x72770000u, 46u}, // rw -> Latn
     {0xAAD10000u, 46u}, // rwk -> Latn
     {0xBAD10000u, 46u}, // rwo -> Latn
     {0xD3110000u, 38u}, // ryu -> Kana
-    {0x73610000u, 18u}, // sa -> Deva
+    {0x73610000u, 19u}, // sa -> Deva
     {0x94120000u, 46u}, // saf -> Latn
-    {0x9C120000u, 17u}, // sah -> Cyrl
+    {0x9C120000u, 18u}, // sah -> Cyrl
     {0xC0120000u, 46u}, // saq -> Latn
     {0xC8120000u, 46u}, // sas -> Latn
-    {0xCC120000u, 63u}, // sat -> Olck
+    {0xCC120000u, 64u}, // sat -> Olck
     {0xD4120000u, 46u}, // sav -> Latn
-    {0xE4120000u, 75u}, // saz -> Saur
+    {0xE4120000u, 76u}, // saz -> Saur
     {0x80320000u, 46u}, // sba -> Latn
     {0x90320000u, 46u}, // sbe -> Latn
     {0xBC320000u, 46u}, // sbp -> Latn
     {0x73630000u, 46u}, // sc -> Latn
-    {0xA8520000u, 18u}, // sck -> Deva
-    {0xAC520000u,  1u}, // scl -> Arab
+    {0xA8520000u, 19u}, // sck -> Deva
+    {0xAC520000u,  2u}, // scl -> Arab
     {0xB4520000u, 46u}, // scn -> Latn
     {0xB8520000u, 46u}, // sco -> Latn
     {0xC8520000u, 46u}, // scs -> Latn
-    {0x73640000u,  1u}, // sd -> Arab
+    {0x73640000u,  2u}, // sd -> Arab
     {0x88720000u, 46u}, // sdc -> Latn
-    {0x9C720000u,  1u}, // sdh -> Arab
+    {0x9C720000u,  2u}, // sdh -> Arab
     {0x73650000u, 46u}, // se -> Latn
     {0x94920000u, 46u}, // sef -> Latn
     {0x9C920000u, 46u}, // seh -> Latn
     {0xA0920000u, 46u}, // sei -> Latn
     {0xC8920000u, 46u}, // ses -> Latn
     {0x73670000u, 46u}, // sg -> Latn
-    {0x80D20000u, 62u}, // sga -> Ogam
+    {0x80D20000u, 63u}, // sga -> Ogam
     {0xC8D20000u, 46u}, // sgs -> Latn
-    {0xD8D20000u, 20u}, // sgw -> Ethi
+    {0xD8D20000u, 21u}, // sgw -> Ethi
     {0xE4D20000u, 46u}, // sgz -> Latn
     {0x73680000u, 46u}, // sh -> Latn
-    {0xA0F20000u, 88u}, // shi -> Tfng
+    {0xA0F20000u, 89u}, // shi -> Tfng
     {0xA8F20000u, 46u}, // shk -> Latn
-    {0xB4F20000u, 58u}, // shn -> Mymr
-    {0xD0F20000u,  1u}, // shu -> Arab
-    {0x73690000u, 77u}, // si -> Sinh
+    {0xB4F20000u, 59u}, // shn -> Mymr
+    {0xD0F20000u,  2u}, // shu -> Arab
+    {0x73690000u, 78u}, // si -> Sinh
     {0x8D120000u, 46u}, // sid -> Latn
     {0x99120000u, 46u}, // sig -> Latn
     {0xAD120000u, 46u}, // sil -> Latn
@@ -1178,7 +1179,7 @@
     {0xC5320000u, 46u}, // sjr -> Latn
     {0x736B0000u, 46u}, // sk -> Latn
     {0x89520000u, 46u}, // skc -> Latn
-    {0xC5520000u,  1u}, // skr -> Arab
+    {0xC5520000u,  2u}, // skr -> Arab
     {0xC9520000u, 46u}, // sks -> Latn
     {0x736C0000u, 46u}, // sl -> Latn
     {0x8D720000u, 46u}, // sld -> Latn
@@ -1189,7 +1190,7 @@
     {0x81920000u, 46u}, // sma -> Latn
     {0xA5920000u, 46u}, // smj -> Latn
     {0xB5920000u, 46u}, // smn -> Latn
-    {0xBD920000u, 73u}, // smp -> Samr
+    {0xBD920000u, 74u}, // smp -> Samr
     {0xC1920000u, 46u}, // smq -> Latn
     {0xC9920000u, 46u}, // sms -> Latn
     {0x736E0000u, 46u}, // sn -> Latn
@@ -1199,24 +1200,24 @@
     {0xDDB20000u, 46u}, // snx -> Latn
     {0xE1B20000u, 46u}, // sny -> Latn
     {0x736F0000u, 46u}, // so -> Latn
-    {0x99D20000u, 78u}, // sog -> Sogd
+    {0x99D20000u, 79u}, // sog -> Sogd
     {0xA9D20000u, 46u}, // sok -> Latn
     {0xC1D20000u, 46u}, // soq -> Latn
-    {0xD1D20000u, 90u}, // sou -> Thai
+    {0xD1D20000u, 91u}, // sou -> Thai
     {0xE1D20000u, 46u}, // soy -> Latn
     {0x8DF20000u, 46u}, // spd -> Latn
     {0xADF20000u, 46u}, // spl -> Latn
     {0xC9F20000u, 46u}, // sps -> Latn
     {0x73710000u, 46u}, // sq -> Latn
-    {0x73720000u, 17u}, // sr -> Cyrl
+    {0x73720000u, 18u}, // sr -> Cyrl
     {0x73724D45u, 46u}, // sr-ME -> Latn
     {0x7372524Fu, 46u}, // sr-RO -> Latn
     {0x73725255u, 46u}, // sr-RU -> Latn
     {0x73725452u, 46u}, // sr-TR -> Latn
-    {0x86320000u, 79u}, // srb -> Sora
+    {0x86320000u, 80u}, // srb -> Sora
     {0xB6320000u, 46u}, // srn -> Latn
     {0xC6320000u, 46u}, // srr -> Latn
-    {0xDE320000u, 18u}, // srx -> Deva
+    {0xDE320000u, 19u}, // srx -> Deva
     {0x73730000u, 46u}, // ss -> Latn
     {0x8E520000u, 46u}, // ssd -> Latn
     {0x9A520000u, 46u}, // ssg -> Latn
@@ -1232,18 +1233,18 @@
     {0xCA920000u, 46u}, // sus -> Latn
     {0x73760000u, 46u}, // sv -> Latn
     {0x73770000u, 46u}, // sw -> Latn
-    {0x86D20000u,  1u}, // swb -> Arab
+    {0x86D20000u,  2u}, // swb -> Arab
     {0x8AD20000u, 46u}, // swc -> Latn
     {0x9AD20000u, 46u}, // swg -> Latn
     {0xBED20000u, 46u}, // swp -> Latn
-    {0xD6D20000u, 18u}, // swv -> Deva
+    {0xD6D20000u, 19u}, // swv -> Deva
     {0xB6F20000u, 46u}, // sxn -> Latn
     {0xDAF20000u, 46u}, // sxw -> Latn
-    {0xAF120000u,  7u}, // syl -> Beng
-    {0xC7120000u, 81u}, // syr -> Syrc
+    {0xAF120000u,  8u}, // syl -> Beng
+    {0xC7120000u, 82u}, // syr -> Syrc
     {0xAF320000u, 46u}, // szl -> Latn
-    {0x74610000u, 84u}, // ta -> Taml
-    {0xA4130000u, 18u}, // taj -> Deva
+    {0x74610000u, 85u}, // ta -> Taml
+    {0xA4130000u, 19u}, // taj -> Deva
     {0xAC130000u, 46u}, // tal -> Latn
     {0xB4130000u, 46u}, // tan -> Latn
     {0xC0130000u, 46u}, // taq -> Latn
@@ -1256,28 +1257,28 @@
     {0xE4330000u, 46u}, // tbz -> Latn
     {0xA0530000u, 46u}, // tci -> Latn
     {0xE0530000u, 42u}, // tcy -> Knda
-    {0x8C730000u, 82u}, // tdd -> Tale
-    {0x98730000u, 18u}, // tdg -> Deva
-    {0x9C730000u, 18u}, // tdh -> Deva
+    {0x8C730000u, 83u}, // tdd -> Tale
+    {0x98730000u, 19u}, // tdg -> Deva
+    {0x9C730000u, 19u}, // tdh -> Deva
     {0xD0730000u, 46u}, // tdu -> Latn
-    {0x74650000u, 87u}, // te -> Telu
+    {0x74650000u, 88u}, // te -> Telu
     {0x8C930000u, 46u}, // ted -> Latn
     {0xB0930000u, 46u}, // tem -> Latn
     {0xB8930000u, 46u}, // teo -> Latn
     {0xCC930000u, 46u}, // tet -> Latn
     {0xA0B30000u, 46u}, // tfi -> Latn
-    {0x74670000u, 17u}, // tg -> Cyrl
-    {0x7467504Bu,  1u}, // tg-PK -> Arab
+    {0x74670000u, 18u}, // tg -> Cyrl
+    {0x7467504Bu,  2u}, // tg-PK -> Arab
     {0x88D30000u, 46u}, // tgc -> Latn
     {0xB8D30000u, 46u}, // tgo -> Latn
     {0xD0D30000u, 46u}, // tgu -> Latn
-    {0x74680000u, 90u}, // th -> Thai
-    {0xACF30000u, 18u}, // thl -> Deva
-    {0xC0F30000u, 18u}, // thq -> Deva
-    {0xC4F30000u, 18u}, // thr -> Deva
-    {0x74690000u, 20u}, // ti -> Ethi
+    {0x74680000u, 91u}, // th -> Thai
+    {0xACF30000u, 19u}, // thl -> Deva
+    {0xC0F30000u, 19u}, // thq -> Deva
+    {0xC4F30000u, 19u}, // thr -> Deva
+    {0x74690000u, 21u}, // ti -> Ethi
     {0x95130000u, 46u}, // tif -> Latn
-    {0x99130000u, 20u}, // tig -> Ethi
+    {0x99130000u, 21u}, // tig -> Ethi
     {0xA9130000u, 46u}, // tik -> Latn
     {0xB1130000u, 46u}, // tim -> Latn
     {0xB9130000u, 46u}, // tio -> Latn
@@ -1285,7 +1286,7 @@
     {0x746B0000u, 46u}, // tk -> Latn
     {0xAD530000u, 46u}, // tkl -> Latn
     {0xC5530000u, 46u}, // tkr -> Latn
-    {0xCD530000u, 18u}, // tkt -> Deva
+    {0xCD530000u, 19u}, // tkt -> Deva
     {0x746C0000u, 46u}, // tl -> Latn
     {0x95730000u, 46u}, // tlf -> Latn
     {0xDD730000u, 46u}, // tlx -> Latn
@@ -1305,19 +1306,19 @@
     {0x74720000u, 46u}, // tr -> Latn
     {0xD2330000u, 46u}, // tru -> Latn
     {0xD6330000u, 46u}, // trv -> Latn
-    {0xDA330000u,  1u}, // trw -> Arab
+    {0xDA330000u,  2u}, // trw -> Arab
     {0x74730000u, 46u}, // ts -> Latn
-    {0x8E530000u, 25u}, // tsd -> Grek
-    {0x96530000u, 18u}, // tsf -> Deva
+    {0x8E530000u, 26u}, // tsd -> Grek
+    {0x96530000u, 19u}, // tsf -> Deva
     {0x9A530000u, 46u}, // tsg -> Latn
-    {0xA6530000u, 91u}, // tsj -> Tibt
+    {0xA6530000u, 92u}, // tsj -> Tibt
     {0xDA530000u, 46u}, // tsw -> Latn
-    {0x74740000u, 17u}, // tt -> Cyrl
+    {0x74740000u, 18u}, // tt -> Cyrl
     {0x8E730000u, 46u}, // ttd -> Latn
     {0x92730000u, 46u}, // tte -> Latn
     {0xA6730000u, 46u}, // ttj -> Latn
     {0xC6730000u, 46u}, // ttr -> Latn
-    {0xCA730000u, 90u}, // tts -> Thai
+    {0xCA730000u, 91u}, // tts -> Thai
     {0xCE730000u, 46u}, // ttt -> Latn
     {0x9E930000u, 46u}, // tuh -> Latn
     {0xAE930000u, 46u}, // tul -> Latn
@@ -1328,25 +1329,26 @@
     {0xD2B30000u, 46u}, // tvu -> Latn
     {0x9ED30000u, 46u}, // twh -> Latn
     {0xC2D30000u, 46u}, // twq -> Latn
-    {0x9AF30000u, 85u}, // txg -> Tang
+    {0x9AF30000u, 86u}, // txg -> Tang
     {0x74790000u, 46u}, // ty -> Latn
     {0x83130000u, 46u}, // tya -> Latn
-    {0xD7130000u, 17u}, // tyv -> Cyrl
+    {0xD7130000u, 18u}, // tyv -> Cyrl
     {0xB3330000u, 46u}, // tzm -> Latn
     {0xD0340000u, 46u}, // ubu -> Latn
-    {0xB0740000u, 17u}, // udm -> Cyrl
-    {0x75670000u,  1u}, // ug -> Arab
-    {0x75674B5Au, 17u}, // ug-KZ -> Cyrl
-    {0x75674D4Eu, 17u}, // ug-MN -> Cyrl
-    {0x80D40000u, 92u}, // uga -> Ugar
-    {0x756B0000u, 17u}, // uk -> Cyrl
+    {0xA0740000u,  0u}, // udi -> Aghb
+    {0xB0740000u, 18u}, // udm -> Cyrl
+    {0x75670000u,  2u}, // ug -> Arab
+    {0x75674B5Au, 18u}, // ug-KZ -> Cyrl
+    {0x75674D4Eu, 18u}, // ug-MN -> Cyrl
+    {0x80D40000u, 93u}, // uga -> Ugar
+    {0x756B0000u, 18u}, // uk -> Cyrl
     {0xA1740000u, 46u}, // uli -> Latn
     {0x85940000u, 46u}, // umb -> Latn
-    {0xC5B40000u,  7u}, // unr -> Beng
-    {0xC5B44E50u, 18u}, // unr-NP -> Deva
-    {0xDDB40000u,  7u}, // unx -> Beng
+    {0xC5B40000u,  8u}, // unr -> Beng
+    {0xC5B44E50u, 19u}, // unr-NP -> Deva
+    {0xDDB40000u,  8u}, // unx -> Beng
     {0xA9D40000u, 46u}, // uok -> Latn
-    {0x75720000u,  1u}, // ur -> Arab
+    {0x75720000u,  2u}, // ur -> Arab
     {0xA2340000u, 46u}, // uri -> Latn
     {0xCE340000u, 46u}, // urt -> Latn
     {0xDA340000u, 46u}, // urw -> Latn
@@ -1356,10 +1358,10 @@
     {0x9EB40000u, 46u}, // uvh -> Latn
     {0xAEB40000u, 46u}, // uvl -> Latn
     {0x757A0000u, 46u}, // uz -> Latn
-    {0x757A4146u,  1u}, // uz-AF -> Arab
-    {0x757A434Eu, 17u}, // uz-CN -> Cyrl
+    {0x757A4146u,  2u}, // uz-AF -> Arab
+    {0x757A434Eu, 18u}, // uz-CN -> Cyrl
     {0x98150000u, 46u}, // vag -> Latn
-    {0xA0150000u, 93u}, // vai -> Vaii
+    {0xA0150000u, 94u}, // vai -> Vaii
     {0xB4150000u, 46u}, // van -> Latn
     {0x76650000u, 46u}, // ve -> Latn
     {0x88950000u, 46u}, // vec -> Latn
@@ -1378,12 +1380,12 @@
     {0x77610000u, 46u}, // wa -> Latn
     {0x90160000u, 46u}, // wae -> Latn
     {0xA4160000u, 46u}, // waj -> Latn
-    {0xAC160000u, 20u}, // wal -> Ethi
+    {0xAC160000u, 21u}, // wal -> Ethi
     {0xB4160000u, 46u}, // wan -> Latn
     {0xC4160000u, 46u}, // war -> Latn
     {0xBC360000u, 46u}, // wbp -> Latn
-    {0xC0360000u, 87u}, // wbq -> Telu
-    {0xC4360000u, 18u}, // wbr -> Deva
+    {0xC0360000u, 88u}, // wbq -> Telu
+    {0xC4360000u, 19u}, // wbr -> Deva
     {0xA0560000u, 46u}, // wci -> Latn
     {0xC4960000u, 46u}, // wer -> Latn
     {0xA0D60000u, 46u}, // wgi -> Latn
@@ -1396,40 +1398,40 @@
     {0xC9760000u, 46u}, // wls -> Latn
     {0xB9960000u, 46u}, // wmo -> Latn
     {0x89B60000u, 46u}, // wnc -> Latn
-    {0xA1B60000u,  1u}, // wni -> Arab
+    {0xA1B60000u,  2u}, // wni -> Arab
     {0xD1B60000u, 46u}, // wnu -> Latn
     {0x776F0000u, 46u}, // wo -> Latn
     {0x85D60000u, 46u}, // wob -> Latn
     {0xC9D60000u, 46u}, // wos -> Latn
     {0xCA360000u, 46u}, // wrs -> Latn
-    {0x9A560000u, 22u}, // wsg -> Gong
+    {0x9A560000u, 23u}, // wsg -> Gong
     {0xAA560000u, 46u}, // wsk -> Latn
-    {0xB2760000u, 18u}, // wtm -> Deva
-    {0xD2960000u, 28u}, // wuu -> Hans
+    {0xB2760000u, 19u}, // wtm -> Deva
+    {0xD2960000u, 29u}, // wuu -> Hans
     {0xD6960000u, 46u}, // wuv -> Latn
     {0x82D60000u, 46u}, // wwa -> Latn
     {0xD4170000u, 46u}, // xav -> Latn
     {0xA0370000u, 46u}, // xbi -> Latn
-    {0xB8570000u, 14u}, // xco -> Chrs
-    {0xC4570000u, 11u}, // xcr -> Cari
+    {0xB8570000u, 15u}, // xco -> Chrs
+    {0xC4570000u, 12u}, // xcr -> Cari
     {0xC8970000u, 46u}, // xes -> Latn
     {0x78680000u, 46u}, // xh -> Latn
     {0x81770000u, 46u}, // xla -> Latn
     {0x89770000u, 50u}, // xlc -> Lyci
     {0x8D770000u, 51u}, // xld -> Lydi
-    {0x95970000u, 21u}, // xmf -> Geor
+    {0x95970000u, 22u}, // xmf -> Geor
     {0xB5970000u, 53u}, // xmn -> Mani
-    {0xC5970000u, 54u}, // xmr -> Merc
-    {0x81B70000u, 59u}, // xna -> Narb
-    {0xC5B70000u, 18u}, // xnr -> Deva
+    {0xC5970000u, 55u}, // xmr -> Merc
+    {0x81B70000u, 60u}, // xna -> Narb
+    {0xC5B70000u, 19u}, // xnr -> Deva
     {0x99D70000u, 46u}, // xog -> Latn
     {0xB5D70000u, 46u}, // xon -> Latn
-    {0xC5F70000u, 71u}, // xpr -> Prti
+    {0xC5F70000u, 72u}, // xpr -> Prti
     {0x86370000u, 46u}, // xrb -> Latn
-    {0x82570000u, 74u}, // xsa -> Sarb
+    {0x82570000u, 75u}, // xsa -> Sarb
     {0xA2570000u, 46u}, // xsi -> Latn
     {0xB2570000u, 46u}, // xsm -> Latn
-    {0xC6570000u, 18u}, // xsr -> Deva
+    {0xC6570000u, 19u}, // xsr -> Deva
     {0x92D70000u, 46u}, // xwe -> Latn
     {0xB0180000u, 46u}, // yam -> Latn
     {0xB8180000u, 46u}, // yao -> Latn
@@ -1458,33 +1460,33 @@
     {0xAE380000u, 46u}, // yrl -> Latn
     {0xCA580000u, 46u}, // yss -> Latn
     {0x82980000u, 46u}, // yua -> Latn
-    {0x92980000u, 29u}, // yue -> Hant
-    {0x9298434Eu, 28u}, // yue-CN -> Hans
+    {0x92980000u, 30u}, // yue -> Hant
+    {0x9298434Eu, 29u}, // yue-CN -> Hans
     {0xA6980000u, 46u}, // yuj -> Latn
     {0xCE980000u, 46u}, // yut -> Latn
     {0xDA980000u, 46u}, // yuw -> Latn
     {0x7A610000u, 46u}, // za -> Latn
     {0x98190000u, 46u}, // zag -> Latn
-    {0xA4790000u,  1u}, // zdj -> Arab
+    {0xA4790000u,  2u}, // zdj -> Arab
     {0x80990000u, 46u}, // zea -> Latn
-    {0x9CD90000u, 88u}, // zgh -> Tfng
-    {0x7A680000u, 28u}, // zh -> Hans
-    {0x7A684155u, 29u}, // zh-AU -> Hant
-    {0x7A68424Eu, 29u}, // zh-BN -> Hant
-    {0x7A684742u, 29u}, // zh-GB -> Hant
-    {0x7A684746u, 29u}, // zh-GF -> Hant
-    {0x7A68484Bu, 29u}, // zh-HK -> Hant
-    {0x7A684944u, 29u}, // zh-ID -> Hant
-    {0x7A684D4Fu, 29u}, // zh-MO -> Hant
-    {0x7A685041u, 29u}, // zh-PA -> Hant
-    {0x7A685046u, 29u}, // zh-PF -> Hant
-    {0x7A685048u, 29u}, // zh-PH -> Hant
-    {0x7A685352u, 29u}, // zh-SR -> Hant
-    {0x7A685448u, 29u}, // zh-TH -> Hant
-    {0x7A685457u, 29u}, // zh-TW -> Hant
-    {0x7A685553u, 29u}, // zh-US -> Hant
-    {0x7A68564Eu, 29u}, // zh-VN -> Hant
-    {0xDCF90000u, 61u}, // zhx -> Nshu
+    {0x9CD90000u, 89u}, // zgh -> Tfng
+    {0x7A680000u, 29u}, // zh -> Hans
+    {0x7A684155u, 30u}, // zh-AU -> Hant
+    {0x7A68424Eu, 30u}, // zh-BN -> Hant
+    {0x7A684742u, 30u}, // zh-GB -> Hant
+    {0x7A684746u, 30u}, // zh-GF -> Hant
+    {0x7A68484Bu, 30u}, // zh-HK -> Hant
+    {0x7A684944u, 30u}, // zh-ID -> Hant
+    {0x7A684D4Fu, 30u}, // zh-MO -> Hant
+    {0x7A685041u, 30u}, // zh-PA -> Hant
+    {0x7A685046u, 30u}, // zh-PF -> Hant
+    {0x7A685048u, 30u}, // zh-PH -> Hant
+    {0x7A685352u, 30u}, // zh-SR -> Hant
+    {0x7A685448u, 30u}, // zh-TH -> Hant
+    {0x7A685457u, 30u}, // zh-TW -> Hant
+    {0x7A685553u, 30u}, // zh-US -> Hant
+    {0x7A68564Eu, 30u}, // zh-VN -> Hant
+    {0xDCF90000u, 62u}, // zhx -> Nshu
     {0x81190000u, 46u}, // zia -> Latn
     {0xCD590000u, 41u}, // zkt -> Kits
     {0xB1790000u, 46u}, // zlm -> Latn
@@ -1642,6 +1644,7 @@
     0xB48343414C61746ELLU, // den_Latn_CA
     0xC4C343414C61746ELLU, // dgr_Latn_CA
     0x91234E454C61746ELLU, // dje_Latn_NE
+    0x95834E474D656466LLU, // dmf_Medf_NG
     0xA5A343494C61746ELLU, // dnj_Latn_CI
     0xA1C3494E44657661LLU, // doi_Deva_IN
     0x9E23434E4D6F6E67LLU, // drh_Mong_CN
@@ -1917,8 +1920,6 @@
     0x6D684D484C61746ELLU, // mh_Latn_MH
     0x6D694E5A4C61746ELLU, // mi_Latn_NZ
     0xB50C49444C61746ELLU, // min_Latn_ID
-    0xC90C495148617472LLU, // mis_Hatr_IQ
-    0xC90C4E474D656466LLU, // mis_Medf_NG
     0x6D6B4D4B4379726CLLU, // mk_Cyrl_MK
     0x6D6C494E4D6C796DLLU, // ml_Mlym_IN
     0xC96C53444C61746ELLU, // mls_Latn_SD
@@ -2174,6 +2175,7 @@
     0x747950464C61746ELLU, // ty_Latn_PF
     0xD71352554379726CLLU, // tyv_Cyrl_RU
     0xB3334D414C61746ELLU, // tzm_Latn_MA
+    0xA074525541676862LLU, // udi_Aghb_RU
     0xB07452554379726CLLU, // udm_Cyrl_RU
     0x7567434E41726162LLU, // ug_Arab_CN
     0x75674B5A4379726CLLU, // ug_Cyrl_KZ
@@ -2382,6 +2384,8 @@
     {0x65735553u, 0x6573A424u}, // es-US -> es-419
     {0x65735559u, 0x6573A424u}, // es-UY -> es-419
     {0x65735645u, 0x6573A424u}, // es-VE -> es-419
+    {0x6E620000u, 0x6E6F0000u}, // nb -> no
+    {0x6E6E0000u, 0x6E6F0000u}, // nn -> no
     {0x7074414Fu, 0x70745054u}, // pt-AO -> pt-PT
     {0x70744348u, 0x70745054u}, // pt-CH -> pt-PT
     {0x70744356u, 0x70745054u}, // pt-CV -> pt-PT
diff --git a/libs/androidfw/PosixUtils.cpp b/libs/androidfw/PosixUtils.cpp
index 4ec525a..0269128 100644
--- a/libs/androidfw/PosixUtils.cpp
+++ b/libs/androidfw/PosixUtils.cpp
@@ -114,10 +114,10 @@
       std::unique_ptr<ProcResult> result(new ProcResult());
       result->status = status;
       const auto out = ReadFile(stdout[0]);
-      result->stdout = out ? *out : "";
+      result->stdout_str = out ? *out : "";
       close(stdout[0]);
       const auto err = ReadFile(stderr[0]);
-      result->stderr = err ? *err : "";
+      result->stderr_str = err ? *err : "";
       close(stderr[0]);
       return result;
   }
diff --git a/libs/androidfw/include/androidfw/PosixUtils.h b/libs/androidfw/include/androidfw/PosixUtils.h
index 8fc3ee2..bb20847 100644
--- a/libs/androidfw/include/androidfw/PosixUtils.h
+++ b/libs/androidfw/include/androidfw/PosixUtils.h
@@ -23,8 +23,8 @@
 
 struct ProcResult {
   int status;
-  std::string stdout;
-  std::string stderr;
+  std::string stdout_str;
+  std::string stderr_str;
 };
 
 // Fork, exec and wait for an external process. Return nullptr if the process could not be launched,
diff --git a/libs/androidfw/tests/PosixUtils_test.cpp b/libs/androidfw/tests/PosixUtils_test.cpp
index cf97f87..c7b3eba 100644
--- a/libs/androidfw/tests/PosixUtils_test.cpp
+++ b/libs/androidfw/tests/PosixUtils_test.cpp
@@ -30,14 +30,14 @@
   const auto result = ExecuteBinary({"/bin/date", "--help"});
   ASSERT_THAT(result, NotNull());
   ASSERT_EQ(result->status, 0);
-  ASSERT_EQ(result->stdout.find("usage: date "), 0);
+  ASSERT_EQ(result->stdout_str.find("usage: date "), 0);
 }
 
 TEST(PosixUtilsTest, RelativePathToBinary) {
   const auto result = ExecuteBinary({"date", "--help"});
   ASSERT_THAT(result, NotNull());
   ASSERT_EQ(result->status, 0);
-  ASSERT_EQ(result->stdout.find("usage: date "), 0);
+  ASSERT_EQ(result->stdout_str.find("usage: date "), 0);
 }
 
 TEST(PosixUtilsTest, BadParameters) {
diff --git a/media/OWNERS b/media/OWNERS
index abfc8bf..0aff43e 100644
--- a/media/OWNERS
+++ b/media/OWNERS
@@ -1,8 +1,7 @@
-chz@google.com
+# Bug component: 1344
 elaurent@google.com
 essick@google.com
 etalvala@google.com
-gkasten@google.com
 hdmoon@google.com
 hkuang@google.com
 hunga@google.com
@@ -13,16 +12,13 @@
 jsharkey@android.com
 klhyun@google.com
 lajos@google.com
-marcone@google.com
 nchalko@google.com
 philburk@google.com
 quxiangfang@google.com
 wonsik@google.com
 
-# LON
-andrewlewis@google.com
-aquilescanta@google.com
-olly@google.com
+# go/android-fwk-media-solutions for info on areas of ownership.
+include platform/frameworks/av:/media/janitors/media_solutions_OWNERS
 
 # SEO
 sungsoo@google.com
diff --git a/media/java/android/media/OWNERS b/media/java/android/media/OWNERS
index cf06fad..813dee3 100644
--- a/media/java/android/media/OWNERS
+++ b/media/java/android/media/OWNERS
@@ -1,9 +1,9 @@
 # Bug component: 1344
-
 fgoldfain@google.com
 elaurent@google.com
 lajos@google.com
-olly@google.com
-andrewlewis@google.com
 sungsoo@google.com
 jmtrivi@google.com
+
+# go/android-fwk-media-solutions for info on areas of ownership.
+include platform/frameworks/av:/media/janitors/media_solutions_OWNERS
diff --git a/media/jni/OWNERS b/media/jni/OWNERS
index f1b0237..445672b 100644
--- a/media/jni/OWNERS
+++ b/media/jni/OWNERS
@@ -2,4 +2,4 @@
 per-file android_mtp_*.cpp=marcone@google.com,jsharkey@android.com,jameswei@google.com,rmojumder@google.com
 
 # extra for TV related files
-per-file android_media_tv_*=nchalko@google.com,quxiangfang@google.com
+per-file android_media_tv_*=hgchen@google.com,quxiangfang@google.com
diff --git a/mms/OWNERS b/mms/OWNERS
index befc320..7f05a2a 100644
--- a/mms/OWNERS
+++ b/mms/OWNERS
@@ -2,7 +2,6 @@
 
 tgunn@google.com
 breadley@google.com
-hallliu@google.com
 rgreenwalt@google.com
 amitmahajan@google.com
 fionaxu@google.com
@@ -10,7 +9,10 @@
 jminjie@google.com
 satk@google.com
 shuoq@google.com
-refuhoo@google.com
 nazaninb@google.com
 sarahchin@google.com
-dbright@google.com
\ No newline at end of file
+xiaotonj@google.com
+huiwang@google.com
+jayachandranc@google.com
+chinmayd@google.com
+amruthr@google.com
diff --git a/packages/CarrierDefaultApp/OWNERS b/packages/CarrierDefaultApp/OWNERS
index 5668840..0d23f05 100644
--- a/packages/CarrierDefaultApp/OWNERS
+++ b/packages/CarrierDefaultApp/OWNERS
@@ -1,7 +1,6 @@
 set noparent
 tgunn@google.com
 breadley@google.com
-hallliu@google.com
 rgreenwalt@google.com
 amitmahajan@google.com
 fionaxu@google.com
@@ -9,9 +8,11 @@
 jminjie@google.com
 satk@google.com
 shuoq@google.com
-refuhoo@google.com
 nazaninb@google.com
 sarahchin@google.com
-dbright@google.com
 xiaotonj@google.com
+huiwang@google.com
+jayachandranc@google.com
+chinmayd@google.com
+amruthr@google.com
 
diff --git a/packages/DynamicSystemInstallationService/AndroidManifest.xml b/packages/DynamicSystemInstallationService/AndroidManifest.xml
index b4d520d..1bc4983 100644
--- a/packages/DynamicSystemInstallationService/AndroidManifest.xml
+++ b/packages/DynamicSystemInstallationService/AndroidManifest.xml
@@ -33,6 +33,10 @@
             <intent-filter>
                 <action android:name="android.os.image.action.START_INSTALL" />
                 <category android:name="android.intent.category.DEFAULT" />
+                <data android:scheme="content" />
+                <data android:scheme="file" />
+                <data android:scheme="http" />
+                <data android:scheme="https" />
             </intent-filter>
         </activity>
 
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 11d1b0a..087275e 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -322,6 +322,11 @@
                 return true;
             }
 
+            if (TextUtils.equals(Environment.DIRECTORY_ANDROID.toLowerCase(),
+                    path.toLowerCase())) {
+                return true;
+            }
+
             return false;
         } catch (IOException e) {
             throw new IllegalArgumentException(
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 12a94e1..00cc753 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -81,7 +81,6 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Locale;
@@ -786,35 +785,6 @@
         return mIsHearingAidProfileSupported;
     }
 
-    @Override
-    /** @hide */
-    public java.util.List<String> getSystemConfigEnabledProfilesForPackage(String packageName) {
-        if (Binder.getCallingUid() != Process.BLUETOOTH_UID) {
-            Slog.w(TAG, "getSystemConfigEnabledProfilesForPackage(): not allowed for non-bluetooth");
-            return null;
-        }
-
-        SystemConfig systemConfig = SystemConfig.getInstance();
-        if (systemConfig == null) {
-            return null;
-        }
-
-        android.util.ArrayMap<String, Boolean> componentEnabledStates =
-                systemConfig.getComponentsEnabledStates(packageName);
-        if (componentEnabledStates == null) {
-            return null;
-        }
-
-        ArrayList enabledProfiles = new ArrayList<String>();
-        for (Map.Entry<String, Boolean> entry : componentEnabledStates.entrySet()) {
-            if (entry.getValue()) {
-                enabledProfiles.add(entry.getKey());
-            }
-        }
-
-        return enabledProfiles;
-    }
-
     private boolean isDeviceProvisioned() {
         return Settings.Global.getInt(mContentResolver, Settings.Global.DEVICE_PROVISIONED,
                 0) != 0;
@@ -2430,7 +2400,8 @@
         try {
             foregroundUser = ActivityManager.getCurrentUser();
             valid = (callingUser == foregroundUser) || parentUser == foregroundUser
-                    || callingAppId == Process.NFC_UID || callingAppId == mSystemUiUid;
+                    || callingAppId == Process.NFC_UID || callingAppId == mSystemUiUid
+                    || callingAppId == Process.SHELL_UID;
             if (DBG && !valid) {
                 Slog.d(TAG, "checkIfCallerIsForegroundUser: valid=" + valid + " callingUser="
                         + callingUser + " parentUser=" + parentUser + " foregroundUser="
@@ -2456,6 +2427,16 @@
         mContext.sendBroadcastAsUser(intent, UserHandle.ALL, BLUETOOTH_PERM);
     }
 
+    private boolean isBleState(int state) {
+        switch (state) {
+            case BluetoothAdapter.STATE_BLE_ON:
+            case BluetoothAdapter.STATE_BLE_TURNING_ON:
+            case BluetoothAdapter.STATE_BLE_TURNING_OFF:
+                return true;
+        }
+        return false;
+    }
+
     private void bluetoothStateChangeHandler(int prevState, int newState) {
         boolean isStandardBroadcast = true;
         if (prevState == newState) { // No change. Nothing to do.
@@ -2474,8 +2455,15 @@
                 sendBluetoothServiceDownCallback();
                 unbindAndFinish();
                 sendBleStateChanged(prevState, newState);
-                // Don't broadcast as it has already been broadcast before
-                isStandardBroadcast = false;
+
+                /* Currently, the OFF intent is broadcasted externally only when we transition
+                 * from TURNING_OFF to BLE_ON state. So if the previous state is a BLE state,
+                 * we are guaranteed that the OFF intent has been broadcasted earlier and we
+                 * can safely skip it.
+                 * Conversely, if the previous state is not a BLE state, it indicates that some
+                 * sort of crash has occurred, moving us directly to STATE_OFF without ever
+                 * passing through BLE_ON. We should broadcast the OFF intent in this case. */
+                isStandardBroadcast = !isBleState(prevState);
 
             } else if (!intermediate_off) {
                 // connect to GattService
@@ -2528,6 +2516,11 @@
                 // Show prevState of BLE_ON as OFF to standard users
                 prevState = BluetoothAdapter.STATE_OFF;
             }
+            if (DBG) {
+                Slog.d(TAG,
+                        "Sending State Change: " + BluetoothAdapter.nameForState(prevState) + " > "
+                                + BluetoothAdapter.nameForState(newState));
+            }
             Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED);
             intent.putExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, prevState);
             intent.putExtra(BluetoothAdapter.EXTRA_STATE, newState);
diff --git a/services/core/java/com/android/server/VpnManagerService.java b/services/core/java/com/android/server/VpnManagerService.java
index 26ecee8..d483f18 100644
--- a/services/core/java/com/android/server/VpnManagerService.java
+++ b/services/core/java/com/android/server/VpnManagerService.java
@@ -38,6 +38,7 @@
 import android.net.VpnService;
 import android.net.util.NetdService;
 import android.os.Binder;
+import android.os.Build;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.INetworkManagementService;
@@ -348,9 +349,18 @@
     /**
      * Start legacy VPN, controlling native daemons as needed. Creates a
      * secondary thread to perform connection work, returning quickly.
+     *
+     * Legacy VPN is deprecated starting from Android S. So this API shouldn't be called if the
+     * initial SDK version of device is Android S+. Otherwise, UnsupportedOperationException will be
+     * thrown.
      */
+    @SuppressWarnings("AndroidFrameworkCompatChange")  // This is not an app-visible API.
     @Override
     public void startLegacyVpn(VpnProfile profile) {
+        if (Build.VERSION.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.S
+                && VpnProfile.isLegacyType(profile.type)) {
+            throw new UnsupportedOperationException("Legacy VPN is deprecated");
+        }
         int user = UserHandle.getUserId(mDeps.getCallingUid());
         // Note that if the caller is not system (uid >= Process.FIRST_APPLICATION_UID),
         // the code might not work well since getActiveNetwork might return null if the uid is
diff --git a/services/core/java/com/android/server/adb/AdbDebuggingManager.java b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
index ed83a64..bfc4fe7 100644
--- a/services/core/java/com/android/server/adb/AdbDebuggingManager.java
+++ b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
@@ -1362,7 +1362,10 @@
                 if (args.length > 1) {
                     hostname = args[1];
                 }
-                PairDevice device = new PairDevice(fingerprints, hostname, false);
+                PairDevice device = new PairDevice();
+                device.name = fingerprints;
+                device.guid = hostname;
+                device.connected = false;
                 intent.putExtra(AdbManager.WIRELESS_PAIR_DEVICE_EXTRA, device);
                 mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
                 // Add the key into the keystore
@@ -1844,8 +1847,11 @@
                 if (args.length > 1) {
                     hostname = args[1];
                 }
-                pairedDevices.put(keyEntry.getKey(), new PairDevice(
-                        hostname, fingerprints, mWifiConnectedKeys.contains(keyEntry.getKey())));
+                PairDevice pairDevice = new PairDevice();
+                pairDevice.name = hostname;
+                pairDevice.guid = fingerprints;
+                pairDevice.connected = mWifiConnectedKeys.contains(keyEntry.getKey());
+                pairedDevices.put(keyEntry.getKey(), pairDevice);
             }
             return pairedDevices;
         }
diff --git a/services/core/java/com/android/server/adb/AdbService.java b/services/core/java/com/android/server/adb/AdbService.java
index 29bb542..7a4d2ce 100644
--- a/services/core/java/com/android/server/adb/AdbService.java
+++ b/services/core/java/com/android/server/adb/AdbService.java
@@ -27,6 +27,8 @@
 import android.debug.AdbManager;
 import android.debug.AdbManagerInternal;
 import android.debug.AdbTransportType;
+import android.debug.FingerprintAndPairDevice;
+import android.debug.IAdbCallback;
 import android.debug.IAdbManager;
 import android.debug.IAdbTransport;
 import android.debug.PairDevice;
@@ -35,6 +37,7 @@
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
+import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -87,6 +90,7 @@
     private final AdbConnectionPortListener mPortListener = new AdbConnectionPortListener();
     private AdbDebuggingManager.AdbConnectionPortPoller mConnectionPortPoller;
 
+    private final RemoteCallbackList<IAdbCallback> mCallbacks = new RemoteCallbackList<>();
     /**
      * Manages the service lifecycle for {@code AdbService} in {@code SystemServer}.
      */
@@ -348,12 +352,21 @@
     }
 
     @Override
-    public Map<String, PairDevice> getPairedDevices() {
+    public FingerprintAndPairDevice[] getPairedDevices() {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
-        if (mDebuggingManager != null) {
-            return mDebuggingManager.getPairedDevices();
+        if (mDebuggingManager == null) {
+            return null;
         }
-        return null;
+        Map<String, PairDevice> map = mDebuggingManager.getPairedDevices();
+        FingerprintAndPairDevice[] ret = new FingerprintAndPairDevice[map.size()];
+        int i = 0;
+        for (Map.Entry<String, PairDevice> entry : map.entrySet()) {
+            ret[i] = new FingerprintAndPairDevice();
+            ret[i].keyFingerprint = entry.getKey();
+            ret[i].device = entry.getValue();
+            i++;
+        }
+        return ret;
     }
 
     @Override
@@ -401,6 +414,21 @@
         return mConnectionPort.get();
     }
 
+    @Override
+    public void registerCallback(IAdbCallback callback) throws RemoteException {
+        if (DEBUG) {
+            Slog.d(TAG, "Registering callback " + callback);
+        }
+        mCallbacks.register(callback);
+    }
+
+    @Override
+    public void unregisterCallback(IAdbCallback callback) throws RemoteException {
+        if (DEBUG) {
+            Slog.d(TAG, "Unregistering callback " + callback);
+        }
+        mCallbacks.unregister(callback);
+    }
     /**
      * This listener is only used when ro.adb.secure=0. Otherwise, AdbDebuggingManager will
      * do this.
@@ -507,6 +535,23 @@
         if (mDebuggingManager != null) {
             mDebuggingManager.setAdbEnabled(enable, transportType);
         }
+
+        if (DEBUG) {
+            Slog.d(TAG, "Broadcasting enable = " + enable + ", type = " + transportType);
+        }
+        mCallbacks.broadcast((callback) -> {
+            if (DEBUG) {
+                Slog.d(TAG, "Sending enable = " + enable + ", type = " + transportType
+                        + " to " + callback);
+            }
+            try {
+                callback.onDebuggingChanged(enable, transportType);
+            } catch (RemoteException ex) {
+                if (DEBUG) {
+                    Slog.d(TAG, "Unable to send onDebuggingChanged:", ex);
+                }
+            }
+        });
     }
 
     @Override
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index b886dc1..b1ffaeb 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -935,7 +935,18 @@
     void killMisbehavingService(ServiceRecord r,
             int appUid, int appPid, String localPackageName) {
         synchronized (mAm) {
-            stopServiceLocked(r);
+            if (!r.destroying) {
+                // This service is still alive, stop it.
+                stopServiceLocked(r);
+            } else {
+                // Check if there is another instance of it being started in parallel,
+                // if so, stop that too to avoid spamming the system.
+                final ServiceMap smap = getServiceMapLocked(r.userId);
+                final ServiceRecord found = smap.mServicesByInstanceName.remove(r.instanceName);
+                if (found != null) {
+                    stopServiceLocked(found);
+                }
+            }
             mAm.crashApplication(appUid, appPid, localPackageName, -1,
                     "Bad notification for startForeground", true /*force*/);
         }
diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
index c20a01d..00dfd38 100644
--- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
+++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
@@ -84,6 +84,7 @@
         DeviceConfig.NAMESPACE_CONNECTIVITY,
         DeviceConfig.NAMESPACE_INPUT_NATIVE_BOOT,
         DeviceConfig.NAMESPACE_INTELLIGENCE_CONTENT_SUGGESTIONS,
+        DeviceConfig.NAMESPACE_LMKD_NATIVE,
         DeviceConfig.NAMESPACE_MEDIA_NATIVE,
         DeviceConfig.NAMESPACE_NETD_NATIVE,
         DeviceConfig.NAMESPACE_PROFCOLLECT_NATIVE_BOOT,
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index 26f5c4c..cd3d27d 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -1648,10 +1648,9 @@
             return;
         }
         Log.w(TAG, "Speaker client died");
-        if (removeCommunicationRouteClient(client.getBinder(), false)
-                != null) {
-            onUpdateCommunicationRoute("onCommunicationRouteClientDied");
-        }
+        setCommunicationRouteForClient(
+                client.getBinder(), client.getPid(), null,
+                BtHelper.SCO_MODE_UNDEFINED, "onCommunicationRouteClientDied");
     }
 
     /**
diff --git a/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java b/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java
index f2e44ee..e7118ad 100644
--- a/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java
+++ b/services/core/java/com/android/server/broadcastradio/hal1/Tuner.java
@@ -28,10 +28,8 @@
 import android.os.RemoteException;
 import android.util.Slog;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 
 class Tuner extends ITuner.Stub {
     private static final String TAG = "BroadcastRadioService.Tuner";
@@ -292,12 +290,12 @@
     }
 
     @Override
-    public Map setParameters(Map parameters) {
+    public Map<String, String> setParameters(Map<String, String> parameters) {
         throw new UnsupportedOperationException("Not supported by HAL 1.x");
     }
 
     @Override
-    public Map getParameters(List<String> keys) {
+    public Map<String, String> getParameters(List<String> keys) {
         throw new UnsupportedOperationException("Not supported by HAL 1.x");
     }
 }
diff --git a/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java b/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java
index 7a6d964..867d5b4 100644
--- a/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java
+++ b/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java
@@ -18,12 +18,10 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.hardware.radio.ITuner;
 import android.hardware.radio.ITunerCallback;
 import android.hardware.radio.ProgramList;
 import android.hardware.radio.ProgramSelector;
 import android.hardware.radio.RadioManager;
-import android.hardware.radio.RadioMetadata;
 import android.hardware.radio.RadioTuner;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -31,7 +29,6 @@
 
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
@@ -176,7 +173,7 @@
     }
 
     @Override
-    public void onParametersUpdated(Map parameters) {
+    public void onParametersUpdated(Map<String, String> parameters) {
         Slog.e(TAG, "Not applicable for HAL 1.x");
     }
 
diff --git a/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java b/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java
index 7ab3bdd..7d8c6a4 100644
--- a/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java
+++ b/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java
@@ -299,7 +299,7 @@
     }
 
     @Override
-    public Map setParameters(Map parameters) {
+    public Map<String, String> setParameters(Map<String, String> parameters) {
         synchronized (mLock) {
             checkNotClosedLocked();
             return Convert.vendorInfoFromHal(Utils.maybeRethrow(
@@ -308,7 +308,7 @@
     }
 
     @Override
-    public Map getParameters(List<String> keys) {
+    public Map<String, String> getParameters(List<String> keys) {
         synchronized (mLock) {
             checkNotClosedLocked();
             return Convert.vendorInfoFromHal(Utils.maybeRethrow(
diff --git a/services/core/java/com/android/server/connectivity/PacProxyService.java b/services/core/java/com/android/server/connectivity/PacProxyService.java
index 0070339..b2df535 100644
--- a/services/core/java/com/android/server/connectivity/PacProxyService.java
+++ b/services/core/java/com/android/server/connectivity/PacProxyService.java
@@ -192,7 +192,7 @@
     }
 
     /**
-     * Updates the PAC Proxy Installer with current Proxy information. This is called by
+     * Updates the PAC Proxy Service with current Proxy information. This is called by
      * the ProxyTracker through PacProxyManager before a broadcast takes place to allow
      * the PacProxyService to indicate that the broadcast should not be sent and the
      * PacProxyService will trigger a new broadcast when it is ready.
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 4ee867b..097b071 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -289,8 +289,7 @@
     private String mActiveIface;
 
     /** Set of any ifaces associated with mobile networks since boot. */
-    @GuardedBy("mStatsLock")
-    private String[] mMobileIfaces = new String[0];
+    private volatile String[] mMobileIfaces = new String[0];
 
     /** Set of all ifaces currently used by traffic that does not explicitly specify a Network. */
     @GuardedBy("mStatsLock")
@@ -935,7 +934,12 @@
 
     @Override
     public String[] getMobileIfaces() {
-        return mMobileIfaces;
+        // TODO (b/192758557): Remove debug log.
+        if (ArrayUtils.contains(mMobileIfaces, null)) {
+            throw new NullPointerException(
+                    "null element in mMobileIfaces: " + Arrays.toString(mMobileIfaces));
+        }
+        return mMobileIfaces.clone();
     }
 
     @Override
@@ -1084,7 +1088,8 @@
     }
 
     @Override
-    public long getIfaceStats(String iface, int type) {
+    public long getIfaceStats(@NonNull String iface, int type) {
+        Objects.requireNonNull(iface);
         long nativeIfaceStats = nativeGetIfaceStat(iface, type, checkBpfStatsEnable());
         if (nativeIfaceStats == -1) {
             return nativeIfaceStats;
@@ -1382,7 +1387,12 @@
             }
         }
 
-        mMobileIfaces = mobileIfaces.toArray(new String[mobileIfaces.size()]);
+        mMobileIfaces = mobileIfaces.toArray(new String[0]);
+        // TODO (b/192758557): Remove debug log.
+        if (ArrayUtils.contains(mMobileIfaces, null)) {
+            throw new NullPointerException(
+                    "null element in mMobileIfaces: " + Arrays.toString(mMobileIfaces));
+        }
     }
 
     private static int getSubIdForMobile(@NonNull NetworkStateSnapshot state) {
diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java
index 378405f..f6f3db3 100644
--- a/services/core/java/com/android/server/pm/ApexManager.java
+++ b/services/core/java/com/android/server/pm/ApexManager.java
@@ -238,6 +238,14 @@
             throws PackageManagerException;
 
     /**
+     * Returns {@code ApeInfo} about apex sessions that have been marked ready via
+     * {@link #markStagedSessionReady(int)}
+     *
+     * Returns empty array if there is no staged apex session or if there is any error.
+     */
+    abstract ApexInfo[] getStagedApexInfos(ApexSessionParams params);
+
+    /**
      * Mark a staged session previously submitted using {@code submitStagedSession} as ready to be
      * applied at next reboot.
      *
@@ -707,6 +715,19 @@
         }
 
         @Override
+        ApexInfo[] getStagedApexInfos(ApexSessionParams params) {
+            try {
+                return waitForApexService().getStagedApexInfos(params);
+            } catch (RemoteException re) {
+                Slog.w(TAG, "Unable to contact apexservice" + re.getMessage());
+                throw new RuntimeException(re);
+            } catch (Exception e) {
+                Slog.w(TAG, "Failed to collect staged apex infos" + e.getMessage());
+                return new ApexInfo[0];
+            }
+        }
+
+        @Override
         void markStagedSessionReady(int sessionId) throws PackageManagerException {
             try {
                 waitForApexService().markStagedSessionReady(sessionId);
@@ -1100,6 +1121,11 @@
         }
 
         @Override
+        ApexInfo[] getStagedApexInfos(ApexSessionParams params) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
         void markStagedSessionReady(int sessionId) {
             throw new UnsupportedOperationException();
         }
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index f8115d3..0b07bb6 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -224,6 +224,10 @@
         mStagingManager = new StagingManager(this, context, apexParserSupplier);
     }
 
+    StagingManager getStagingManager() {
+        return mStagingManager;
+    }
+
     boolean okToSendBroadcasts()  {
         return mOkToSendBroadcasts;
     }
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e4723ad..1173df6 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -21,14 +21,12 @@
 import static android.Manifest.permission.MANAGE_DEVICE_ADMINS;
 import static android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS;
 import static android.Manifest.permission.QUERY_ALL_PACKAGES;
-import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
 import static android.Manifest.permission.REQUEST_DELETE_PACKAGES;
 import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS;
 import static android.app.AppOpsManager.MODE_ALLOWED;
 import static android.app.AppOpsManager.MODE_DEFAULT;
 import static android.app.AppOpsManager.MODE_IGNORED;
 import static android.content.Intent.ACTION_MAIN;
-import static android.content.Intent.CATEGORY_BROWSABLE;
 import static android.content.Intent.CATEGORY_DEFAULT;
 import static android.content.Intent.CATEGORY_HOME;
 import static android.content.Intent.EXTRA_LONG_VERSION_CODE;
@@ -36,8 +34,6 @@
 import static android.content.Intent.EXTRA_VERSION_CODE;
 import static android.content.pm.PackageManager.CERT_INPUT_RAW_X509;
 import static android.content.pm.PackageManager.CERT_INPUT_SHA256;
-import static android.content.Intent.CATEGORY_BROWSABLE;
-import static android.content.Intent.CATEGORY_DEFAULT;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
@@ -181,6 +177,7 @@
 import android.content.pm.IPackageManagerNative;
 import android.content.pm.IPackageMoveObserver;
 import android.content.pm.IPackageStatsObserver;
+import android.content.pm.IStagedApexObserver;
 import android.content.pm.InstallSourceInfo;
 import android.content.pm.InstantAppInfo;
 import android.content.pm.InstantAppRequest;
@@ -220,6 +217,7 @@
 import android.content.pm.SharedLibraryInfo;
 import android.content.pm.Signature;
 import android.content.pm.SigningInfo;
+import android.content.pm.StagedApexInfo;
 import android.content.pm.SuspendDialogInfo;
 import android.content.pm.UserInfo;
 import android.content.pm.VerifierDeviceIdentity;
@@ -24119,6 +24117,28 @@
         public String getModuleMetadataPackageName() throws RemoteException {
             return PackageManagerService.this.mModuleInfoProvider.getPackageName();
         }
+
+        @Override
+        public void registerStagedApexObserver(IStagedApexObserver observer) {
+            mInstallerService.getStagingManager().registerStagedApexObserver(observer);
+        }
+
+        @Override
+        public void unregisterStagedApexObserver(IStagedApexObserver observer) {
+            mInstallerService.getStagingManager().unregisterStagedApexObserver(observer);
+        }
+
+        @Override
+        public String[] getStagedApexModuleNames() {
+            return mInstallerService.getStagingManager()
+                    .getStagedApexModuleNames().toArray(new String[0]);
+        }
+
+        @Override
+        @Nullable
+        public StagedApexInfo getStagedApexInfo(String moduleName) {
+            return mInstallerService.getStagingManager().getStagedApexInfo(moduleName);
+        }
     }
 
     private class PackageManagerInternalImpl extends PackageManagerInternal {
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index 4038bf2..02397da 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -29,7 +29,9 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentSender;
+import android.content.pm.ApexStagedEvent;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.IStagedApexObserver;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageInstaller;
 import android.content.pm.PackageInstaller.SessionInfo;
@@ -38,6 +40,7 @@
 import android.content.pm.PackageParser.PackageParserException;
 import android.content.pm.PackageParser.SigningDetails;
 import android.content.pm.PackageParser.SigningDetails.SignatureSchemeVersion;
+import android.content.pm.StagedApexInfo;
 import android.content.pm.parsing.PackageInfoWithoutStateUtils;
 import android.content.rollback.IRollbackManager;
 import android.content.rollback.RollbackInfo;
@@ -58,6 +61,7 @@
 import android.os.storage.IStorageManager;
 import android.os.storage.StorageManager;
 import android.text.TextUtils;
+import android.util.ArrayMap;
 import android.util.IntArray;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -66,8 +70,10 @@
 import android.util.apk.ApkSignatureVerifier;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.content.PackageHelper;
 import com.android.internal.os.BackgroundThread;
+import com.android.internal.util.Preconditions;
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
 import com.android.server.SystemServiceManager;
@@ -84,7 +90,9 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
@@ -103,7 +111,8 @@
     private final ApexManager mApexManager;
     private final PowerManager mPowerManager;
     private final Context mContext;
-    private final PreRebootVerificationHandler mPreRebootVerificationHandler;
+    @VisibleForTesting
+    final PreRebootVerificationHandler mPreRebootVerificationHandler;
     private final Supplier<PackageParser2> mPackageParserSupplier;
 
     private final File mFailureReasonFile = new File("/metadata/staged-install/failure_reason.txt");
@@ -122,6 +131,9 @@
     @GuardedBy("mSuccessfulStagedSessionIds")
     private final List<Integer> mSuccessfulStagedSessionIds = new ArrayList<>();
 
+    @GuardedBy("mStagedApexObservers")
+    private final List<IStagedApexObserver> mStagedApexObservers = new ArrayList<>();
+
     StagingManager(PackageInstallerService pi, Context context,
             Supplier<PackageParser2> packageParserSupplier) {
         mPi = pi;
@@ -184,6 +196,35 @@
         mApexManager.markBootCompleted();
     }
 
+    void registerStagedApexObserver(IStagedApexObserver observer) {
+        if (observer == null) {
+            return;
+        }
+        if  (observer.asBinder() != null) {
+            try {
+                observer.asBinder().linkToDeath(new IBinder.DeathRecipient() {
+                    @Override
+                    public void binderDied() {
+                        synchronized (mStagedApexObservers) {
+                            mStagedApexObservers.remove(observer);
+                        }
+                    }
+                }, 0);
+            } catch (RemoteException re) {
+                Slog.w(TAG, re.getMessage());
+            }
+        }
+        synchronized (mStagedApexObservers) {
+            mStagedApexObservers.add(observer);
+        }
+    }
+
+    void unregisterStagedApexObserver(IStagedApexObserver observer) {
+        synchronized (mStagedApexObservers) {
+            mStagedApexObservers.remove(observer);
+        }
+    }
+
     /**
      * Validates the signature used to sign the container of the new apex package
      *
@@ -1075,6 +1116,9 @@
                     Slog.w(TAG, "Could not contact apexd to abort staged session " + sessionId);
                 }
             }
+            if (sessionContainsApex(session)) {
+                notifyStagedApexObservers();
+            }
         }
 
         // Session was successfully aborted from apexd (if required) and pre-reboot verification
@@ -1299,7 +1343,107 @@
         return session;
     }
 
-    private final class PreRebootVerificationHandler extends Handler {
+    /**
+     * Returns ApexInfo about APEX contained inside the session as a {@code Map<String, ApexInfo>},
+     * where the key of the map is the module name of the ApexInfo.
+     *
+     * Returns an empty map if there is any error.
+     */
+    @VisibleForTesting
+    @NonNull
+    Map<String, ApexInfo> getStagedApexInfos(@NonNull PackageInstallerSession session) {
+        Preconditions.checkArgument(session != null, "Session is null");
+        Preconditions.checkArgument(!session.hasParentSessionId(),
+                session.sessionId + " session has parent session");
+        Preconditions.checkArgument(sessionContainsApex(session),
+                session.sessionId + " session does not contain apex");
+
+        // Even if caller calls this method on ready session, the session could be abandoned
+        // right after this method is called.
+        if (!session.isStagedSessionReady() || session.isDestroyed()) {
+            return Collections.emptyMap();
+        }
+
+        ApexSessionParams params = new ApexSessionParams();
+        params.sessionId = session.sessionId;
+        final IntArray childSessionIds = new IntArray();
+        if (session.isMultiPackage()) {
+            for (int id : session.getChildSessionIds()) {
+                if (isApexSession(getStagedSession(id))) {
+                    childSessionIds.add(id);
+                }
+            }
+        }
+        params.childSessionIds = childSessionIds.toArray();
+
+        ApexInfo[] infos = mApexManager.getStagedApexInfos(params);
+        Map<String, ApexInfo> result = new ArrayMap<>();
+        for (ApexInfo info : infos) {
+            result.put(info.moduleName, info);
+        }
+        return result;
+    }
+
+    /**
+     * Returns apex module names of all packages that are staged ready
+     */
+    List<String> getStagedApexModuleNames() {
+        List<String> result = new ArrayList<>();
+        synchronized (mStagedSessions) {
+            for (int i = 0; i < mStagedSessions.size(); i++) {
+                final PackageInstallerSession session = mStagedSessions.valueAt(i);
+                if (!session.isStagedSessionReady() || session.isDestroyed()
+                        || session.hasParentSessionId() || !sessionContainsApex(session)) {
+                    continue;
+                }
+                result.addAll(getStagedApexInfos(session).keySet());
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Returns ApexInfo of the {@code moduleInfo} provided if it is staged, otherwise returns null.
+     */
+    @Nullable
+    StagedApexInfo getStagedApexInfo(String moduleName) {
+        synchronized (mStagedSessions) {
+            for (int i = 0; i < mStagedSessions.size(); i++) {
+                final PackageInstallerSession session = mStagedSessions.valueAt(i);
+                if (!session.isStagedSessionReady() || session.isDestroyed()
+                        || session.hasParentSessionId() || !sessionContainsApex(session)) {
+                    continue;
+                }
+                ApexInfo ai = getStagedApexInfos(session).get(moduleName);
+                if (ai != null) {
+                    StagedApexInfo info = new StagedApexInfo();
+                    info.moduleName = ai.moduleName;
+                    info.diskImagePath = ai.modulePath;
+                    info.versionCode = ai.versionCode;
+                    info.versionName = ai.versionName;
+                    return info;
+                }
+            }
+        }
+        return null;
+    }
+
+    private void notifyStagedApexObservers() {
+        synchronized (mStagedApexObservers) {
+            for (IStagedApexObserver observer : mStagedApexObservers) {
+                ApexStagedEvent event = new ApexStagedEvent();
+                event.stagedApexModuleNames = getStagedApexModuleNames().toArray(new String[0]);
+                try {
+                    observer.onApexStaged(event);
+                } catch (RemoteException re) {
+                    Slog.w(TAG, "Failed to contact the observer " + re.getMessage());
+                }
+            }
+        }
+    }
+
+    @VisibleForTesting
+    final class PreRebootVerificationHandler extends Handler {
         // Hold session ids before handler gets ready to do the verification.
         private IntArray mPendingSessionIds;
         private boolean mIsReady;
@@ -1327,7 +1471,8 @@
         private static final int MSG_PRE_REBOOT_VERIFICATION_START = 1;
         private static final int MSG_PRE_REBOOT_VERIFICATION_APEX = 2;
         private static final int MSG_PRE_REBOOT_VERIFICATION_APK = 3;
-        private static final int MSG_PRE_REBOOT_VERIFICATION_END = 4;
+        @VisibleForTesting
+        static final int MSG_PRE_REBOOT_VERIFICATION_END = 4;
 
         @Override
         public void handleMessage(Message msg) {
@@ -1579,6 +1724,7 @@
                 if (hasApex) {
                     try {
                         mApexManager.markStagedSessionReady(session.sessionId);
+                        notifyStagedApexObservers();
                     } catch (PackageManagerException e) {
                         session.setStagedSessionFailed(e.error, e.getMessage());
                         return;
diff --git a/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java b/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java
index bdcd2cd..3524d7f 100644
--- a/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java
+++ b/services/core/java/com/android/server/policy/DisplayFoldDurationLogger.java
@@ -44,8 +44,8 @@
     @Retention(RetentionPolicy.SOURCE)
     public @interface ScreenState {}
 
-    private @ScreenState int mScreenState = SCREEN_STATE_UNKNOWN;
-    private Long mLastChanged = null;
+    private volatile @ScreenState int mScreenState = SCREEN_STATE_UNKNOWN;
+    private volatile Long mLastChanged = null;
 
     private static final int LOG_SUBTYPE_UNFOLDED = 0;
     private static final int LOG_SUBTYPE_FOLDED = 1;
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 061fabf..e927667 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -3756,7 +3756,10 @@
         if (sQuiescent) {
             // Pass the optional "quiescent" argument to the bootloader to let it know
             // that it should not turn the screen/lights on.
-            reason = reason + ",quiescent";
+            if (reason != ""){
+                reason += ",";
+            }
+            reason = reason + "quiescent";
         }
 
         SystemProperties.set("sys.powerctl", "reboot," + reason);
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 5decf5e..0390015 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -3362,7 +3362,11 @@
     int pullFaceSettingsLocked(int atomTag, List<StatsEvent> pulledData) {
         final long callingToken = Binder.clearCallingIdentity();
         try {
-            List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers();
+            UserManager manager = mContext.getSystemService(UserManager.class);
+            if (manager == null) {
+                return StatsManager.PULL_SKIP;
+            }
+            List<UserInfo> users = manager.getUsers();
             int numUsers = users.size();
             FaceManager faceManager = mContext.getSystemService(FaceManager.class);
 
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 113797c..419a7fa 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1468,7 +1468,7 @@
         final Task targetTask = r.getTask() != null
                 ? r.getTask()
                 : mTargetTask;
-        if (startedActivityStack == null || targetTask == null) {
+        if (startedActivityStack == null || targetTask == null || !targetTask.isAttached()) {
             return;
         }
 
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index ddad1db..eaf7693 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -3372,7 +3372,7 @@
     }
 
     /**
-     * Find all task stacks containing {@param userId} and intercept them with an activity
+     * Find all visible task stacks containing {@param userId} and intercept them with an activity
      * to block out the contents and possibly start a credential-confirming intent.
      *
      * @param userId user handle for the locked managed profile.
@@ -3380,18 +3380,42 @@
     void lockAllProfileTasks(@UserIdInt int userId) {
         mService.deferWindowLayout();
         try {
-            forAllLeafTasks(task -> {
-                if (task.getActivity(activity -> !activity.finishing && activity.mUserId == userId)
-                        != null) {
-                    mService.getTaskChangeNotificationController().notifyTaskProfileLocked(
-                            task.mTaskId, userId);
-                }
-            }, true /* traverseTopToBottom */);
+            final PooledConsumer c = PooledLambda.obtainConsumer(
+                    RootWindowContainer::taskTopActivityIsUser, this, PooledLambda.__(Task.class),
+                    userId);
+            forAllLeafTasks(c, true /* traverseTopToBottom */);
+            c.recycle();
         } finally {
             mService.continueWindowLayout();
         }
     }
 
+    /**
+     * Detects whether we should show a lock screen in front of this task for a locked user.
+     * <p>
+     * We'll do this if either of the following holds:
+     * <ul>
+     *   <li>The top activity explicitly belongs to {@param userId}.</li>
+     *   <li>The top activity returns a result to an activity belonging to {@param userId}.</li>
+     * </ul>
+     *
+     * @return {@code true} if the top activity looks like it belongs to {@param userId}.
+     */
+    private void taskTopActivityIsUser(Task task, @UserIdInt int userId) {
+        // To handle the case that work app is in the task but just is not the top one.
+        final ActivityRecord activityRecord = task.getTopNonFinishingActivity();
+        final ActivityRecord resultTo = (activityRecord != null ? activityRecord.resultTo : null);
+
+        // Check the task for a top activity belonging to userId, or returning a
+        // result to an activity belonging to userId. Example case: a document
+        // picker for personal files, opened by a work app, should still get locked.
+        if ((activityRecord != null && activityRecord.mUserId == userId)
+                || (resultTo != null && resultTo.mUserId == userId)) {
+            mService.getTaskChangeNotificationController().notifyTaskProfileLocked(
+                    task.mTaskId, userId);
+        }
+    }
+
     void cancelInitializingActivities() {
         for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) {
             final DisplayContent display = getChildAt(displayNdx);
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index e6a35f1..1f8a437 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -908,7 +908,7 @@
                 final int displayId = r.getDisplayId();
                 final Context c = root.getDisplayUiContext(displayId);
 
-                if (r.mVisibleRequested && !displayContexts.contains(c)) {
+                if (c != null && r.mVisibleRequested && !displayContexts.contains(c)) {
                     displayContexts.add(c);
                 }
             }
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index a0c96f0..d78e02b 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -158,7 +158,7 @@
         "android.hardware.input.classifier@1.0",
         "android.hardware.ir@1.0",
         "android.hardware.light@2.0",
-        "android.hardware.memtrack-V1-ndk_platform",
+        "android.hardware.memtrack-V1-ndk",
         "android.hardware.power@1.0",
         "android.hardware.power@1.1",
         "android.hardware.power-V1-cpp",
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index d908945..5dfa86e 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -10314,7 +10314,7 @@
     }
 
     @Override
-    public boolean setPermittedAccessibilityServices(ComponentName who, List packageList) {
+    public boolean setPermittedAccessibilityServices(ComponentName who, List<String> packageList) {
         if (!mHasFeature) {
             return false;
         }
@@ -10367,7 +10367,7 @@
     }
 
     @Override
-    public List getPermittedAccessibilityServices(ComponentName who) {
+    public List<String> getPermittedAccessibilityServices(ComponentName who) {
         if (!mHasFeature) {
             return null;
         }
@@ -10381,7 +10381,7 @@
     }
 
     @Override
-    public List getPermittedAccessibilityServicesForUser(int userId) {
+    public List<String> getPermittedAccessibilityServicesForUser(int userId) {
         if (!mHasFeature) {
             return null;
         }
@@ -10465,7 +10465,7 @@
     }
 
     @Override
-    public boolean setPermittedInputMethods(ComponentName who, List packageList) {
+    public boolean setPermittedInputMethods(ComponentName who, List<String> packageList) {
         if (!mHasFeature) {
             return false;
         }
@@ -10505,7 +10505,7 @@
     }
 
     @Override
-    public List getPermittedInputMethods(ComponentName who) {
+    public List<String> getPermittedInputMethods(ComponentName who) {
         if (!mHasFeature) {
             return null;
         }
@@ -10519,7 +10519,7 @@
     }
 
     @Override
-    public List getPermittedInputMethodsForCurrentUser() {
+    public List<String> getPermittedInputMethodsForCurrentUser() {
         enforceManageUsers();
 
         final int callingUserId = mInjector.userHandleGetCallingUserId();
diff --git a/services/net/Android.bp b/services/net/Android.bp
index 5a5f504..ad445f1 100644
--- a/services/net/Android.bp
+++ b/services/net/Android.bp
@@ -52,7 +52,6 @@
         // classes generated by netd_aidl_interfaces-platform-java above.
         "netd_aidl_interface-V3-java",
         "networkstack-client",
-        "modules-utils-build_system",
     ],
     apex_available: [
         "com.android.wifi",
diff --git a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java
index 72afca0..b6f7922 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java
@@ -37,6 +37,7 @@
 import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.os.RemoteException;
+import android.os.ServiceSpecificException;
 import android.platform.test.annotations.Presubmit;
 
 import androidx.test.filters.SmallTest;
@@ -228,6 +229,21 @@
     }
 
     @Test
+    public void testGetStagedApexInfos_throwRunTimeException() throws RemoteException {
+        doThrow(RemoteException.class).when(mApexService).getStagedApexInfos(any());
+
+        assertThrows(RuntimeException.class,
+                () -> mApexManager.getStagedApexInfos(testParamsWithChildren()));
+    }
+
+    @Test
+    public void testGetStagedApexInfos_returnsEmptyArrayOnError() throws RemoteException {
+        doThrow(ServiceSpecificException.class).when(mApexService).getStagedApexInfos(any());
+
+        assertThat(mApexManager.getStagedApexInfos(testParamsWithChildren())).hasLength(0);
+    }
+
+    @Test
     public void testMarkStagedSessionReady_throwPackageManagerException() throws RemoteException {
         doAnswer(invocation -> {
             throw new Exception();
diff --git a/services/tests/servicestests/src/com/android/server/pm/OWNERS b/services/tests/servicestests/src/com/android/server/pm/OWNERS
index e15b5f5..2f51994 100644
--- a/services/tests/servicestests/src/com/android/server/pm/OWNERS
+++ b/services/tests/servicestests/src/com/android/server/pm/OWNERS
@@ -1,3 +1,7 @@
 include /services/core/java/com/android/server/pm/OWNERS
 
 per-file *Shortcut* = file:/core/java/android/content/pm/SHORTCUT_OWNERS
+
+# apex support
+per-file ApexManagerTest.java = dariofreni@google.com, ioffe@google.com, olilan@google.com
+
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
index 1aff8a7..35d1b17 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
@@ -25,7 +25,6 @@
 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
 import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
 
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
 import static com.android.server.wm.ActivityStack.ActivityState.FINISHING;
 import static com.android.server.wm.ActivityStack.ActivityState.PAUSED;
 import static com.android.server.wm.ActivityStack.ActivityState.PAUSING;
@@ -37,13 +36,10 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.verify;
 
 import android.app.WindowConfiguration;
 import android.content.ComponentName;
 import android.content.pm.ActivityInfo;
-import android.os.UserHandle;
 import android.platform.test.annotations.Presubmit;
 
 import androidx.test.filters.SmallTest;
@@ -173,34 +169,5 @@
         activity.setState(FINISHING, "test FINISHING");
         assertThat(mWm.mRoot.allPausedActivitiesComplete()).isTrue();
     }
-
-    @Test
-    public void testLockAllProfileTasks() {
-        // Make an activity visible with the user id set to 0
-        DisplayContent displayContent = mWm.mRoot.getDisplayContent(DEFAULT_DISPLAY);
-        TaskDisplayArea taskDisplayArea = displayContent.getTaskDisplayAreaAt(0);
-        final ActivityStack stack = createTaskStackOnDisplay(WINDOWING_MODE_FULLSCREEN,
-                ACTIVITY_TYPE_STANDARD, displayContent);
-        final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(stack.mAtmService)
-                .setStack(stack)
-                .setUid(0)
-                .setCreateTask(true)
-                .build();
-
-        // Create another activity on top and the user id is 1
-        Task task = activity.getTask();
-        final ActivityRecord topActivity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService)
-                .setStack(stack)
-                .setUid(UserHandle.PER_USER_RANGE + 1)
-                .setTask(task)
-                .build();
-
-        // Make sure the listeners will be notified for putting the task to locked state
-        TaskChangeNotificationController controller =
-                mWm.mAtmService.getTaskChangeNotificationController();
-        spyOn(controller);
-        mWm.mRoot.lockAllProfileTasks(0);
-        verify(controller).notifyTaskProfileLocked(eq(task.mTaskId), eq(0));
-    }
 }
 
diff --git a/telecomm/java/android/telecom/CallRedirectionService.java b/telecomm/java/android/telecom/CallRedirectionService.java
index c832f53..8dcae39 100644
--- a/telecomm/java/android/telecom/CallRedirectionService.java
+++ b/telecomm/java/android/telecom/CallRedirectionService.java
@@ -89,6 +89,13 @@
                                      boolean allowInteractiveResponse);
 
     /**
+     * Telecom calls this method when times out waiting for the {@link CallRedirectionService} to
+     * call {@link #placeCallUnmodified()}, {@link #redirectCall(Uri, PhoneAccountHandle, boolean)},
+     * or {@link #cancelCall()}
+     */
+    public void onRedirectionTimeout() {}
+
+    /**
      * The implemented {@link CallRedirectionService} calls this method to response a request
      * received via {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)} to inform Telecom that
      * no changes are required to the outgoing call, and that the call should be placed as-is.
@@ -158,6 +165,12 @@
     private static final int MSG_PLACE_CALL = 1;
 
     /**
+     * A handler message to process the attempt to notify the operation of redirection service timed
+     * out from Telecom
+     */
+    private static final int MSG_TIMEOUT = 2;
+
+    /**
      * A handler to process the attempt to place call with redirection service from Telecom
      */
     private final Handler mHandler = new Handler(Looper.getMainLooper()) {
@@ -174,6 +187,9 @@
                         args.recycle();
                     }
                     break;
+                case MSG_TIMEOUT:
+                    onRedirectionTimeout();
+                    break;
             }
         }
     };
@@ -200,6 +216,15 @@
             args.arg4 = allowInteractiveResponse;
             mHandler.obtainMessage(MSG_PLACE_CALL, args).sendToTarget();
         }
+
+        /**
+         * Telecom calls this method to inform the CallRedirectionService of the timeout waiting for
+         * it to complete its operation.
+         */
+        @Override
+        public void notifyTimeout() {
+            mHandler.obtainMessage(MSG_TIMEOUT).sendToTarget();
+        }
     }
 
     @Override
diff --git a/telecomm/java/com/android/internal/telecom/ICallRedirectionService.aidl b/telecomm/java/com/android/internal/telecom/ICallRedirectionService.aidl
index c1bc440..ce1938b 100644
--- a/telecomm/java/com/android/internal/telecom/ICallRedirectionService.aidl
+++ b/telecomm/java/com/android/internal/telecom/ICallRedirectionService.aidl
@@ -31,4 +31,6 @@
 oneway interface ICallRedirectionService {
     void placeCall(in ICallRedirectionAdapter adapter, in Uri handle,
             in PhoneAccountHandle initialPhoneAccount, boolean allowInteractiveResponse);
+
+    void notifyTimeout();
 }
diff --git a/telephony/OWNERS b/telephony/OWNERS
index 628c480..4df8a4b 100644
--- a/telephony/OWNERS
+++ b/telephony/OWNERS
@@ -4,13 +4,14 @@
 breadley@google.com
 fionaxu@google.com
 jackyu@google.com
-hallliu@google.com
 rgreenwalt@google.com
 tgunn@google.com
 jminjie@google.com
 shuoq@google.com
-refuhoo@google.com
 nazaninb@google.com
 sarahchin@google.com
-dbright@google.com
 xiaotonj@google.com
+huiwang@google.com
+jayachandranc@google.com
+chinmayd@google.com
+amruthr@google.com
diff --git a/telephony/java/android/telephony/AccessNetworkUtils.java b/telephony/java/android/telephony/AccessNetworkUtils.java
index 6b82045..b5d97ab 100644
--- a/telephony/java/android/telephony/AccessNetworkUtils.java
+++ b/telephony/java/android/telephony/AccessNetworkUtils.java
@@ -567,6 +567,10 @@
      */
     public static int getFrequencyFromNrArfcn(int nrArfcn) {
 
+        if (nrArfcn == PhysicalChannelConfig.CHANNEL_NUMBER_UNKNOWN) {
+            return PhysicalChannelConfig.FREQUENCY_UNKNOWN;
+        }
+
         int globalKhz = 0;
         int rangeOffset = 0;
         int arfcnOffset = 0;
@@ -632,6 +636,10 @@
      */
     public static int getFrequencyFromUarfcn(int band, int uarfcn, boolean isUplink) {
 
+        if (uarfcn == PhysicalChannelConfig.CHANNEL_NUMBER_UNKNOWN) {
+            return PhysicalChannelConfig.FREQUENCY_UNKNOWN;
+        }
+
         int offsetKhz = 0;
         for (UtranBandArfcnFrequency uarfcnFrequency : AccessNetworkConstants.
                 UtranBandArfcnFrequency.values()) {
@@ -702,6 +710,10 @@
      */
     public static int getFrequencyFromArfcn(int band, int arfcn, boolean isUplink) {
 
+        if (arfcn == PhysicalChannelConfig.CHANNEL_NUMBER_UNKNOWN) {
+            return PhysicalChannelConfig.FREQUENCY_UNKNOWN;
+        }
+
         int uplinkFrequencyFirst = 0;
         int arfcnOffset = 0;
         int downlinkOffset = 0;
diff --git a/telephony/java/android/telephony/PhysicalChannelConfig.java b/telephony/java/android/telephony/PhysicalChannelConfig.java
index 8a4bb46..59eac6a 100644
--- a/telephony/java/android/telephony/PhysicalChannelConfig.java
+++ b/telephony/java/android/telephony/PhysicalChannelConfig.java
@@ -337,7 +337,8 @@
     private void setUplinkFrequency() {
         switch (mNetworkType){
             case TelephonyManager.NETWORK_TYPE_NR:
-                mUplinkFrequency = mDownlinkFrequency;
+                mUplinkFrequency = AccessNetworkUtils.getFrequencyFromNrArfcn(
+                        mUplinkChannelNumber);
                 break;
             case TelephonyManager.NETWORK_TYPE_LTE:
                 mUplinkFrequency = AccessNetworkUtils.getFrequencyFromEarfcn(
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 2bbfdba..c86bedb 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -575,6 +575,13 @@
     /**
      * @hide
      */
+    public void clearGroupUuid() {
+        this.mGroupUUID = null;
+    }
+
+    /**
+     * @hide
+     */
     public List<String> getEhplmns() {
         return mEhplmns == null ? Collections.emptyList() : Arrays.asList(mEhplmns);
     }
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 9d4db17..98f9dfd 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -1827,8 +1827,9 @@
      * @param subscriptionType the {@link #SUBSCRIPTION_TYPE}
      * @hide
      */
-    public void addSubscriptionInfoRecord(String uniqueId, String displayName, int slotIndex,
-            int subscriptionType) {
+    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
+    public void addSubscriptionInfoRecord(@NonNull String uniqueId, @Nullable String displayName,
+            int slotIndex, int subscriptionType) {
         if (VDBG) {
             logd("[addSubscriptionInfoRecord]+ uniqueId:" + uniqueId
                     + ", displayName:" + displayName + ", slotIndex:" + slotIndex
@@ -1863,7 +1864,8 @@
      * @param subscriptionType the {@link #SUBSCRIPTION_TYPE}
      * @hide
      */
-    public void removeSubscriptionInfoRecord(String uniqueId, int subscriptionType) {
+    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
+    public void removeSubscriptionInfoRecord(@NonNull String uniqueId, int subscriptionType) {
         if (VDBG) {
             logd("[removeSubscriptionInfoRecord]+ uniqueId:" + uniqueId
                     + ", subscriptionType: " + subscriptionType);
diff --git a/telephony/java/android/telephony/mbms/IMbmsGroupCallSessionCallback.aidl b/telephony/java/android/telephony/mbms/IMbmsGroupCallSessionCallback.aidl
index 1a1c7f8..43273a4 100755
--- a/telephony/java/android/telephony/mbms/IMbmsGroupCallSessionCallback.aidl
+++ b/telephony/java/android/telephony/mbms/IMbmsGroupCallSessionCallback.aidl
@@ -25,6 +25,7 @@
 {
     void onError(int errorCode, String message);
 
+    @SuppressWarnings(value={"untyped-collection"})
     void onAvailableSaisUpdated(in List currentSai, in List availableSais);
 
     void onServiceInterfaceAvailable(String interfaceName, int index);
diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsGroupCallService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsGroupCallService.aidl
index 44cc24a..6e139ac 100755
--- a/telephony/java/android/telephony/mbms/vendor/IMbmsGroupCallService.aidl
+++ b/telephony/java/android/telephony/mbms/vendor/IMbmsGroupCallService.aidl
@@ -29,9 +29,11 @@
 
     void stopGroupCall(int subId, long tmgi);
 
+    @SuppressWarnings(value={"untyped-collection"})
     void updateGroupCall(int subscriptionId, long tmgi, in List saiList,
         in List frequencyList);
 
+    @SuppressWarnings(value={"untyped-collection"})
     int startGroupCall(int subscriptionId, long tmgi, in List saiList,
         in List frequencyList, IGroupCallCallback callback);
 
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 9b2f119..ae5f997 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1961,6 +1961,7 @@
     /**
      * Return the emergency number list from all the active subscriptions.
      */
+    @SuppressWarnings(value={"untyped-collection"})
     Map getEmergencyNumberList(String callingPackage, String callingFeatureId);
 
     /**
diff --git a/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java b/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
index 4ecca2d..cf56586 100644
--- a/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
+++ b/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
@@ -31,6 +31,8 @@
     private static final String SYSTEM_SERVER_PROFILE =
             "/data/misc/profiles/cur/0/android/primary.prof";
     private static final boolean USE_PHENOTYPE = false;
+    private static final String DALVIK_VM_EXTRA_OPTS =
+            "-Xusejit:false -Xint -Xjitsaveprofilinginfo";
 
     @Override
     public void setDevice(ITestDevice testDevice) {
@@ -54,10 +56,10 @@
     private String setProperty(String property, String value) throws Exception {
         if (USE_PHENOTYPE) {
             return mTestDevice.executeShellCommand(
-                "device_config put runtime_native_boot " + property + " " + value);
+                String.format("device_config put runtime_native_boot %s '%s'", property, value));
         } else {
             return mTestDevice.executeShellCommand(
-                "setprop dalvik.vm." + property + " " + value);
+                String.format("setprop dalvik.vm.%s '%s'", property, value));
         }
     }
 
@@ -69,6 +71,8 @@
         assertTrue("profile boot class path not enabled: " + res, "true".equals(res));
         res = getProperty("profilesystemserver");
         assertTrue("profile system server not enabled: " + res, "true".equals(res));
+        res = getProperty("extra-opts");
+        assertTrue("extra options not set: " + res, DALVIK_VM_EXTRA_OPTS.equals(res));
     }
 
     private boolean forceSaveProfile(String pkg) throws Exception {
@@ -91,16 +95,20 @@
             boolean profileBootClassPath = "true".equals(pbcp);
             String pss = getProperty("profilesystemserver");
             boolean profileSystemServer = "true".equals(pss);
-            if (profileBootClassPath && profileSystemServer) {
+            String extraOpts = getProperty("extra-opts");
+            boolean extraOptsOk = DALVIK_VM_EXTRA_OPTS.equals(extraOpts);
+            if (profileBootClassPath && profileSystemServer && extraOptsOk) {
                 break;
             }
             if (i == numIterations) {
                 assertTrue("profile system server not enabled: " + pss, profileSystemServer);
                 assertTrue("profile boot class path not enabled: " + pbcp, profileBootClassPath);
+                assertTrue("extra options not set: " + extraOpts, extraOptsOk);
             }
 
             setProperty("profilebootclasspath", "true");
             setProperty("profilesystemserver", "true");
+            setProperty("extra-opts", DALVIK_VM_EXTRA_OPTS);
             Thread.sleep(1000);
         }
 
@@ -114,12 +122,15 @@
             boolean profileBootClassPath = "true".equals(pbcp);
             String pss = getProperty("profilesystemserver");
             boolean profileSystemServer = "true".equals(pss);
+            String extraOpts = getProperty("extra-opts");
+            boolean extraOptsOk = DALVIK_VM_EXTRA_OPTS.equals(extraOpts);
             if (profileBootClassPath && profileSystemServer) {
                 break;
             }
             if (i == numIterations) {
                 assertTrue("profile system server not enabled: " + pss, profileSystemServer);
                 assertTrue("profile boot class path not enabled: " + pbcp, profileBootClassPath);
+                assertTrue("extra options not set: " + extraOpts, extraOptsOk);
             }
             Thread.sleep(1000);
         }
diff --git a/tests/StagedInstallTest/Android.bp b/tests/StagedInstallTest/Android.bp
index 243c301..840a588 100644
--- a/tests/StagedInstallTest/Android.bp
+++ b/tests/StagedInstallTest/Android.bp
@@ -25,14 +25,24 @@
     name: "StagedInstallInternalTestApp",
     manifest: "app/AndroidManifest.xml",
     srcs: ["app/src/**/*.java"],
-    static_libs: ["androidx.test.rules", "cts-install-lib"],
+    static_libs: [
+        "androidx.test.rules",
+        "cts-install-lib",
+    ],
     test_suites: ["general-tests"],
+    java_resources: [
+        ":StagedInstallTestApexV2",
+    ],
+    platform_apis: true,
 }
 
 java_test_host {
     name: "StagedInstallInternalTest",
     srcs: ["src/**/*.java"],
-    libs: ["tradefed", "cts-shim-host-lib"],
+    libs: [
+        "tradefed",
+        "cts-shim-host-lib",
+    ],
     static_libs: [
         "testng",
         "compatibility-tradefed",
diff --git a/tests/StagedInstallTest/app/src/com/android/tests/stagedinstallinternal/StagedInstallInternalTest.java b/tests/StagedInstallTest/app/src/com/android/tests/stagedinstallinternal/StagedInstallInternalTest.java
index e673549..a0f4e0a 100644
--- a/tests/StagedInstallTest/app/src/com/android/tests/stagedinstallinternal/StagedInstallInternalTest.java
+++ b/tests/StagedInstallTest/app/src/com/android/tests/stagedinstallinternal/StagedInstallInternalTest.java
@@ -17,12 +17,24 @@
 package com.android.tests.stagedinstallinternal;
 
 import static com.android.cts.install.lib.InstallUtils.getPackageInstaller;
+import static com.android.cts.install.lib.InstallUtils.waitForSessionReady;
+import static com.android.cts.shim.lib.ShimPackage.SHIM_APEX_PACKAGE_NAME;
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.verify;
+
 import android.Manifest;
+import android.content.pm.ApexStagedEvent;
+import android.content.pm.IPackageManagerNative;
+import android.content.pm.IStagedApexObserver;
 import android.content.pm.PackageInstaller;
+import android.content.pm.StagedApexInfo;
+import android.os.IBinder;
+import android.os.ServiceManager;
 
 import androidx.test.platform.app.InstrumentationRegistry;
 
@@ -35,6 +47,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -50,6 +64,10 @@
 
     private static final String TAG = StagedInstallInternalTest.class.getSimpleName();
 
+    private static final TestApp APEX_V2 = new TestApp(
+            "ApexV2", SHIM_APEX_PACKAGE_NAME, 2, /* isApex= */ true,
+            "com.android.apex.cts.shim.v2.apex");
+
     private File mTestStateFile = new File(
             InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
             "stagedinstall_state");
@@ -109,6 +127,72 @@
                 Install.multi(TestApp.AIncompleteSplit, TestApp.B1, TestApp.Apex1).setStaged());
     }
 
+    @Test
+    public void testGetStagedModuleNames() throws Exception {
+        // Before staging a session
+        String[] result = getPackageManagerNative().getStagedApexModuleNames();
+        assertThat(result).hasLength(0);
+        // Stage an apex
+        int sessionId = Install.single(APEX_V2).setStaged().commit();
+        waitForSessionReady(sessionId);
+        result = getPackageManagerNative().getStagedApexModuleNames();
+        assertThat(result).hasLength(1);
+        assertThat(result).isEqualTo(new String[]{SHIM_APEX_PACKAGE_NAME});
+        // Abandon the session
+        InstallUtils.openPackageInstallerSession(sessionId).abandon();
+        result = getPackageManagerNative().getStagedApexModuleNames();
+        assertThat(result).hasLength(0);
+    }
+
+    @Test
+    public void testGetStagedApexInfo() throws Exception {
+        // Ask for non-existing module
+        StagedApexInfo result = getPackageManagerNative().getStagedApexInfo("not found");
+        assertThat(result).isNull();
+        // Stage an apex
+        int sessionId = Install.single(APEX_V2).setStaged().commit();
+        waitForSessionReady(sessionId);
+        // Query proper module name
+        result = getPackageManagerNative().getStagedApexInfo(SHIM_APEX_PACKAGE_NAME);
+        assertThat(result.moduleName).isEqualTo(SHIM_APEX_PACKAGE_NAME);
+        InstallUtils.openPackageInstallerSession(sessionId).abandon();
+    }
+
+    public static class MockStagedApexObserver extends IStagedApexObserver.Stub {
+        @Override
+        public void onApexStaged(ApexStagedEvent event) {
+            assertThat(event).isNotNull();
+        }
+    }
+
+    @Test
+    public void testStagedApexObserver() throws Exception {
+        MockStagedApexObserver realObserver = new MockStagedApexObserver();
+        IStagedApexObserver observer = spy(realObserver);
+        assertThat(observer).isNotNull();
+        getPackageManagerNative().registerStagedApexObserver(observer);
+
+        // Stage an apex and verify observer was called
+        int sessionId = Install.single(APEX_V2).setStaged().commit();
+        waitForSessionReady(sessionId);
+        ArgumentCaptor<ApexStagedEvent> captor = ArgumentCaptor.forClass(ApexStagedEvent.class);
+        verify(observer, timeout(5000)).onApexStaged(captor.capture());
+        assertThat(captor.getValue().stagedApexModuleNames).isEqualTo(
+                new String[] {SHIM_APEX_PACKAGE_NAME});
+
+        // Abandon and verify observer is called
+        Mockito.clearInvocations(observer);
+        InstallUtils.openPackageInstallerSession(sessionId).abandon();
+        verify(observer, timeout(5000)).onApexStaged(captor.capture());
+        assertThat(captor.getValue().stagedApexModuleNames).hasLength(0);
+    }
+
+    private IPackageManagerNative getPackageManagerNative() {
+        IBinder binder = ServiceManager.waitForService("package_native");
+        assertThat(binder).isNotNull();
+        return IPackageManagerNative.Stub.asInterface(binder);
+    }
+
     private static void assertSessionReady(int sessionId) {
         assertSessionState(sessionId,
                 (session) -> assertThat(session.isStagedSessionReady()).isTrue());
diff --git a/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java b/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java
index dddb317..f92c31c 100644
--- a/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java
+++ b/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java
@@ -216,6 +216,21 @@
         assertThat(getStagingDirectories()).isEmpty();
     }
 
+    @Test
+    public void testGetStagedModuleNames() throws Exception {
+        runPhase("testGetStagedModuleNames");
+    }
+
+    @Test
+    public void testGetStagedApexInfo() throws Exception {
+        runPhase("testGetStagedApexInfo");
+    }
+
+    @Test
+    public void testStagedApexObserver() throws Exception {
+        runPhase("testStagedApexObserver");
+    }
+
     private List<String> getStagingDirectories() throws DeviceNotAvailableException {
         String baseDir = "/data/app-staging";
         try {
diff --git a/tools/aapt/AaptAssets.cpp b/tools/aapt/AaptAssets.cpp
index 672731c..899d268 100644
--- a/tools/aapt/AaptAssets.cpp
+++ b/tools/aapt/AaptAssets.cpp
@@ -319,12 +319,10 @@
 
             // The second subtag can either be a script or a region code.
             // If its size is 4, it's a script code, else it's a region code.
-            bool hasRegion = false;
             if (subtags[1].size() == 4) {
                 setScript(subtags[1]);
             } else if (subtags[1].size() == 2 || subtags[1].size() == 3) {
                 setRegion(subtags[1]);
-                hasRegion = true;
             } else {
                 fprintf(stderr, "ERROR: Invalid BCP 47 tag in directory name %s\n", part.string());
                 return -1;
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 257e96b..b9de11b 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -2475,11 +2475,10 @@
 {
     if (accessorCookie != NULL && fmt != NULL) {
         AccessorCookie* ac = (AccessorCookie*)accessorCookie;
-        int retval=0;
         char buf[1024];
         va_list ap;
         va_start(ap, fmt);
-        retval = vsnprintf(buf, sizeof(buf), fmt, ap);
+        vsnprintf(buf, sizeof(buf), fmt, ap);
         va_end(ap);
         ac->sourcePos.error("Error: %s (at '%s' with value '%s').\n",
                             buf, ac->attr.string(), ac->value.string());
diff --git a/tools/aapt2/SdkConstants.cpp b/tools/aapt2/SdkConstants.cpp
index 7546e41..ca1c1c2 100644
--- a/tools/aapt2/SdkConstants.cpp
+++ b/tools/aapt2/SdkConstants.cpp
@@ -26,9 +26,8 @@
 namespace aapt {
 
 static ApiVersion sDevelopmentSdkLevel = 10000;
-static const auto sDevelopmentSdkCodeNames = std::unordered_set<StringPiece>({
-    "Q", "R", "S", "T"
-});
+static const auto sDevelopmentSdkCodeNames =
+    std::unordered_set<StringPiece>({"Q", "R", "S", "Tiramisu"});
 
 static const std::vector<std::pair<uint16_t, ApiVersion>> sAttrIdMap = {
     {0x021c, 1},
diff --git a/tools/lint/OWNERS b/tools/lint/OWNERS
new file mode 100644
index 0000000..7c04519
--- /dev/null
+++ b/tools/lint/OWNERS
@@ -0,0 +1,5 @@
+brufino@google.com
+jsharkey@google.com
+
+per-file *CallingSettingsNonUserGetterMethods* = file:/packages/SettingsProvider/OWNERS
+
