Merge changes from topic "fontscaling-compose-flag" into androidx-main

* changes:
  chore(non linear font scaling): add temporary flag to disable non-linear font scaling
  chore(non linear font scaling): move ExperimentalComposeApi annotations to ui-util
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
index c2eac42..d20b0f7 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
@@ -2269,7 +2269,6 @@
         VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("schema")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
 
         // Insert schema for package A and B.
@@ -2314,13 +2313,11 @@
                 new VisibilityDocument.Builder("packageA$database/schema")
                         .setNotDisplayedBySystem(true)
                         .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                        .setCreationTimestampMillis(12345L)
                         .build();
         VisibilityDocument expectedVisibilityDocumentB =
                 new VisibilityDocument.Builder("packageB$database/schema")
                         .setNotDisplayedBySystem(true)
                         .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                        .setCreationTimestampMillis(12345L)
                         .build();
         assertThat(mAppSearchImpl.mVisibilityStoreLocked
                 .getVisibility("packageA$database/schema"))
@@ -4243,7 +4240,6 @@
         VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("Email").build());
@@ -4264,17 +4260,17 @@
         VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
         assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
                 .isEqualTo(expectedDocument);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument =
+                new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix + "Email",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument).isEqualTo(expectedDocument);
     }
 
@@ -4284,7 +4280,6 @@
         VisibilityDocument visibilityDocument1 = new VisibilityDocument.Builder("Email1")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
         List<AppSearchSchema> schemas1 =
                 Collections.singletonList(new AppSearchSchema.Builder("Email1").build());
@@ -4305,24 +4300,23 @@
         VisibilityDocument expectedDocument1 = new VisibilityDocument.Builder(prefix1 + "Email1")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
         assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
                 .isEqualTo(expectedDocument1);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument1 =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument1 =
+                new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix1 + "Email1",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument1).isEqualTo(expectedDocument1);
 
         // Create Visibility Document for Email2
         VisibilityDocument visibilityDocument2 = new VisibilityDocument.Builder("Email2")
                 .setNotDisplayedBySystem(false)
                 .addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
-                .setCreationTimestampMillis(54321L)
                 .build();
         List<AppSearchSchema> schemas2 =
                 Collections.singletonList(new AppSearchSchema.Builder("Email2").build());
@@ -4343,29 +4337,29 @@
         VisibilityDocument expectedDocument2 = new VisibilityDocument.Builder(prefix2 + "Email2")
                 .setNotDisplayedBySystem(false)
                 .addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
-                .setCreationTimestampMillis(54321)
                 .build();
         assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix2 + "Email2"))
                 .isEqualTo(expectedDocument2);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument2 =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument2 =  new VisibilityDocument.Builder(
+                mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix2 + "Email2",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument2).isEqualTo(expectedDocument2);
 
         // Check the existing visibility document retains.
         assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
                 .isEqualTo(expectedDocument1);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        actualDocument1 =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        actualDocument1 =  new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix1 + "Email1",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument1).isEqualTo(expectedDocument1);
     }
 
@@ -4375,7 +4369,6 @@
         VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
 
         List<AppSearchSchema> schemas =
@@ -4395,17 +4388,17 @@
         VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
         assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
                 .isEqualTo(expectedDocument);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument =
+                new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix + "Email",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument).isEqualTo(expectedDocument);
 
         // Set schema Email and its all-default visibility document to AppSearch database1
@@ -4439,7 +4432,6 @@
         VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
 
         List<AppSearchSchema> schemas =
@@ -4458,17 +4450,17 @@
         VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
         assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
                 .isEqualTo(expectedDocument);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument =
+                new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix + "Email",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument).isEqualTo(expectedDocument);
 
         // remove the schema and visibility setting from AppSearch
@@ -4511,7 +4503,6 @@
         VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("Email").build());
@@ -4541,18 +4532,18 @@
         VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
                 .setNotDisplayedBySystem(true)
                 .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
-                .setCreationTimestampMillis(12345L)
                 .build();
 
         assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
                 .isEqualTo(expectedDocument);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument =
+                new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix + "Email",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument).isEqualTo(expectedDocument);
 
         // remove schema and visibility document
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
index d516e81..77772c4 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
@@ -134,31 +134,29 @@
                 ALWAYS_OPTIMIZE,
                 /*visibilityChecker=*/null);
 
-        VisibilityDocument actualDocument1 = new VisibilityDocument(
+        VisibilityDocument actualDocument1 = new VisibilityDocument.Builder(
                 appSearchImpl.getDocument(
                         VisibilityStore.VISIBILITY_PACKAGE_NAME,
                         VisibilityStore.VISIBILITY_DATABASE_NAME,
                         VisibilityDocument.NAMESPACE,
                         /*id=*/ prefix + "Schema1",
-                        /*typePropertyPaths=*/ Collections.emptyMap()));
-        VisibilityDocument actualDocument2 = new VisibilityDocument(
+                        /*typePropertyPaths=*/ Collections.emptyMap())).build();
+        VisibilityDocument actualDocument2 = new VisibilityDocument.Builder(
                 appSearchImpl.getDocument(
                         VisibilityStore.VISIBILITY_PACKAGE_NAME,
                         VisibilityStore.VISIBILITY_DATABASE_NAME,
                         VisibilityDocument.NAMESPACE,
                         /*id=*/ prefix + "Schema2",
-                        /*typePropertyPaths=*/ Collections.emptyMap()));
+                        /*typePropertyPaths=*/ Collections.emptyMap())).build();
 
         VisibilityDocument expectedDocument1 =
                 new VisibilityDocument.Builder(/*id=*/ prefix + "Schema1")
                         .setNotDisplayedBySystem(true)
-                        .setCreationTimestampMillis(actualDocument1.getCreationTimestampMillis())
                         .addVisibleToPackage(new PackageIdentifier(packageNameFoo, sha256CertFoo))
                         .build();
         VisibilityDocument expectedDocument2 =
                 new VisibilityDocument.Builder(/*id=*/ prefix + "Schema2")
                         .setNotDisplayedBySystem(true)
-                        .setCreationTimestampMillis(actualDocument2.getCreationTimestampMillis())
                         .addVisibleToPackage(new PackageIdentifier(packageNameBar, sha256CertBar))
                         .build();
         assertThat(actualDocument1).isEqualTo(expectedDocument1);
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
index 56086d4..c5bd8ac 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
@@ -128,13 +128,13 @@
                 ALWAYS_OPTIMIZE,
                 /*visibilityChecker=*/null);
 
-        VisibilityDocument actualDocument = new VisibilityDocument(
+        VisibilityDocument actualDocument = new VisibilityDocument.Builder(
                 appSearchImpl.getDocument(
                         VisibilityStore.VISIBILITY_PACKAGE_NAME,
                         VisibilityStore.VISIBILITY_DATABASE_NAME,
                         VisibilityDocument.NAMESPACE,
                         /*id=*/ prefix + "Schema",
-                        /*typePropertyPaths=*/ Collections.emptyMap()));
+                        /*typePropertyPaths=*/ Collections.emptyMap())).build();
 
         assertThat(actualDocument.isNotDisplayedBySystem()).isTrue();
         assertThat(actualDocument.getPackageNames()).asList().containsExactly(packageNameFoo,
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
index 721b3ad..17e8a15 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
@@ -110,12 +110,13 @@
         assertThat(mVisibilityStore.getVisibility(prefix + "Email"))
                 .isEqualTo(visibilityDocument);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument =
+                new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ prefix + "Email",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument).isEqualTo(visibilityDocument);
     }
 
@@ -130,12 +131,13 @@
         assertThat(mVisibilityStore.getVisibility("Email"))
                 .isEqualTo(visibilityDocument);
         // Verify the VisibilityDocument is saved to AppSearchImpl.
-        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+        VisibilityDocument actualDocument = new VisibilityDocument.Builder(
+                mAppSearchImpl.getDocument(
                 VisibilityStore.VISIBILITY_PACKAGE_NAME,
                 VisibilityStore.VISIBILITY_DATABASE_NAME,
                 VisibilityDocument.NAMESPACE,
                 /*id=*/ "Email",
-                /*typePropertyPaths=*/ Collections.emptyMap()));
+                /*typePropertyPaths=*/ Collections.emptyMap())).build();
         assertThat(actualDocument).isEqualTo(visibilityDocument);
 
         mVisibilityStore.removeVisibility(ImmutableSet.of(visibilityDocument.getId()));
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
index 9b71dde..557d214 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
@@ -16,6 +16,8 @@
 // @exportToFramework:copyToPath(testing/testutils/src/android/app/appsearch/testutil/external/AlwaysSupportedFeatures.java)
 package androidx.appsearch.localstorage;
 
+import android.content.Context;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.app.Features;
@@ -74,4 +76,9 @@
                 return false;
         }
     }
+
+    @Override
+    public int getMaxIndexedProperties(@NonNull Context unused) {
+        return 64;
+    }
 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
index 68fa3b7..b64bab8 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
@@ -813,10 +813,9 @@
                 // fake the id, they can only mess their own app. That's totally allowed and
                 // they can do this via the public API too.
                 String prefixedSchemaType = prefix + unPrefixedDocument.getId();
-                prefixedVisibilityDocuments.add(new VisibilityDocument(
-                        unPrefixedDocument.toBuilder()
-                                .setId(prefixedSchemaType)
-                                .build()));
+                prefixedVisibilityDocuments.add(
+                        new VisibilityDocument.Builder(
+                                unPrefixedDocument).setId(prefixedSchemaType).build());
                 // This schema has visibility settings. We should keep it from the removal list.
                 deprecatedVisibilityDocuments.remove(prefixedSchemaType);
             }
@@ -1035,10 +1034,6 @@
             LogUtil.piiTrace(
                     TAG, "putDocument, response", putResultProto.getStatus(), putResultProto);
 
-            // Update caches
-            addToMap(mNamespaceMapLocked, prefix, finalDocument.getNamespace());
-            mDocumentCountMapLocked.put(packageName, newDocumentCount);
-
             // Logging stats
             if (pStatsBuilder != null) {
                 pStatsBuilder
@@ -1055,6 +1050,10 @@
 
             checkSuccess(putResultProto.getStatus());
 
+            // Only update caches if the document is successfully put to Icing.
+            addToMap(mNamespaceMapLocked, prefix, finalDocument.getNamespace());
+            mDocumentCountMapLocked.put(packageName, newDocumentCount);
+
             // Prepare notifications
             if (sendChangeNotifications) {
                 mObserverManager.onDocumentChange(
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
index b44cc3e..e3d5916 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
@@ -165,7 +165,7 @@
             mAppSearchImpl.putDocument(
                     VISIBILITY_PACKAGE_NAME,
                     VISIBILITY_DATABASE_NAME,
-                    prefixedVisibilityDocument,
+                    prefixedVisibilityDocument.toGenericDocument(),
                     /*sendChangeNotifications=*/ false,
                     /*logger=*/ null);
             mVisibilityDocumentMap.put(prefixedVisibilityDocument.getId(),
@@ -226,13 +226,13 @@
             VisibilityDocument visibilityDocument;
             try {
                 // Note: We use the other clients' prefixed schema type as ids
-                visibilityDocument = new VisibilityDocument(
+                visibilityDocument = new VisibilityDocument.Builder(
                         mAppSearchImpl.getDocument(
                                 VISIBILITY_PACKAGE_NAME,
                                 VISIBILITY_DATABASE_NAME,
                                 VisibilityDocument.NAMESPACE,
                                 /*id=*/ prefixedSchemaType,
-                                /*typePropertyPaths=*/ Collections.emptyMap()));
+                                /*typePropertyPaths=*/ Collections.emptyMap())).build();
             } catch (AppSearchException e) {
                 if (e.getResultCode() == RESULT_NOT_FOUND) {
                     // The schema has all default setting and we won't have a VisibilityDocument for
@@ -274,7 +274,7 @@
             mAppSearchImpl.putDocument(
                     VISIBILITY_PACKAGE_NAME,
                     VISIBILITY_DATABASE_NAME,
-                    migratedDocument,
+                    migratedDocument.toGenericDocument(),
                     /*sendChangeNotifications=*/ false,
                     /*logger=*/ null);
         }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
index 4095f32..4eb234c 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
@@ -15,16 +15,24 @@
  */
 package androidx.appsearch.platformstorage;
 
+import android.content.Context;
+import android.content.pm.ModuleInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.os.Build;
 
+import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.appsearch.app.Features;
+import androidx.core.util.Preconditions;
 
 /**
  * An implementation of {@link Features}. Feature availability is dependent on Android API
  * level.
  */
 final class FeaturesImpl implements Features {
+    private static final String APPSEARCH_MODULE_NAME = "com.android.appsearch";
 
     @Override
     public boolean isFeatureSupported(@NonNull String feature) {
@@ -82,4 +90,46 @@
                 return false;
         }
     }
+
+    @Override
+    public int getMaxIndexedProperties(@NonNull Context context) {
+        Preconditions.checkNotNull(context);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+            return 64;
+        } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) {
+            PackageManager packageManager = context.getPackageManager();
+            long appsearchVersionCode = 0;
+            try {
+                String appSearchPackageName = ApiHelperForQ.getAppSearchPackageName(packageManager);
+                if (appSearchPackageName == null) {
+                    return 16;
+                }
+                PackageInfo pInfo = packageManager
+                        .getPackageInfo(appSearchPackageName, PackageManager.MATCH_APEX);
+                appsearchVersionCode = ApiHelperForQ.getPackageInfoLongVersionCode(pInfo);
+            } catch (PackageManager.NameNotFoundException e) {
+                // Module not installed
+            }
+            // Sixty-four properties were enabled in mainline module 'aml_ase_331311020'
+            return appsearchVersionCode >= 331311020 ? 64 : 16;
+        } else {
+            return 16;
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.Q)
+    private static class ApiHelperForQ {
+        @DoNotInline
+        static long getPackageInfoLongVersionCode(PackageInfo pInfo) {
+            return pInfo.getLongVersionCode();
+        }
+
+        @DoNotInline
+        static String getAppSearchPackageName(PackageManager packageManager)
+                throws PackageManager.NameNotFoundException {
+            ModuleInfo appSearchModule =
+                    packageManager.getModuleInfo(APPSEARCH_MODULE_NAME, 1);
+            return appSearchModule.getPackageName();
+        }
+    }
 }
diff --git a/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java b/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java
index a2a3e53..bef55fa 100644
--- a/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java
+++ b/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java
@@ -16,6 +16,8 @@
 
 package androidx.appsearch.playservicesstorage;
 
+import android.content.Context;
+
 import androidx.annotation.NonNull;
 import androidx.appsearch.app.Features;
 
@@ -104,4 +106,10 @@
                 return false; // AppSearch features in U+, absent in GMSCore AppSearch.
         }
     }
+    @Override
+    public int getMaxIndexedProperties(@NonNull Context unused) {
+        // TODO(b/241310816): Update to reflect support in Android U+ once 64 indexable properties
+        //  are possible in service-appsearch.
+        return 16;
+    }
 }
diff --git a/appsearch/appsearch/api/current.txt b/appsearch/appsearch/api/current.txt
index 96049d0..baeb222 100644
--- a/appsearch/appsearch/api/current.txt
+++ b/appsearch/appsearch/api/current.txt
@@ -92,6 +92,11 @@
     method public androidx.appsearch.app.AppSearchBatchResult.Builder<KeyType!,ValueType!> setSuccess(KeyType, ValueType?);
   }
 
+  @AnyThread public abstract class AppSearchDocumentClassMap {
+    ctor public AppSearchDocumentClassMap();
+    method protected abstract java.util.Map<java.lang.String!,java.util.List<java.lang.String!>!> getMap();
+  }
+
   public final class AppSearchResult<ValueType> {
     method public String? getErrorMessage();
     method public int getResultCode();
@@ -241,6 +246,7 @@
   }
 
   public interface Features {
+    method public int getMaxIndexedProperties(android.content.Context);
     method public boolean isFeatureSupported(String);
     field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
     field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
@@ -267,7 +273,7 @@
     method public static androidx.appsearch.app.GenericDocument fromDocumentClass(Object) throws androidx.appsearch.exceptions.AppSearchException;
     method public long getCreationTimestampMillis();
     method public String getId();
-    method public static int getMaxIndexedProperties();
+    method @Deprecated public static int getMaxIndexedProperties();
     method public String getNamespace();
     method public Object? getProperty(String);
     method public boolean getPropertyBoolean(String);
diff --git a/appsearch/appsearch/api/restricted_current.txt b/appsearch/appsearch/api/restricted_current.txt
index 96049d0..baeb222 100644
--- a/appsearch/appsearch/api/restricted_current.txt
+++ b/appsearch/appsearch/api/restricted_current.txt
@@ -92,6 +92,11 @@
     method public androidx.appsearch.app.AppSearchBatchResult.Builder<KeyType!,ValueType!> setSuccess(KeyType, ValueType?);
   }
 
+  @AnyThread public abstract class AppSearchDocumentClassMap {
+    ctor public AppSearchDocumentClassMap();
+    method protected abstract java.util.Map<java.lang.String!,java.util.List<java.lang.String!>!> getMap();
+  }
+
   public final class AppSearchResult<ValueType> {
     method public String? getErrorMessage();
     method public int getResultCode();
@@ -241,6 +246,7 @@
   }
 
   public interface Features {
+    method public int getMaxIndexedProperties(android.content.Context);
     method public boolean isFeatureSupported(String);
     field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
     field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
@@ -267,7 +273,7 @@
     method public static androidx.appsearch.app.GenericDocument fromDocumentClass(Object) throws androidx.appsearch.exceptions.AppSearchException;
     method public long getCreationTimestampMillis();
     method public String getId();
-    method public static int getMaxIndexedProperties();
+    method @Deprecated public static int getMaxIndexedProperties();
     method public String getNamespace();
     method public Object? getProperty(String);
     method public boolean getPropertyBoolean(String);
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index 1fd3fdb..a940b11 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -34,6 +34,7 @@
 dependencies {
     api('androidx.annotation:annotation:1.1.0')
     api(libs.guavaListenableFuture)
+    api(libs.autoServiceAnnotations)
 
     implementation('androidx.collection:collection:1.2.0')
     implementation('androidx.concurrent:concurrent-futures:1.0.0')
diff --git a/appsearch/appsearch/proguard-rules.pro b/appsearch/appsearch/proguard-rules.pro
index a7af3cc..c344815 100644
--- a/appsearch/appsearch/proguard-rules.pro
+++ b/appsearch/appsearch/proguard-rules.pro
@@ -12,5 +12,6 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.
 -keep class ** implements androidx.appsearch.app.DocumentClassFactory { *; }
+-keep class ** implements androidx.appsearch.app.AppSearchDocumentClassMap { *; }
 
 -keep @androidx.appsearch.annotation.Document class *
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
index 690eb0f..5abb9d0 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
@@ -49,7 +49,9 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public abstract class AnnotationProcessorTestBase {
     private AppSearchSession mSession;
@@ -1425,4 +1427,123 @@
         documents = convertSearchResultsToDocuments(searchResults);
         assertThat(documents).containsExactly(businessGeneric);
     }
+
+    @Test
+    public void testAppSearchDocumentClassMap() throws Exception {
+        // Before this test, AppSearch's annotation processor has already generated the maps for
+        // each module at compile time for all document classes available in the current JVM
+        // environment.
+        Map<String, List<String>> expectedDocumentMap = new HashMap<>();
+        // The following classes come from androidx.appsearch.builtintypes.
+        expectedDocumentMap.put("builtin:StopwatchLap",
+                Arrays.asList("androidx.appsearch.builtintypes.StopwatchLap"));
+        expectedDocumentMap.put("builtin:Thing",
+                Arrays.asList("androidx.appsearch.builtintypes.Thing"));
+        expectedDocumentMap.put("builtin:ContactPoint",
+                Arrays.asList("androidx.appsearch.builtintypes.ContactPoint"));
+        expectedDocumentMap.put("builtin:Person",
+                Arrays.asList("androidx.appsearch.builtintypes.Person"));
+        expectedDocumentMap.put("builtin:AlarmInstance",
+                Arrays.asList("androidx.appsearch.builtintypes.AlarmInstance"));
+        expectedDocumentMap.put("Keyword",
+                Arrays.asList("androidx.appsearch.builtintypes.properties.Keyword"));
+        expectedDocumentMap.put("builtin:Alarm",
+                Arrays.asList("androidx.appsearch.builtintypes.Alarm"));
+        expectedDocumentMap.put("builtin:Timer",
+                Arrays.asList("androidx.appsearch.builtintypes.Timer"));
+        expectedDocumentMap.put("builtin:ImageObject",
+                Arrays.asList("androidx.appsearch.builtintypes.ImageObject"));
+        expectedDocumentMap.put("builtin:PotentialAction",
+                Arrays.asList("androidx.appsearch.builtintypes.PotentialAction"));
+        expectedDocumentMap.put("builtin:Stopwatch",
+                Arrays.asList("androidx.appsearch.builtintypes.Stopwatch"));
+        // The following classes come from all test files in androidx.appsearch.cts and
+        // androidx.appsearch.app.
+        expectedDocumentMap.put("Artist",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Artist"));
+        expectedDocumentMap.put("Organization",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Organization",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Organization"));
+        expectedDocumentMap.put("Email",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Email",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Email"));
+        expectedDocumentMap.put("Message",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Message",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Message"));
+        expectedDocumentMap.put("Parent",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Parent"));
+        expectedDocumentMap.put("Outer",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Outer",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Outer"));
+        expectedDocumentMap.put("BusinessImpl",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$BusinessImpl"));
+        expectedDocumentMap.put("Inner",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Inner",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Inner"));
+        expectedDocumentMap.put("King",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$King",
+                        "androidx.appsearch.cts.app.SearchSpecCtsTest$King",
+                        "androidx.appsearch.cts.observer.ObserverSpecCtsTest$King"));
+        expectedDocumentMap.put("ArtType",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$ArtType"));
+        expectedDocumentMap.put("Pineapple",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Pineapple",
+                        "androidx.appsearch.app.AnnotationProcessorTestBase$CoolPineapple"));
+        expectedDocumentMap.put("Jack",
+                Arrays.asList("androidx.appsearch.cts.observer.ObserverSpecCtsTest$Jack"));
+        expectedDocumentMap.put("ClassA",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$ClassA"));
+        expectedDocumentMap.put("ClassB",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$ClassB"));
+        expectedDocumentMap.put("Thing",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Thing"));
+        expectedDocumentMap.put("Business",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Business"));
+        expectedDocumentMap.put("Ace",
+                Arrays.asList("androidx.appsearch.cts.observer.ObserverSpecCtsTest$Ace"));
+        expectedDocumentMap.put("EmailMessage",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$EmailMessage",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$EmailMessage"));
+        expectedDocumentMap.put("FakeMessage",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$FakeMessage"));
+        expectedDocumentMap.put("Root",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Root"));
+        expectedDocumentMap.put("Queen",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Queen",
+                        "androidx.appsearch.cts.observer.ObserverSpecCtsTest$Queen"));
+        expectedDocumentMap.put("EmailDocument",
+                Arrays.asList("androidx.appsearch.cts.app.customer.EmailDocument"));
+        expectedDocumentMap.put("Middle",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Middle",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Middle"));
+        expectedDocumentMap.put("Common",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Common"));
+        expectedDocumentMap.put("Card",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Card",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Card",
+                        "androidx.appsearch.cts.app.PutDocumentsRequestCtsTest$Card"));
+        expectedDocumentMap.put("Gift",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Gift"));
+        expectedDocumentMap.put("CardAction",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$CardAction"));
+        expectedDocumentMap.put("InterfaceRoot",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$InterfaceRoot"));
+        expectedDocumentMap.put("Person",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Person",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Person"));
+        expectedDocumentMap.put("Place",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Place"));
+        expectedDocumentMap.put("LongDoc",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$LongDoc"));
+        expectedDocumentMap.put("SampleAutoValue", Arrays.asList(
+                "androidx.appsearch.app.AnnotationProcessorTestBase$SampleAutoValue"));
+
+        Map<String, List<String>> actualDocumentMap = AppSearchDocumentClassMap.getMergedMap();
+        assertThat(actualDocumentMap.keySet()).containsAtLeastElementsIn(
+                expectedDocumentMap.keySet());
+        for (String key : expectedDocumentMap.keySet()) {
+            assertThat(actualDocumentMap.get(key)).containsAtLeastElementsIn(
+                    expectedDocumentMap.get(key));
+        }
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index ccfaa65..1903f7c 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -469,6 +469,27 @@
 
 // @exportToFramework:startStrip()
 
+    /** Test indexing maximum properties into a schema. */
+    @Test
+    public void testSetSchema_maxProperties() throws Exception {
+        int maxProperties = mDb1.getFeatures().getMaxIndexedProperties(
+                ApplicationProvider.getApplicationContext());
+        AppSearchSchema.Builder schemaBuilder = new AppSearchSchema.Builder("testSchema");
+        for (int i = 0; i < maxProperties; i++) {
+            schemaBuilder.addProperty(new StringPropertyConfig.Builder("string" + i)
+                    .setIndexingType(StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                    .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                    .build());
+        }
+        AppSearchSchema maxSchema = schemaBuilder.build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(maxSchema).build()).get();
+        Set<AppSearchSchema> actual1 = mDb1.getSchemaAsync().get().getSchemas();
+        assertThat(actual1).containsExactly(maxSchema);
+
+        // TODO(b/300135897): Expand test to assert adding more than allowed properties is
+        //  fixed once fixed.
+    }
+
     @Test
     public void testGetSchema() throws Exception {
         AppSearchSchema emailSchema1 = new AppSearchSchema.Builder("Email1")
@@ -1009,11 +1030,11 @@
     public void testPutLargeDocumentBatch() throws Exception {
         // Schema registration
         AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
-                new StringPropertyConfig.Builder("body")
-                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                        .build())
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
                 .build();
         mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
 
@@ -3097,8 +3118,8 @@
 
         // Make sure it's really gone
         AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
-                new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
-                        "id2").build())
+                        new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
+                                "id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -3280,7 +3301,7 @@
                 SearchSpec.TERM_MATCH_PREFIX).addFilterPackageNames(
                 ApplicationProvider.getApplicationContext().getPackageName()).build()).get();
         AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
-                new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
+            new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
index 6a82e79..40040c7 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
@@ -37,6 +37,7 @@
             .build();
 
     @Test
+    @SuppressWarnings("deprecation")
     public void testMaxIndexedProperties() {
         assertThat(GenericDocument.getMaxIndexedProperties()).isEqualTo(16);
     }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
index 6b09339..8e802e6 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
@@ -73,8 +73,8 @@
  *
  * <p>Properties contain the document's data. They may be indexed or non-indexed (the default).
  * Only indexed properties can be searched for in queries. There is a limit of
- * {@link androidx.appsearch.app.GenericDocument#getMaxIndexedProperties} indexed properties in
- * one document.
+ * {@link androidx.appsearch.app.Features#getMaxIndexedProperties} indexed properties in one
+ * document.
  */
 @Documented
 @Retention(RetentionPolicy.CLASS)
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchDocumentClassMap.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchDocumentClassMap.java
new file mode 100644
index 0000000..2021b266
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchDocumentClassMap.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2023 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.
+ */
+// @exportToFramework:skipFile()
+package androidx.appsearch.app;
+
+import androidx.annotation.AnyThread;
+import androidx.annotation.GuardedBy;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArrayMap;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.ServiceLoader;
+
+/**
+ * A class that maintains the map from schema type names to the fully qualified names of the
+ * corresponding document classes.
+ *
+ * <p>Do not extend this class directly. AppSearch's annotation processor will automatically
+ * generate necessary subclasses to hold the map.
+ */
+@AnyThread
+public abstract class AppSearchDocumentClassMap {
+
+    /**
+     * The cached value of {@link #getMergedMap()}.
+     */
+    private static volatile Map<String, List<String>> sMergedMap = null;
+
+    /**
+     * Collects all of the instances of the generated {@link AppSearchDocumentClassMap} classes
+     * available in the current JVM environment, and calls the {@link #getMap()} method from them to
+     * build, cache and return the merged map. The keys are schema type names, and the values are
+     * the lists of the corresponding document classes.
+     */
+    @NonNull
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static Map<String, List<String>> getMergedMap() {
+        if (sMergedMap == null) {
+            synchronized (AppSearchDocumentClassMap.class) {
+                if (sMergedMap == null) {
+                    sMergedMap = buildMergedMapLocked();
+                }
+            }
+        }
+        return sMergedMap;
+    }
+
+    /**
+     * Returns the map from schema type names to the list of the fully qualified names of the
+     * corresponding document classes.
+     */
+    @NonNull
+    protected abstract Map<String, List<String>> getMap();
+
+    @NonNull
+    @GuardedBy("AppSearchDocumentClassMap.class")
+    private static Map<String, List<String>> buildMergedMapLocked() {
+        ServiceLoader<AppSearchDocumentClassMap> loader = ServiceLoader.load(
+                AppSearchDocumentClassMap.class);
+        Map<String, List<String>> result = new ArrayMap<>();
+        for (AppSearchDocumentClassMap appSearchDocumentClassMap : loader) {
+            Map<String, List<String>> documentClassMap = appSearchDocumentClassMap.getMap();
+            for (Map.Entry<String, List<String>> entry : documentClassMap.entrySet()) {
+                String schemaName = entry.getKey();
+                // A single schema name can be mapped to more than one document classes because
+                // document classes can choose to have arbitrary schema names. The most common
+                // case is when there are multiple AppSearch packages that define the same schema
+                // name. It is necessary to keep track all of the mapped document classes to prevent
+                // from losing any information.
+                List<String> documentClassNames = result.get(schemaName);
+                if (documentClassNames == null) {
+                    documentClassNames = new ArrayList<>();
+                    result.put(schemaName, documentClassNames);
+                }
+                documentClassNames.addAll(entry.getValue());
+            }
+        }
+
+        for (String schemaName : result.keySet()) {
+            result.put(schemaName,
+                    Collections.unmodifiableList(Objects.requireNonNull(result.get(schemaName))));
+        }
+        return Collections.unmodifiableMap(result);
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
index 012c789..e62622d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
@@ -15,6 +15,8 @@
  */
 package androidx.appsearch.app;
 
+import android.content.Context;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
@@ -182,4 +184,13 @@
      * backend.
      */
     boolean isFeatureSupported(@NonNull String feature);
+
+    /**
+     * Returns the maximum amount of properties that can be indexed in a Document
+     * given the Android API level and AppSearch backend.
+     *
+     * <p>A property is defined as all values that are present at a particular path.
+     * @param context to check mainline module version, as support varies by module version.
+     */
+    int getMaxIndexedProperties(@NonNull Context context);
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
index cdb3004..5f5efc6 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
@@ -87,8 +87,18 @@
      *
      * <p>Indexed properties are properties which are strings where the
      * {@link AppSearchSchema.StringPropertyConfig#getIndexingType} value is anything other
-     * than {@link AppSearchSchema.StringPropertyConfig#INDEXING_TYPE_NONE}.
+     * than {@link AppSearchSchema.StringPropertyConfig#INDEXING_TYPE_NONE}, as well as long
+     * properties where the {@link AppSearchSchema.LongPropertyConfig#getIndexingType} value is
+     * {@link AppSearchSchema.LongPropertyConfig#INDEXING_TYPE_RANGE}.
+     *
+     * <!--@exportToFramework:ifJetpack()-->
+     * @deprecated This is no longer a static value, but depends on SDK version and what AppSearch
+     * implementation is being used. Use {@link Features#getMaxIndexedProperties} instead.
+     * <!--@exportToFramework:else()-->
      */
+// @exportToFramework:startStrip()
+    @Deprecated
+// @exportToFramework:endStrip()
     public static int getMaxIndexedProperties() {
         return MAX_INDEXED_PROPERTIES;
     }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
index f794752..2bea91f 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
@@ -15,19 +15,23 @@
  */
 package androidx.appsearch.app;
 
-import android.os.Bundle;
+import android.os.Parcel;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.annotation.CanIgnoreReturnValue;
+import androidx.appsearch.safeparcel.AbstractSafeParcelable;
+import androidx.appsearch.safeparcel.SafeParcelable;
+import androidx.appsearch.safeparcel.stub.StubCreators.VisibilityDocumentCreator;
 import androidx.collection.ArraySet;
-import androidx.core.util.Preconditions;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -35,7 +39,11 @@
  * @exportToFramework:hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class VisibilityDocument extends GenericDocument {
[email protected](creator = "VisibilityDocumentCreator")
+public final class VisibilityDocument extends AbstractSafeParcelable {
+    @NonNull
+    public static final VisibilityDocumentCreator CREATOR = new VisibilityDocumentCreator();
+
     /**
      * The Schema type for documents that hold AppSearch's metadata, such as visibility settings.
      */
@@ -92,53 +100,107 @@
                     .build())
             .build();
 
-    public VisibilityDocument(@NonNull GenericDocument genericDocument) {
-        super(genericDocument);
+    @NonNull
+    @Field(id = 1, getter = "getId")
+    private String mId;
+
+    @Field(id = 2, getter = "isNotDisplayedBySystem")
+    private final boolean mIsNotDisplayedBySystem;
+
+    @NonNull
+    @Field(id = 3, getter = "getPackageNames")
+    private final String[] mPackageNames;
+
+    @NonNull
+    @Field(id = 4, getter = "getSha256Certs")
+    private final byte[][] mSha256Certs;
+
+    @Nullable
+    @Field(id = 5, getter = "getPermissionDocuments")
+    private final VisibilityPermissionDocument[] mPermissionDocuments;
+
+    @Nullable
+    // We still need to convert this class to a GenericDocument until we completely treat it
+    // differently in AppSearchImpl.
+    // TODO(b/298118943) Remove this once internally we don't use GenericDocument to store
+    //  visibility information.
+    private GenericDocument mGenericDocument;
+
+    @Nullable
+    private Integer mHashCode;
+
+    @Constructor
+    VisibilityDocument(
+            @Param(id = 1) @NonNull String id,
+            @Param(id = 2) boolean isNotDisplayedBySystem,
+            @Param(id = 3) @NonNull String[] packageNames,
+            @Param(id = 4) @NonNull byte[][] sha256Certs,
+            @Param(id = 5) @Nullable VisibilityPermissionDocument[] permissionDocuments) {
+        mId = Objects.requireNonNull(id);
+        mIsNotDisplayedBySystem = isNotDisplayedBySystem;
+        mPackageNames = Objects.requireNonNull(packageNames);
+        mSha256Certs = Objects.requireNonNull(sha256Certs);
+        mPermissionDocuments = permissionDocuments;
     }
 
-    public VisibilityDocument(@NonNull Bundle bundle) {
-        super(bundle);
+    /**
+     * Gets the id for this VisibilityDocument.
+     *
+     * <p>This is being used as the document id when we convert a {@link VisibilityDocument}
+     * to a {@link GenericDocument}.
+     */
+    @NonNull
+    public String getId() {
+        return mId;
     }
 
     /** Returns whether this schema is visible to the system. */
     public boolean isNotDisplayedBySystem() {
-        return getPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+        return mIsNotDisplayedBySystem;
     }
 
     /**
-     * Returns a package name array which could access this schema. Use {@link #getSha256Certs()}
-     * to get package's sha 256 certs. The same index of package names array and sha256Certs array
+     * Returns a package name array which could access this schema. Use {@link #getSha256Certs()} to
+     * get package's sha 256 certs. The same index of package names array and sha256Certs array
      * represents same package.
      */
     @NonNull
     public String[] getPackageNames() {
-        return Preconditions.checkNotNull(getPropertyStringArray(PACKAGE_NAME_PROPERTY));
+        return mPackageNames;
     }
 
     /**
-     * Returns a package sha256Certs array which could access this schema. Use
-     * {@link #getPackageNames()} to get package's name. The same index of package names array
-     * and sha256Certs array represents same package.
+     * Returns a package sha256Certs array which could access this schema. Use {@link
+     * #getPackageNames()} to get package's name. The same index of package names array and
+     * sha256Certs array represents same package.
      */
     @NonNull
     public byte[][] getSha256Certs() {
-        return Preconditions.checkNotNull(getPropertyBytesArray(SHA_256_CERT_PROPERTY));
+        return mSha256Certs;
+    }
+
+    /** Gets a list of {@link VisibilityDocument}.
+     *
+     * <p>A {@link VisibilityDocument} holds all required permissions for the caller need to have
+     * to access the schema this {@link VisibilityDocument} presents.
+     */
+    @Nullable
+    VisibilityPermissionDocument[] getPermissionDocuments() {
+        return mPermissionDocuments;
     }
 
     /**
-     * Returns an array of Android Permissions that caller mush hold to access the schema
-     * this {@link VisibilityDocument} represents.
+     * Returns an array of Android Permissions that caller mush hold to access the schema this
+     * {@link VisibilityDocument} represents.
      */
-    @Nullable
+    @NonNull
     public Set<Set<Integer>> getVisibleToPermissions() {
-        GenericDocument[] permissionDocuments = getPropertyDocumentArray(PERMISSION_PROPERTY);
-        if (permissionDocuments == null) {
+        if (mPermissionDocuments == null) {
             return Collections.emptySet();
         }
-        Set<Set<Integer>> visibleToPermissions = new ArraySet<>(permissionDocuments.length);
-        for (GenericDocument permissionDocument : permissionDocuments) {
-            Set<Integer> requiredPermissions = new VisibilityPermissionDocument(
-                    permissionDocument).getAllRequiredPermissions();
+        Set<Set<Integer>> visibleToPermissions = new ArraySet<>(mPermissionDocuments.length);
+        for (VisibilityPermissionDocument permissionDocument : mPermissionDocuments) {
+            Set<Integer> requiredPermissions = permissionDocument.getAllRequiredPermissions();
             if (requiredPermissions != null) {
                 visibleToPermissions.add(requiredPermissions);
             }
@@ -146,92 +208,7 @@
         return visibleToPermissions;
     }
 
-    /** Builder for {@link VisibilityDocument}. */
-    public static class Builder extends GenericDocument.Builder<Builder> {
-        private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
-
-        /**
-         * Creates a {@link Builder} for a {@link VisibilityDocument}.
-         *
-         * @param id The SchemaType of the {@link AppSearchSchema} that this
-         *           {@link VisibilityDocument} represents. The package and database prefix will be
-         *           added in server side. We are using prefixed schema type to be the final id of
-         *           this {@link VisibilityDocument}.
-         */
-        public Builder(@NonNull String id) {
-            super(NAMESPACE, id, SCHEMA_TYPE);
-        }
-
-        /** Sets whether this schema has opted out of platform surfacing. */
-        @CanIgnoreReturnValue
-        @NonNull
-        public Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
-            return setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
-                    notDisplayedBySystem);
-        }
-
-        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
-        @CanIgnoreReturnValue
-        @NonNull
-        public Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
-            Preconditions.checkNotNull(packageIdentifiers);
-            mPackageIdentifiers.addAll(packageIdentifiers);
-            return this;
-        }
-
-        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
-        @CanIgnoreReturnValue
-        @NonNull
-        public Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
-            Preconditions.checkNotNull(packageIdentifier);
-            mPackageIdentifiers.add(packageIdentifier);
-            return this;
-        }
-
-        /**
-         * Sets required permission sets for a package needs to hold to the schema this
-         * {@link VisibilityDocument} represents.
-         *
-         * <p> The querier could have access if they holds ALL required permissions of ANY of the
-         * individual value sets.
-         */
-        @CanIgnoreReturnValue
-        @NonNull
-        public Builder setVisibleToPermissions(@NonNull Set<Set<Integer>> visibleToPermissions) {
-            Preconditions.checkNotNull(visibleToPermissions);
-            VisibilityPermissionDocument[] permissionDocuments =
-                    new VisibilityPermissionDocument[visibleToPermissions.size()];
-            int i = 0;
-            for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
-                permissionDocuments[i++] = new VisibilityPermissionDocument
-                        .Builder(NAMESPACE, /*id=*/String.valueOf(i))
-                        .setVisibleToAllRequiredPermissions(allRequiredPermissions)
-                        .build();
-            }
-            setPropertyDocument(PERMISSION_PROPERTY, permissionDocuments);
-            return this;
-        }
-
-        /** Build a {@link VisibilityDocument} */
-        @Override
-        @NonNull
-        public VisibilityDocument build() {
-            String[] packageNames = new String[mPackageIdentifiers.size()];
-            byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
-            int i = 0;
-            for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
-                packageNames[i] = packageIdentifier.getPackageName();
-                sha256Certs[i] = packageIdentifier.getSha256Certificate();
-                ++i;
-            }
-            setPropertyString(PACKAGE_NAME_PROPERTY, packageNames);
-            setPropertyBytes(SHA_256_CERT_PROPERTY, sha256Certs);
-            return new VisibilityDocument(super.build());
-        }
-    }
-
-
-    /**  Build the List of {@link VisibilityDocument} from visibility settings. */
+    /** Build the List of {@link VisibilityDocument} from visibility settings. */
     @NonNull
     public static List<VisibilityDocument> toVisibilityDocuments(
             @NonNull SetSchemaRequest setSchemaRequest) {
@@ -241,13 +218,11 @@
                 setSchemaRequest.getSchemasVisibleToPackages();
         Map<String, Set<Set<Integer>>> schemasVisibleToPermissions =
                 setSchemaRequest.getRequiredPermissionsForSchemaTypeVisibility();
-
         List<VisibilityDocument> visibilityDocuments = new ArrayList<>(searchSchemas.size());
-
         for (AppSearchSchema searchSchema : searchSchemas) {
             String schemaType = searchSchema.getSchemaType();
             VisibilityDocument.Builder documentBuilder =
-                    new VisibilityDocument.Builder(/*id=*/searchSchema.getSchemaType());
+                    new VisibilityDocument.Builder(/*id=*/ searchSchema.getSchemaType());
             documentBuilder.setNotDisplayedBySystem(
                     schemasNotDisplayedBySystem.contains(schemaType));
 
@@ -263,4 +238,209 @@
         }
         return visibilityDocuments;
     }
+
+    /**
+     * Generates a {@link GenericDocument} from the current class.
+     *
+     * <p>This conversion is needed until we don't treat Visibility related documents as
+     * {@link GenericDocument}s internally.
+     */
+    @NonNull
+    public GenericDocument toGenericDocument() {
+        if (mGenericDocument == null) {
+            GenericDocument.Builder<?> builder = new GenericDocument.Builder<>(
+                    NAMESPACE, mId, SCHEMA_TYPE);
+            builder.setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY, mIsNotDisplayedBySystem);
+            builder.setPropertyString(PACKAGE_NAME_PROPERTY, mPackageNames);
+            builder.setPropertyBytes(SHA_256_CERT_PROPERTY, mSha256Certs);
+
+            // Generate an array of GenericDocument for VisibilityPermissionDocument.
+            if (mPermissionDocuments != null) {
+                GenericDocument[] permissionGenericDocs =
+                        new GenericDocument[mPermissionDocuments.length];
+                for (int i = 0; i < mPermissionDocuments.length; ++i) {
+                    permissionGenericDocs[i] = mPermissionDocuments[i].toGenericDocument();
+                }
+                builder.setPropertyDocument(PERMISSION_PROPERTY, permissionGenericDocs);
+            }
+
+            // The creationTimestamp doesn't matter for Visibility documents.
+            // But to make tests pass, we set it 0 so two GenericDocuments generated from
+            // the same VisibilityDocument can be same.
+            builder.setCreationTimestampMillis(0L);
+
+            mGenericDocument = builder.build();
+        }
+        return mGenericDocument;
+    }
+
+    @Override
+    public int hashCode() {
+        if (mHashCode == null) {
+            mHashCode = Objects.hash(
+                    mId,
+                    mIsNotDisplayedBySystem,
+                    Arrays.hashCode(mPackageNames),
+                    Arrays.deepHashCode(mSha256Certs),
+                    Arrays.hashCode(mPermissionDocuments));
+        }
+        return mHashCode;
+    }
+
+    @Override
+    public boolean equals(@Nullable Object other) {
+        if (this == other) {
+            return true;
+        }
+        if (!(other instanceof VisibilityDocument)) {
+            return false;
+        }
+        VisibilityDocument otherVisibilityDocument = (VisibilityDocument) other;
+        return mId.equals(otherVisibilityDocument.mId)
+                && mIsNotDisplayedBySystem == otherVisibilityDocument.mIsNotDisplayedBySystem
+                && Arrays.equals(
+                mPackageNames, otherVisibilityDocument.mPackageNames)
+                && Arrays.deepEquals(
+                mSha256Certs, otherVisibilityDocument.mSha256Certs)
+                && Arrays.equals(
+                mPermissionDocuments, otherVisibilityDocument.mPermissionDocuments);
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        VisibilityDocumentCreator.writeToParcel(this, dest, flags);
+    }
+
+    /** Builder for {@link VisibilityDocument}. */
+    public static final class Builder {
+        private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
+        private String mId;
+        private boolean mIsNotDisplayedBySystem;
+        private VisibilityPermissionDocument[] mPermissionDocuments;
+
+        /**
+         * Creates a {@link Builder} for a {@link VisibilityDocument}.
+         *
+         * @param id The SchemaType of the {@link AppSearchSchema} that this {@link
+         *     VisibilityDocument} represents. The package and database prefix will be added in
+         *     server side. We are using prefixed schema type to be the final id of this {@link
+         *     VisibilityDocument}.
+         */
+        public Builder(@NonNull String id) {
+            mId = Objects.requireNonNull(id);
+        }
+
+        /**
+         * Constructs a {@link VisibilityDocument} from a {@link GenericDocument}.
+         *
+         * <p>This constructor is still needed until we don't treat Visibility related documents as
+         * {@link GenericDocument}s internally.
+         */
+        public Builder(@NonNull GenericDocument genericDocument) {
+            Objects.requireNonNull(genericDocument);
+
+            mId = genericDocument.getId();
+            mIsNotDisplayedBySystem = genericDocument.getPropertyBoolean(
+                    NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+
+            String[] packageNames = genericDocument.getPropertyStringArray(PACKAGE_NAME_PROPERTY);
+            byte[][] sha256Certs = genericDocument.getPropertyBytesArray(SHA_256_CERT_PROPERTY);
+            for (int i = 0; i < packageNames.length; ++i) {
+                mPackageIdentifiers.add(new PackageIdentifier(packageNames[i], sha256Certs[i]));
+            }
+
+            GenericDocument[] permissionDocs =
+                    genericDocument.getPropertyDocumentArray(PERMISSION_PROPERTY);
+            if (permissionDocs != null) {
+                mPermissionDocuments = new VisibilityPermissionDocument[permissionDocs.length];
+                for (int i = 0; i < permissionDocs.length; ++i) {
+                    mPermissionDocuments[i] = new VisibilityPermissionDocument.Builder(
+                            permissionDocs[i]).build();
+                }
+            }
+        }
+
+        public Builder(@NonNull VisibilityDocument visibilityDocument) {
+            Objects.requireNonNull(visibilityDocument);
+
+            mIsNotDisplayedBySystem = visibilityDocument.mIsNotDisplayedBySystem;
+            mPermissionDocuments = visibilityDocument.mPermissionDocuments;
+            for (int i = 0; i < visibilityDocument.mPackageNames.length; ++i) {
+                mPackageIdentifiers.add(new PackageIdentifier(visibilityDocument.mPackageNames[i],
+                            visibilityDocument.mSha256Certs[i]));
+            }
+        }
+
+        /** Sets id. */
+        @CanIgnoreReturnValue
+        @NonNull
+        public Builder setId(@NonNull String id) {
+            mId = Objects.requireNonNull(id);
+            return this;
+        }
+
+        /** Sets whether this schema has opted out of platform surfacing. */
+        @CanIgnoreReturnValue
+        @NonNull
+        public Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
+            mIsNotDisplayedBySystem = notDisplayedBySystem;
+            return this;
+        }
+
+        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+        @CanIgnoreReturnValue
+        @NonNull
+        public Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
+            mPackageIdentifiers.addAll(Objects.requireNonNull(packageIdentifiers));
+            return this;
+        }
+
+        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+        @CanIgnoreReturnValue
+        @NonNull
+        public Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
+            mPackageIdentifiers.add(Objects.requireNonNull(packageIdentifier));
+            return this;
+        }
+
+        /**
+         * Sets required permission sets for a package needs to hold to the schema this {@link
+         * VisibilityDocument} represents.
+         *
+         * <p>The querier could have access if they holds ALL required permissions of ANY of the
+         * individual value sets.
+         */
+        @CanIgnoreReturnValue
+        @NonNull
+        public Builder setVisibleToPermissions(@NonNull Set<Set<Integer>> visibleToPermissions) {
+            Objects.requireNonNull(visibleToPermissions);
+            mPermissionDocuments =
+                    new VisibilityPermissionDocument[visibleToPermissions.size()];
+            int i = 0;
+            for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
+                mPermissionDocuments[i++] =
+                        new VisibilityPermissionDocument.Builder(
+                                NAMESPACE, /*id=*/ String.valueOf(i))
+                                .setVisibleToAllRequiredPermissions(allRequiredPermissions)
+                                .build();
+            }
+            return this;
+        }
+
+        /** Build a {@link VisibilityDocument} */
+        @NonNull
+        public VisibilityDocument build() {
+            String[] packageNames = new String[mPackageIdentifiers.size()];
+            byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
+            int i = 0;
+            for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
+                packageNames[i] = packageIdentifier.getPackageName();
+                sha256Certs[i] = packageIdentifier.getSha256Certificate();
+                ++i;
+            }
+            return new VisibilityDocument(mId, mIsNotDisplayedBySystem,
+                    packageNames, sha256Certs, mPermissionDocuments);
+        }
+    }
 }
+
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
index 80a6a2e..54269fd 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
@@ -16,12 +16,19 @@
 
 package androidx.appsearch.app;
 
+import android.os.Parcel;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.annotation.CanIgnoreReturnValue;
+import androidx.appsearch.safeparcel.AbstractSafeParcelable;
+import androidx.appsearch.safeparcel.SafeParcelable;
+import androidx.appsearch.safeparcel.stub.StubCreators.VisibilityPermissionDocumentCreator;
 import androidx.collection.ArraySet;
 
+import java.util.Arrays;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -30,7 +37,11 @@
  * @exportToFramework:hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class VisibilityPermissionDocument extends GenericDocument {
[email protected](creator = "VisibilityPermissionDocumentCreator")
+public final class VisibilityPermissionDocument extends AbstractSafeParcelable {
+    @NonNull
+    public static final VisibilityPermissionDocumentCreator CREATOR =
+            new VisibilityPermissionDocumentCreator();
 
     /**
      * The Schema type for documents that hold AppSearch's metadata, such as visibility settings.
@@ -53,49 +64,79 @@
                     .build())
             .build();
 
-    VisibilityPermissionDocument(@NonNull GenericDocument genericDocument) {
-        super(genericDocument);
+    @NonNull
+    @Field(id = 1, getter = "getId")
+    private final String mId;
+
+    @NonNull
+    @Field(id = 2, getter = "getNamespace")
+    private final String mNamespace;
+
+    @Nullable
+    @Field(id = 3, getter = "getAllRequiredPermissionsInts")
+    // SafeParcelable doesn't support Set<Integer>, so we have to convert it to int[].
+    private final int[] mAllRequiredPermissions;
+
+    @Nullable
+    // We still need to convert this class to a GenericDocument until we completely treat it
+    // differently in AppSearchImpl.
+    // TODO(b/298118943) Remove this once internally we don't use GenericDocument to store
+    //  visibility information.
+    private GenericDocument mGenericDocument;
+
+    @Nullable
+    private Integer mHashCode;
+
+    @Constructor
+    VisibilityPermissionDocument(
+            @Param(id = 1) @NonNull String id,
+            @Param(id = 2) @NonNull String namespace,
+            @Param(id = 3) @Nullable int[] allRequiredPermissions) {
+        mId = Objects.requireNonNull(id);
+        mNamespace = Objects.requireNonNull(namespace);
+        mAllRequiredPermissions = allRequiredPermissions;
     }
 
     /**
-     * Returns an array of Android Permissions that caller mush hold to access the schema
-     * that the outer {@link VisibilityDocument} represents.
+     * Gets the id for this {@link VisibilityPermissionDocument}.
+     *
+     * <p>This is being used as the document id when we convert a
+     * {@link VisibilityPermissionDocument} to a {@link GenericDocument}.
+     */
+    @NonNull
+    public String getId() {
+        return mId;
+    }
+
+    /**
+     * Gets the namespace for this {@link VisibilityPermissionDocument}.
+     *
+     * <p>This is being used as the namespace when we convert a
+     * {@link VisibilityPermissionDocument} to a {@link GenericDocument}.
+     */
+    @NonNull
+    public String getNamespace() {
+        return mNamespace;
+    }
+
+    /** Gets the required Android Permissions in an int array. */
+    @Nullable
+    int[] getAllRequiredPermissionsInts() {
+        return mAllRequiredPermissions;
+    }
+
+    /**
+     * Returns an array of Android Permissions that caller mush hold to access the schema that the
+     * outer {@link VisibilityDocument} represents.
      */
     @Nullable
     public Set<Integer> getAllRequiredPermissions() {
-        return toInts(getPropertyLongArray(ALL_REQUIRED_PERMISSIONS_PROPERTY));
-    }
-
-    /** Builder for {@link VisibilityPermissionDocument}. */
-    public static class Builder extends GenericDocument.Builder<Builder> {
-
-        /**
-         * Creates a {@link VisibilityDocument.Builder} for a {@link VisibilityDocument}.
-         */
-        public Builder(@NonNull String namespace, @NonNull String id) {
-            super(namespace, id, SCHEMA_TYPE);
-        }
-
-        /** Sets whether this schema has opted out of platform surfacing. */
-        @CanIgnoreReturnValue
-        @NonNull
-        public Builder setVisibleToAllRequiredPermissions(
-                @NonNull Set<Integer> allRequiredPermissions) {
-            setPropertyLong(ALL_REQUIRED_PERMISSIONS_PROPERTY, toLongs(allRequiredPermissions));
-            return this;
-        }
-
-        /** Build a {@link VisibilityPermissionDocument} */
-        @Override
-        @NonNull
-        public VisibilityPermissionDocument build() {
-            return new VisibilityPermissionDocument(super.build());
-        }
+        return toIntegerSet(mAllRequiredPermissions);
     }
 
     @NonNull
-    static long[] toLongs(@NonNull Set<Integer> properties) {
-        long[] outputs = new long[properties.size()];
+    private static int[] toInts(@NonNull Set<Integer> properties) {
+        int[] outputs = new int[properties.size()];
         int i = 0;
         for (int property : properties) {
             outputs[i++] = property;
@@ -104,14 +145,125 @@
     }
 
     @Nullable
-    private static Set<Integer> toInts(@Nullable long[] properties) {
+    private static Set<Integer> toIntegerSet(@Nullable int[] properties) {
         if (properties == null) {
             return null;
         }
         Set<Integer> outputs = new ArraySet<>(properties.length);
-        for (long property : properties) {
-            outputs.add((int) property);
+        for (int property : properties) {
+            outputs.add(property);
         }
         return outputs;
     }
+
+    /**
+     * Generates a {@link GenericDocument} from the current class.
+     *
+     * <p>This conversion is needed until we don't treat Visibility related documents as
+     * {@link GenericDocument}s internally.
+     */
+    @NonNull
+    public GenericDocument toGenericDocument() {
+        if (mGenericDocument == null) {
+            GenericDocument.Builder<?> builder = new GenericDocument.Builder<>(
+                    mNamespace, mId, SCHEMA_TYPE);
+
+            if (mAllRequiredPermissions != null) {
+                // GenericDocument only supports long, so int[] needs to be converted to
+                // long[] here.
+                long[] longs = new long[mAllRequiredPermissions.length];
+                for (int i = 0; i < mAllRequiredPermissions.length; ++i) {
+                    longs[i] = mAllRequiredPermissions[i];
+                }
+                builder.setPropertyLong(ALL_REQUIRED_PERMISSIONS_PROPERTY, longs);
+            }
+
+            mGenericDocument = builder.build();
+        }
+        return mGenericDocument;
+    }
+
+    @Override
+    public int hashCode() {
+        if (mHashCode == null) {
+            mHashCode = Objects.hash(mId, mNamespace, Arrays.hashCode(mAllRequiredPermissions));
+        }
+        return mHashCode;
+    }
+
+    @Override
+    public boolean equals(@Nullable Object other) {
+        if (this == other) {
+            return true;
+        }
+        if (!(other instanceof VisibilityPermissionDocument)) {
+            return false;
+        }
+        VisibilityPermissionDocument otherVisibilityPermissionDocument =
+                (VisibilityPermissionDocument) other;
+        return mId.equals(otherVisibilityPermissionDocument.mId)
+                && mNamespace.equals(otherVisibilityPermissionDocument.mNamespace)
+                && Arrays.equals(
+                mAllRequiredPermissions,
+                otherVisibilityPermissionDocument.mAllRequiredPermissions);
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        VisibilityPermissionDocumentCreator.writeToParcel(this, dest, flags);
+    }
+
+    /** Builder for {@link VisibilityPermissionDocument}. */
+    public static final class Builder {
+        private String mId;
+        private String mNamespace;
+        private int[] mAllRequiredPermissions;
+
+        /**
+         * Constructs a {@link VisibilityPermissionDocument} from a {@link GenericDocument}.
+         *
+         * <p>This constructor is still needed until we don't treat Visibility related documents as
+         * {@link GenericDocument}s internally.
+         */
+        public Builder(@NonNull GenericDocument genericDocument) {
+            Objects.requireNonNull(genericDocument);
+            mId = genericDocument.getId();
+            mNamespace = genericDocument.getNamespace();
+            // GenericDocument only supports long[], so we need to convert it back to int[].
+            long[] longs = genericDocument.getPropertyLongArray(
+                    ALL_REQUIRED_PERMISSIONS_PROPERTY);
+            if (longs != null) {
+                mAllRequiredPermissions = new int[longs.length];
+                for (int i = 0; i < longs.length; ++i) {
+                    mAllRequiredPermissions[i] = (int) longs[i];
+                }
+            }
+        }
+
+        /** Creates a {@link VisibilityDocument.Builder} for a {@link VisibilityDocument}. */
+        public Builder(@NonNull String namespace, @NonNull String id) {
+            mNamespace = Objects.requireNonNull(namespace);
+            mId = Objects.requireNonNull(id);
+        }
+
+        /**
+         * Sets a set of Android Permissions that caller mush hold to access the schema that the
+         * outer {@link VisibilityDocument} represents.
+         */
+        @CanIgnoreReturnValue
+        @NonNull
+        public Builder setVisibleToAllRequiredPermissions(
+                @NonNull Set<Integer> allRequiredPermissions) {
+            mAllRequiredPermissions = toInts(Objects.requireNonNull(allRequiredPermissions));
+            return this;
+        }
+
+        /** Builds a {@link VisibilityPermissionDocument} */
+        @NonNull
+        public VisibilityPermissionDocument build() {
+            return new VisibilityPermissionDocument(mId,
+                    mNamespace,
+                    mAllRequiredPermissions);
+        }
+    }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java b/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
index c4f9241..b60c9e4 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
@@ -74,4 +74,12 @@
     /** Stub creator for {@link GenericDocumentParcel}. */
     public static class GenericDocumentParcelCreator extends AbstractCreator {
     }
+
+    /** Stub creator for {@link androidx.appsearch.app.VisibilityPermissionDocument}. */
+    public static class VisibilityPermissionDocumentCreator extends AbstractCreator {
+    }
+
+    /** Stub creator for {@link androidx.appsearch.app.VisibilityDocument}. */
+    public static class VisibilityDocumentCreator extends AbstractCreator {
+    }
 }
diff --git a/appsearch/compiler/build.gradle b/appsearch/compiler/build.gradle
index 57511cb..8892047 100644
--- a/appsearch/compiler/build.gradle
+++ b/appsearch/compiler/build.gradle
@@ -27,6 +27,8 @@
     api('androidx.annotation:annotation:1.1.0')
     api(libs.jsr250)
     implementation(libs.autoCommon)
+    implementation(libs.autoService)
+    implementation(libs.autoServiceAnnotations)
     implementation(libs.autoValue)
     implementation(libs.autoValueAnnotations)
     implementation(libs.guava)
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
index 4ea0f1d6..998ce5c 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
@@ -17,6 +17,7 @@
 
 import static androidx.appsearch.compiler.IntrospectionHelper.APPSEARCH_ANNOTATION_PKG;
 import static androidx.appsearch.compiler.IntrospectionHelper.DOCUMENT_ANNOTATION_SIMPLE_CLASS_NAME;
+
 import static javax.lang.model.util.ElementFilter.typesIn;
 
 import androidx.annotation.NonNull;
@@ -28,9 +29,19 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSetMultimap;
+import com.squareup.javapoet.JavaFile;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.annotation.processing.Messager;
@@ -74,10 +85,16 @@
     private static final class AppSearchCompileStep implements Step {
         private final ProcessingEnvironment mProcessingEnv;
         private final Messager mMessager;
+        private final Map<String, List<String>> mDocumentClassMap;
+        // Annotation processing can be run in multiple rounds. This tracks the index of current
+        // round starting from 0.
+        private int mRoundIndex;
 
         AppSearchCompileStep(ProcessingEnvironment processingEnv) {
             mProcessingEnv = processingEnv;
             mMessager = processingEnv.getMessager();
+            mDocumentClassMap = new HashMap<>();
+            mRoundIndex = -1;
         }
 
         @Override
@@ -88,11 +105,16 @@
         @Override
         public ImmutableSet<Element> process(
                 ImmutableSetMultimap<String, Element> elementsByAnnotation) {
+            mDocumentClassMap.clear();
+            mRoundIndex += 1;
+
             Set<TypeElement> documentElements =
                     typesIn(elementsByAnnotation.get(
                             IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS.canonicalName()));
 
             ImmutableSet.Builder<Element> nextRound = new ImmutableSet.Builder<>();
+            String documentMapClassPackage = null;
+            Set<String> classNames = new HashSet<>();
             for (TypeElement document : documentElements) {
                 try {
                     processDocument(document);
@@ -104,11 +126,58 @@
                     // Prints error message.
                     e.printDiagnostic(mMessager);
                 }
+                classNames.add(document.getQualifiedName().toString());
+                String packageName =
+                        mProcessingEnv.getElementUtils().getPackageOf(document).toString();
+                // We must choose a deterministic package to place the generated document map
+                // class. Given multiple packages, we have no real preference between them. So
+                // for the sake of making a deterministic selection, we always choose to generate
+                // the map in the lexicographically smallest package.
+                if (documentMapClassPackage == null || packageName.compareTo(
+                        documentMapClassPackage) < 0) {
+                    documentMapClassPackage = packageName;
+                }
             }
+
+            try {
+                if (!classNames.isEmpty()) {
+                    // Append the hash code of classNames and the index of the current round as a
+                    // suffix to the name of the generated document map class. This will prevent
+                    // the generation of two classes with the same name, which could otherwise
+                    // happen when there are two Java modules that contain classes in the same
+                    // package name, or there are multiple rounds of annotation processing for some
+                    // module.
+                    String classSuffix = generateStringSetHash(
+                            classNames, /* delimiter= */ ",") + "_" + mRoundIndex;
+                    writeJavaFile(DocumentMapGenerator.generate(mProcessingEnv,
+                            documentMapClassPackage, classSuffix, mDocumentClassMap));
+                }
+            } catch (NoSuchAlgorithmException | IOException e) {
+                mProcessingEnv.getMessager().printMessage(Kind.ERROR,
+                        "Failed to create the AppSearch document map class: " + e);
+            }
+
             // Pass elements to next round of processing.
             return nextRound.build();
         }
 
+        private void writeJavaFile(JavaFile javaFile) throws IOException {
+            String outputDir = mProcessingEnv.getOptions().get(OUTPUT_DIR_OPTION);
+            if (outputDir == null || outputDir.isEmpty()) {
+                javaFile.writeTo(mProcessingEnv.getFiler());
+            } else {
+                mMessager.printMessage(
+                        Kind.NOTE,
+                        "Writing output to \"" + outputDir
+                                + "\" due to the presence of -A" + OUTPUT_DIR_OPTION);
+                javaFile.writeTo(new File(outputDir));
+            }
+        }
+
+        /**
+         * Process the document class by generating a factory class for it and properly update
+         * {@link #mDocumentClassMap}.
+         */
         private void processDocument(@NonNull TypeElement element)
                 throws ProcessingException, MissingTypeException {
             if (element.getKind() != ElementKind.CLASS
@@ -137,23 +206,19 @@
                 model = DocumentModel.createPojoModel(mProcessingEnv, element);
             }
             CodeGenerator generator = CodeGenerator.generate(mProcessingEnv, model);
-            String outputDir = mProcessingEnv.getOptions().get(OUTPUT_DIR_OPTION);
             try {
-                if (outputDir == null || outputDir.isEmpty()) {
-                    generator.writeToFiler();
-                } else {
-                    mMessager.printMessage(
-                            Kind.NOTE,
-                            "Writing output to \"" + outputDir
-                                    + "\" due to the presence of -A" + OUTPUT_DIR_OPTION);
-                    generator.writeToFolder(new File(outputDir));
-                }
+                writeJavaFile(generator.createJavaFile());
             } catch (IOException e) {
                 ProcessingException pe =
                         new ProcessingException("Failed to write output", model.getClassElement());
                 pe.initCause(e);
                 throw pe;
             }
+
+            List<String> documentClassList = mDocumentClassMap.computeIfAbsent(
+                    model.getSchemaName(), k -> new ArrayList<>());
+            documentClassList.add(
+                    mProcessingEnv.getElementUtils().getBinaryName(element).toString());
         }
 
         /**
@@ -172,5 +237,34 @@
             String dot = pkg.isEmpty() ? "" : ".";
             return pkg + dot + "AutoValue_" + name;
         }
+
+        /**
+         * Generate a SHA-256 hash for a given string set.
+         *
+         * @param set       The set of the strings.
+         * @param delimiter The delimiter used to separate the strings, which should not have
+         *                  appeared in any of the strings in the set.
+         */
+        @NonNull
+        private static String generateStringSetHash(@NonNull Set<String> set,
+                @NonNull String delimiter) throws NoSuchAlgorithmException {
+            List<String> sortedList = new ArrayList<>(set);
+            Collections.sort(sortedList);
+
+            MessageDigest md = MessageDigest.getInstance("SHA-256");
+            for (String s : sortedList) {
+                md.update(s.getBytes(StandardCharsets.UTF_8));
+                md.update(delimiter.getBytes(StandardCharsets.UTF_8));
+            }
+            StringBuilder result = new StringBuilder();
+            for (byte b : md.digest()) {
+                String hex = Integer.toHexString(0xFF & b);
+                if (hex.length() == 1) {
+                    result.append('0');
+                }
+                result.append(hex);
+            }
+            return result.toString();
+        }
     }
 }
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
index 44cc1f0..caa2e58 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
@@ -25,7 +25,6 @@
 import com.squareup.javapoet.TypeName;
 import com.squareup.javapoet.TypeSpec;
 
-import java.io.File;
 import java.io.IOException;
 
 import javax.annotation.processing.ProcessingEnvironment;
@@ -62,12 +61,8 @@
         mOutputClass = createClass();
     }
 
-    public void writeToFiler() throws IOException {
-        JavaFile.builder(mOutputPackage, mOutputClass).build().writeTo(mEnv.getFiler());
-    }
-
-    public void writeToFolder(@NonNull File folder) throws IOException {
-        JavaFile.builder(mOutputPackage, mOutputClass).build().writeTo(folder);
+    public JavaFile createJavaFile() throws IOException {
+        return JavaFile.builder(mOutputPackage, mOutputClass).build();
     }
 
     /**
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentMapGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentMapGenerator.java
new file mode 100644
index 0000000..59b2c54
--- /dev/null
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentMapGenerator.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2023 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 androidx.appsearch.compiler;
+
+import androidx.annotation.NonNull;
+
+import com.google.auto.common.GeneratedAnnotationSpecs;
+import com.google.auto.service.AutoService;
+import com.squareup.javapoet.AnnotationSpec;
+import com.squareup.javapoet.ClassName;
+import com.squareup.javapoet.CodeBlock;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeName;
+import com.squareup.javapoet.TypeSpec;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Modifier;
+
+/**
+ * A class that wraps a static method that generates a java class of
+ * {@link androidx.appsearch.app.AppSearchDocumentClassMap}.
+ */
+public class DocumentMapGenerator {
+    /**
+     * Returns the generated {@link androidx.appsearch.app.AppSearchDocumentClassMap}, based on
+     * the provided document class map.
+     *
+     * @param documentClassMap The map from schema type names to the list of the fully qualified
+     *                         names of the corresponding document classes, so that the
+     *                         {@code getMap} method of the generated class can return this map.
+     */
+    @NonNull
+    public static JavaFile generate(@NonNull ProcessingEnvironment processingEnv,
+            @NonNull String packageName, @NonNull String classSuffix,
+            @NonNull Map<String, List<String>> documentClassMap) {
+        ClassName superClassName = ClassName.get(
+                IntrospectionHelper.APPSEARCH_PKG, "AppSearchDocumentClassMap");
+        TypeSpec.Builder genClass = TypeSpec
+                .classBuilder(IntrospectionHelper.GEN_CLASS_PREFIX + "DocumentClassMap" + "_"
+                        + classSuffix)
+                .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
+                .superclass(superClassName)
+                .addAnnotation(AnnotationSpec.builder(AutoService.class)
+                        .addMember("value", "$T.class", superClassName)
+                        .build());
+
+        // Add the @Generated annotation to avoid static analysis running on these files
+        GeneratedAnnotationSpecs.generatedAnnotationSpec(
+                processingEnv.getElementUtils(),
+                processingEnv.getSourceVersion(),
+                AppSearchCompiler.class
+        ).ifPresent(genClass::addAnnotation);
+
+        // The type of the map is Map<String, List<String>>.
+        TypeName returnType = ParameterizedTypeName.get(ClassName.get(Map.class),
+                ClassName.get(String.class),
+                ParameterizedTypeName.get(ClassName.get(List.class), ClassName.get(String.class)));
+
+        genClass.addMethod(MethodSpec.methodBuilder("getMap")
+                .addModifiers(Modifier.PROTECTED)
+                .returns(returnType)
+                .addAnnotation(NonNull.class)
+                .addAnnotation(Override.class)
+                .addStatement("$T result = new $T<>()", returnType,
+                        ClassName.get(HashMap.class))
+                .addCode(getMapConstructionCode(documentClassMap))
+                .addStatement("return result")
+                .build());
+
+        return JavaFile.builder(packageName, genClass.build()).build();
+    }
+
+    private static CodeBlock getMapConstructionCode(
+            @NonNull Map<String, List<String>> documentClassMap) {
+        CodeBlock.Builder mapContentBuilder = CodeBlock.builder();
+        for (Map.Entry<String, List<String>> entry : documentClassMap.entrySet()) {
+            String valueString = entry.getValue().stream().map(
+                    value -> "\"" + value + "\"").collect(Collectors.joining(", "));
+            mapContentBuilder.addStatement("result.put($S, $T.asList($L))", entry.getKey(),
+                    ClassName.get(Arrays.class), valueString);
+        }
+        return mapContentBuilder.build();
+    }
+
+    private DocumentMapGenerator() {}
+}
diff --git a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
index e14f777..e2b4532 100644
--- a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
+++ b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
@@ -1491,6 +1491,43 @@
 
         assertThat(compilation).succeededWithoutWarnings();
         checkEqualsGolden("AutoValue_Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
+        // The number of rounds that the annotation processor takes can vary from setup to setup.
+        // In this test case, AutoValue documents are processed in the second round because their
+        // generated classes are not available in the first turn.
+        checkDocumentMapEqualsGolden(/* roundIndex= */1);
+    }
+
+    @Test
+    public void testAutoValueDocumentWithNormalDocument() throws IOException {
+        Compilation compilation = compile(
+                "import com.google.auto.value.AutoValue;\n"
+                        + "import com.google.auto.value.AutoValue.*;\n"
+                        + "@Document\n"
+                        + "class Person {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "@AutoValue\n"
+                        + "public abstract class Gift {\n"
+                        + "  @CopyAnnotations @Document.Id abstract String id();\n"
+                        + "  @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+                        + "  @CopyAnnotations\n"
+                        + "  @Document.StringProperty abstract String property();\n"
+                        + "  public static Gift create(String id, String namespace, String"
+                        + " property) {\n"
+                        + "    return new AutoValue_Gift(id, namespace, property);\n"
+                        + "  }\n"
+                        + "}\n");
+
+        assertThat(compilation).succeededWithoutWarnings();
+        checkEqualsGolden("AutoValue_Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
+        // The number of rounds that the annotation processor takes can vary from setup to setup.
+        // In this test case, AutoValue documents are processed in the second round because their
+        // generated classes are not available in the first turn.
+        checkDocumentMapEqualsGolden(/* roundIndex= */1);
     }
 
     @Test
@@ -1639,6 +1676,7 @@
         checkResultContains("Gift.java", "addParentType($$__AppSearch__Parent2.SCHEMA_NAME)");
 
         checkEqualsGolden("Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
     }
 
     @Test
@@ -1998,6 +2036,7 @@
         checkResultContains("Gift.java", "document.getStr2()");
         checkResultContains("Gift.java", "document.getPrice()");
         checkEqualsGolden("Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
     }
 
     @Test
@@ -2771,6 +2810,28 @@
                 "Method cannot be used to create a document class: abstract constructor");
     }
 
+    @Test
+    public void testDocumentClassesWithDuplicatedNames() throws Exception {
+        Compilation compilation = compile(
+                "@Document(name=\"A\")\n"
+                        + "class MyClass1 {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n"
+                        + "@Document(name=\"A\")\n"
+                        + "class MyClass2 {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n"
+                        + "@Document(name=\"B\")\n"
+                        + "class MyClass3 {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n");
+        assertThat(compilation).succeededWithoutWarnings();
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
+    }
+
     private Compilation compile(String classBody) {
         return compile("Gift", classBody);
     }
@@ -2797,8 +2858,27 @@
     }
 
     private void checkEqualsGolden(String className) throws IOException {
-        // Get the expected file contents
         String goldenResPath = "goldens/" + mTestName.getMethodName() + ".JAVA";
+        File actualPackageDir = new File(mGenFilesDir, "com/example/appsearch");
+        File actualPath =
+                new File(actualPackageDir, IntrospectionHelper.GEN_CLASS_PREFIX + className);
+        checkEqualsGoldenHelper(goldenResPath, actualPath);
+    }
+
+    private void checkDocumentMapEqualsGolden(int roundIndex) throws IOException {
+        String goldenResPath =
+                "goldens/" + mTestName.getMethodName() + "DocumentMap_" + roundIndex + ".JAVA";
+        File actualPackageDir = new File(mGenFilesDir, "com/example/appsearch");
+        File[] files = actualPackageDir.listFiles((dir, name) ->
+                name.startsWith(IntrospectionHelper.GEN_CLASS_PREFIX + "DocumentClassMap")
+                        && name.endsWith("_" + roundIndex + ".java"));
+        Truth.assertThat(files).isNotNull();
+        Truth.assertThat(files).hasLength(1);
+        checkEqualsGoldenHelper(goldenResPath, files[0]);
+    }
+
+    private void checkEqualsGoldenHelper(String goldenResPath, File actualPath) throws IOException {
+        // Get the expected file contents
         String expected = "";
         try (InputStream is = getClass().getResourceAsStream(goldenResPath)) {
             if (is == null) {
@@ -2810,9 +2890,6 @@
         }
 
         // Get the actual file contents
-        File actualPackageDir = new File(mGenFilesDir, "com/example/appsearch");
-        File actualPath =
-                new File(actualPackageDir, IntrospectionHelper.GEN_CLASS_PREFIX + className);
         Truth.assertWithMessage("Path " + actualPath + " is not a file")
                 .that(actualPath.isFile()).isTrue();
         String actual = Files.asCharSource(actualPath, StandardCharsets.UTF_8).read();
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_0.JAVA
new file mode 100644
index 0000000..36b4fc9
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_0.JAVA
@@ -0,0 +1,22 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_71ecb22a3f48746c4261bd34b4ba3c2861632443de7f7c577156ec583523e7f6_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_1.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_1.JAVA
new file mode 100644
index 0000000..4e88fc3
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_1.JAVA
@@ -0,0 +1,24 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_71ecb22a3f48746c4261bd34b4ba3c2861632443de7f7c577156ec583523e7f6_1 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocument.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocument.JAVA
new file mode 100644
index 0000000..1c28dfb
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocument.JAVA
@@ -0,0 +1,63 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Class;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__AutoValue_Gift implements DocumentClassFactory<Gift> {
+  public static final String SCHEMA_NAME = "Gift";
+
+  @Override
+  public String getSchemaName() {
+    return SCHEMA_NAME;
+  }
+
+  @Override
+  public AppSearchSchema getSchema() throws AppSearchException {
+    return new AppSearchSchema.Builder(SCHEMA_NAME)
+          .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("property")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+            .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+            .setJoinableValueType(AppSearchSchema.StringPropertyConfig.JOINABLE_VALUE_TYPE_NONE)
+            .build())
+          .build();
+  }
+
+  @Override
+  public List<Class<?>> getDependencyDocumentClasses() throws AppSearchException {
+    return Collections.emptyList();
+  }
+
+  @Override
+  public GenericDocument toGenericDocument(Gift document) throws AppSearchException {
+    GenericDocument.Builder<?> builder =
+        new GenericDocument.Builder<>(document.namespace(), document.id(), SCHEMA_NAME);
+    String propertyCopy = document.property();
+    if (propertyCopy != null) {
+      builder.setPropertyString("property", propertyCopy);
+    }
+    return builder.build();
+  }
+
+  @Override
+  public Gift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+    String namespaceConv = genericDoc.getNamespace();
+    String idConv = genericDoc.getId();
+    String[] propertyCopy = genericDoc.getPropertyStringArray("property");
+    String propertyConv = null;
+    if (propertyCopy != null && propertyCopy.length != 0) {
+      propertyConv = propertyCopy[0];
+    }
+    Gift document = Gift.create(idConv, namespaceConv, propertyConv);
+    return document;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_0.JAVA
new file mode 100644
index 0000000..4b302b6
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_0.JAVA
@@ -0,0 +1,24 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_8bbdfb6f96b48bfad89bc598cab2960300d30e5388d5aaa970ab2db67993d889_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Person", Arrays.asList("com.example.appsearch.Person"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_1.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_1.JAVA
new file mode 100644
index 0000000..4e88fc3
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_1.JAVA
@@ -0,0 +1,24 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_71ecb22a3f48746c4261bd34b4ba3c2861632443de7f7c577156ec583523e7f6_1 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDocumentClassesWithDuplicatedNamesDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDocumentClassesWithDuplicatedNamesDocumentMap_0.JAVA
new file mode 100644
index 0000000..72c5bc0
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDocumentClassesWithDuplicatedNamesDocumentMap_0.JAVA
@@ -0,0 +1,25 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_be3cf5fe3ee0964354144ba564257ea30a4560a4f416181f226daea685c5fde5_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("A", Arrays.asList("com.example.appsearch.MyClass1", "com.example.appsearch.MyClass2"));
+    result.put("B", Arrays.asList("com.example.appsearch.MyClass3"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInterfaceImplementingParentsDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInterfaceImplementingParentsDocumentMap_0.JAVA
new file mode 100644
index 0000000..53c51e5
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInterfaceImplementingParentsDocumentMap_0.JAVA
@@ -0,0 +1,27 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_fc605c65514dc62366bce05ca8e3a0a22e13d867acb0e63a098ee18dbd2de01e_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    result.put("Root", Arrays.asList("com.example.appsearch.Root"));
+    result.put("Parent2", Arrays.asList("com.example.appsearch.Parent2"));
+    result.put("Parent1", Arrays.asList("com.example.appsearch.Parent1"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPolymorphismDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPolymorphismDocumentMap_0.JAVA
new file mode 100644
index 0000000..1bfb085
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPolymorphismDocumentMap_0.JAVA
@@ -0,0 +1,26 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_3564af6e02075934601ae45e21da1e65bb69157de5fa8378ab5beb7f70e61d84_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    result.put("Parent2", Arrays.asList("com.example.appsearch.Parent2"));
+    result.put("Parent1", Arrays.asList("com.example.appsearch.Parent1"));
+    return result;
+  }
+}
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
index c2ddc3a..ce079ea 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
@@ -17,6 +17,7 @@
 package androidx.benchmark
 
 import android.Manifest
+import android.os.Build
 import androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.FlakyTest
@@ -162,10 +163,13 @@
         val report = state.getReport()
 
         // '50' assumes we're not running in a special mode
-        // that affects repeat count (dry run, profiling)
+        // that affects repeat count (dry run)
         val expectedRepeatCount = 50 +
-            if (!simplifiedTimingOnlyMode) BenchmarkState.REPEAT_COUNT_ALLOCATION else 0
-        val expectedCount = report.warmupIterations + report.repeatIterations * expectedRepeatCount
+            if (simplifiedTimingOnlyMode) 0 else BenchmarkState.REPEAT_COUNT_ALLOCATION
+        val expectedCount = report.warmupIterations +
+            report.repeatIterations * expectedRepeatCount +
+            // method tracing phase by default only when API > 21, and simplified timing off
+            if (simplifiedTimingOnlyMode || Build.VERSION.SDK_INT <= 21) 0 else 1
         assertEquals(expectedCount, total)
 
         if (Arguments.iterations != null) {
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
index 0577141..c866e25 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
@@ -16,6 +16,7 @@
 
 package androidx.benchmark
 
+import android.os.Build
 import android.os.Bundle
 import android.util.Log
 import androidx.annotation.RestrictTo
@@ -70,6 +71,7 @@
     internal val startupMode: Boolean
     internal val iterations: Int?
     internal val profiler: Profiler?
+    internal val profilerDefault: Boolean
     internal val profilerSampleFrequency: Int
     internal val profilerSampleDurationSeconds: Long
     internal val thermalThrottleSleepDurationSeconds: Long
@@ -84,9 +86,18 @@
     private fun Bundle.getBenchmarkArgument(key: String, defaultValue: String? = null) =
         getString(prefix + key, defaultValue)
 
-    private fun Bundle.getProfiler(outputIsEnabled: Boolean): Profiler? {
+    private fun Bundle.getProfiler(outputIsEnabled: Boolean): Pair<Profiler?, Boolean> {
         val argumentName = "profiling.mode"
-        val argumentValue = getBenchmarkArgument(argumentName, "")
+        val argumentValue = getBenchmarkArgument(argumentName, "DEFAULT_VAL")
+        if (argumentValue == "DEFAULT_VAL") {
+            return if (Build.VERSION.SDK_INT > 21) {
+                MethodTracing to true
+            } else {
+                // Method tracing can corrupt the stack on API 21, see b/300658578
+                null to true
+            }
+        }
+
         val profiler = Profiler.getByName(argumentValue)
         if (profiler == null &&
             argumentValue.isNotEmpty() &&
@@ -95,13 +106,13 @@
             argumentValue.trim().lowercase() != "none"
         ) {
             error = "Could not parse $prefix$argumentName=$argumentValue"
-            return null
+            return null to false
         }
         if (profiler?.requiresLibraryOutputDir == true && !outputIsEnabled) {
             error = "Output is not enabled, so cannot profile with mode $argumentValue"
-            return null
+            return null to false
         }
-        return profiler
+        return profiler to false
     }
 
     // note: initialization may happen at any time
@@ -165,7 +176,9 @@
         enableCompilation =
             arguments.getBenchmarkArgument("compilation.enabled")?.toBoolean() ?: !dryRunMode
 
-        profiler = arguments.getProfiler(outputEnable)
+        val profilerState = arguments.getProfiler(outputEnable)
+        profiler = profilerState.first
+        profilerDefault = profilerState.second
         profilerSampleFrequency =
             arguments.getBenchmarkArgument("profiling.sampleFrequency")?.ifBlank { null }
                 ?.toInt()
@@ -213,11 +226,11 @@
             arguments.getBenchmarkArgument("startupProfiles.enable")?.toBoolean() ?: true
     }
 
-    fun methodTracingEnabled(): Boolean {
+    fun macrobenchMethodTracingEnabled(): Boolean {
         return when {
             dryRunMode -> false
-            profiler == MethodTracing -> true
-            else -> false
+            profilerDefault -> false // don't enable tracing by default in macrobench
+            else -> profiler == MethodTracing
         }
     }
 
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
index f3214ed..b5614e4 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
@@ -150,7 +150,7 @@
                 """.trimIndent()
             ),
             conditionalError(
-                hasError = Arguments.methodTracingEnabled(),
+                hasError = Arguments.macrobenchMethodTracingEnabled(),
                 id = "METHOD-TRACING-ENABLED",
                 summary = "Method tracing is enabled during a Macrobenchmark",
                 message = """
@@ -207,7 +207,7 @@
 
     val startTime = System.nanoTime()
     // Ensure method tracing is explicitly enabled and that we are not running in dry run mode.
-    val launchWithMethodTracing = Arguments.methodTracingEnabled()
+    val launchWithMethodTracing = Arguments.macrobenchMethodTracingEnabled()
     val scope = MacrobenchmarkScope(
         packageName,
         launchWithClearTask = launchWithClearTask
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt
index ecb8606..1688a27 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt
@@ -367,7 +367,7 @@
          * @param characteristic the updated characteristic
          * @param value the new value of the characteristic
          *
-         * @return `true` if the notification sent successfully
+         * @return `true` if the notification sent successfully, otherwise `false`
          */
         suspend fun notify(characteristic: GattCharacteristic, value: ByteArray): Boolean
     }
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt
index 5419aaa..9b5ebce 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt
@@ -76,6 +76,8 @@
     /**
      * Represents a request to write characteristics.
      *
+     * If two or more writes are requested, they are expected to be written in order.
+     *
      * @property parts a list of write request parts
      */
     class WriteCharacteristics internal constructor(
@@ -104,6 +106,13 @@
         /**
          * A part of write requests.
          *
+         * It represents a partial write request such that
+         * [value] is to be written to a part of [characteristic] based on [offset].
+         * <p>
+         * For example, if the [offset] is 2, the first byte of [value] should be written to
+         * the third byte of the [characteristic], and the second byte of [value] should be
+         * written to the fourth byte of the [characteristic] and so on.
+         *
          * @property characteristic a characteristic to write
          * @property offset an offset of the first octet to be written
          * @property value a value to be written
diff --git a/bluetooth/integration-tests/testapp/build.gradle b/bluetooth/integration-tests/testapp/build.gradle
index cc88bde..b4922bd 100644
--- a/bluetooth/integration-tests/testapp/build.gradle
+++ b/bluetooth/integration-tests/testapp/build.gradle
@@ -49,13 +49,13 @@
     implementation("androidx.activity:activity-ktx:1.7.2")
     implementation("androidx.appcompat:appcompat:1.6.1")
     implementation(libs.constraintLayout)
-    implementation("androidx.core:core-ktx:1.10.1")
-    implementation("androidx.fragment:fragment-ktx:1.6.0")
-    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
-    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
-    implementation("androidx.navigation:navigation-fragment-ktx:2.6.0")
-    implementation("androidx.navigation:navigation-ui-ktx:2.6.0")
-    implementation("androidx.recyclerview:recyclerview:1.3.0")
+    implementation("androidx.core:core-ktx:1.12.0")
+    implementation("androidx.fragment:fragment-ktx:1.6.1")
+    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
+    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
+    implementation("androidx.navigation:navigation-fragment-ktx:2.7.3")
+    implementation("androidx.navigation:navigation-ui-ktx:2.7.3")
+    implementation("androidx.recyclerview:recyclerview:1.3.1")
 
     implementation(libs.material)
 
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
index 66cddcb..6a0139f 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
@@ -46,7 +46,6 @@
 import androidx.recyclerview.widget.DividerItemDecoration
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.google.android.material.tabs.TabLayout
-import java.nio.ByteBuffer
 import java.util.UUID
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -321,10 +320,19 @@
     // Permissions are handled by MainActivity requestBluetoothPermissions
     @SuppressLint("MissingPermission")
     private fun startAdvertise() {
+        Log.d(TAG, "startAdvertise() called")
+
         advertiseJob = advertiseScope.launch {
+            Log.d(
+                TAG, "bluetoothLe.advertise() called with: " +
+                    "viewModel.advertiseParams = ${viewModel.advertiseParams}"
+            )
+
             isAdvertising = true
 
             bluetoothLe.advertise(viewModel.advertiseParams) {
+                Log.d(TAG, "bluetoothLe.advertise result: AdvertiseResult = $it")
+
                 when (it) {
                     BluetoothLe.ADVERTISE_STARTED -> {
                         toast("ADVERTISE_STARTED").show()
@@ -355,6 +363,8 @@
     }
 
     private fun onAddGattService() {
+        Log.d(TAG, "onAddGattService() called")
+
         val editTextUuid = EditText(requireActivity())
         editTextUuid.hint = getString(R.string.service_uuid)
 
@@ -386,6 +396,11 @@
     }
 
     private fun onAddGattCharacteristic(bluetoothGattService: GattService) {
+        Log.d(
+            TAG, "onAddGattCharacteristic() called with: " +
+                "bluetoothGattService = $bluetoothGattService"
+        )
+
         val view = layoutInflater.inflate(R.layout.dialog_add_characteristic, null)
         val editTextUuid = view.findViewById<EditText>(R.id.edit_text_uuid)
 
@@ -457,24 +472,73 @@
         Log.d(TAG, "openGattServer() called")
 
         gattServerJob = gattServerScope.launch {
+            Log.d(
+                TAG, "bluetoothLe.openGattServer() called with: " +
+                    "viewModel.gattServerServices = ${viewModel.gattServerServices}"
+            )
+
             isGattServerOpen = true
 
             bluetoothLe.openGattServer(viewModel.gattServerServices) {
+                Log.d(
+                    TAG, "bluetoothLe.openGattServer() called with: " +
+                        "viewModel.gattServerServices = ${viewModel.gattServerServices}"
+                )
+
                 connectRequests.collect {
+                    Log.d(TAG, "connectRequests.collected: GattServerConnectRequest = $it")
+
                     launch {
                         it.accept {
-                            requests.collect {
-                                // TODO(b/269390098): handle request correctly
-                                when (it) {
-                                    is GattServerRequest.ReadCharacteristic ->
-                                        it.sendResponse(
-                                            ByteBuffer.allocate(Int.SIZE_BYTES).putInt(1).array()
+                            Log.d(
+                                TAG, "GattServerConnectRequest accepted: " +
+                                    "GattServerSessionScope = $it"
+                            )
+
+                            requests.collect { gattServerRequest ->
+                                Log.d(
+                                    TAG, "requests collected: " +
+                                        "gattServerRequest = $gattServerRequest"
+                                )
+
+                                // TODO(b/269390098): Handle requests correctly
+                                when (gattServerRequest) {
+                                    is GattServerRequest.ReadCharacteristic -> {
+                                        val characteristic = gattServerRequest.characteristic
+
+                                        val value = viewModel.readGattCharacteristicValue(
+                                            characteristic
                                         )
 
-                                    is GattServerRequest.WriteCharacteristics ->
-                                        it.sendResponse()
+                                        toast(
+                                            "Read value: ${value.decodeToString()} " +
+                                                "for characteristic = ${characteristic.uuid}"
+                                        ).show()
 
-                                    else -> throw NotImplementedError("unknown request")
+                                        gattServerRequest.sendResponse(value)
+                                    }
+
+                                    is GattServerRequest.WriteCharacteristics -> {
+                                        val characteristic =
+                                            gattServerRequest.parts[0].characteristic
+                                        val value = gattServerRequest.parts[0].value
+
+                                        toast(
+                                            "Writing value: ${value.decodeToString()} " +
+                                                "to characteristic = ${characteristic.uuid}"
+                                        ).show()
+
+                                        viewModel.updateGattCharacteristicValue(
+                                            characteristic,
+                                            value
+                                        )
+
+                                        gattServerRequest.sendResponse()
+                                    }
+
+                                    else -> {
+                                        throw NotImplementedError("Unknown request")
+                                    }
                                 }
                             }
                         }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
index 99cb7f8..324c27f 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
@@ -65,6 +65,9 @@
     private val _gattServerServices = mutableListOf<GattService>()
     val gattServerServices: List<GattService> = _gattServerServices
 
+    private val gattServerServicesCharacteristicValueMap =
+        mutableMapOf<GattCharacteristic, ByteArray>()
+
     fun removeAdvertiseDataAtIndex(index: Int) {
         val manufacturerDataSize = manufacturerDatas.size
         val serviceDataSize = serviceDatas.size
@@ -91,4 +94,12 @@
             }
         )
     }
+
+    fun readGattCharacteristicValue(characteristic: GattCharacteristic): ByteArray {
+        return gattServerServicesCharacteristicValueMap[characteristic] ?: ByteArray(0)
+    }
+
+    fun updateGattCharacteristicValue(characteristic: GattCharacteristic, value: ByteArray) {
+        gattServerServicesCharacteristicValueMap[characteristic] = value
+    }
 }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt
index 7dc418f..4a9a85e 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt
@@ -26,7 +26,6 @@
 import androidx.bluetooth.integration.testapp.R
 import androidx.bluetooth.integration.testapp.data.connection.DeviceConnection
 import androidx.bluetooth.integration.testapp.data.connection.OnClickCharacteristic
-import androidx.bluetooth.integration.testapp.ui.common.toHexString
 import androidx.core.view.isVisible
 import androidx.recyclerview.widget.RecyclerView
 
@@ -133,10 +132,7 @@
 
             val value = deviceConnection.valueFor(characteristic)
             layoutValue.isVisible = value != null
-            textViewValue.text = buildString {
-                append("toHexString: " + value?.toHexString() + "\n")
-                append("decodeToString: " + value?.decodeToString())
-            }
+            textViewValue.text = value?.decodeToString()
         }
     }
 }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
index 186431f..69ac0f4 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
@@ -47,6 +47,7 @@
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Job
+import kotlinx.coroutines.awaitCancellation
 import kotlinx.coroutines.cancel
 import kotlinx.coroutines.launch
 
@@ -191,19 +192,33 @@
 
     @SuppressLint("MissingPermission")
     private fun startScan() {
+        Log.d(TAG, "startScan() called")
+
         scanJob = scanScope.launch {
+            Log.d(TAG, "bluetoothLe.scan() called")
+
             isScanning = true
 
-            bluetoothLe.scan()
-                .collect {
-                    Log.d(TAG, "ScanResult collected: $it")
+            try {
+                bluetoothLe.scan()
+                    .collect {
+                        Log.d(TAG, "bluetoothLe.scan() collected: ScanResult = $it")
 
-                    viewModel.addScanResultIfNew(it)
+                        viewModel.addScanResultIfNew(it)
+                    }
+            } catch (exception: Exception) {
+                isScanning = false
+
+                if (exception is CancellationException) {
+                    Log.e(TAG, "bluetoothLe.scan() CancellationException", exception)
                 }
+            }
         }
     }
 
     private fun onClickScanResult(bluetoothDevice: BluetoothDevice) {
+        Log.d(TAG, "onClickScanResult() called with: bluetoothDevice = $bluetoothDevice")
+
         isScanning = false
 
         val index = viewModel.addDeviceConnectionIfNew(bluetoothDevice)
@@ -226,6 +241,8 @@
 
     @SuppressLint("MissingPermission")
     private fun addNewTab(bluetoothDevice: BluetoothDevice): Tab {
+        Log.d(TAG, "addNewTab() called with: bluetoothDevice = $bluetoothDevice")
+
         val deviceId = bluetoothDevice.id.toString()
         val deviceName = bluetoothDevice.name
 
@@ -238,6 +255,8 @@
         textViewName?.text = deviceName
         textViewName?.isVisible = deviceName.isNullOrEmpty().not()
         customView?.findViewById<Button>(R.id.image_button_remove)?.setOnClickListener {
+            Log.d(TAG, "removeTab() called with: bluetoothDevice = $bluetoothDevice")
+
             viewModel.remove(bluetoothDevice)
             binding.tabLayout.removeTab(newTab)
         }
@@ -257,8 +276,13 @@
             }
 
             try {
+                Log.d(
+                    TAG, "bluetoothLe.connectGatt() called with: " +
+                        "deviceConnection.bluetoothDevice = ${deviceConnection.bluetoothDevice}"
+                )
+
                 bluetoothLe.connectGatt(deviceConnection.bluetoothDevice) {
-                    Log.d(TAG, "connectGatt result: services() = $services")
+                    Log.d(TAG, "bluetoothLe.connectGatt result: services() = $services")
 
                     deviceConnection.status = Status.CONNECTED
                     deviceConnection.services = services
@@ -268,73 +292,107 @@
 
                     // TODO(ofy) Improve this. Remove OnClickCharacteristic as it's not ideal
                     // to hold so many OnClickCharacteristic and difficult to use with Compose.
-                    deviceConnection.onClickReadCharacteristic =
-                        object : OnClickCharacteristic {
-                            override fun onClick(
-                                deviceConnection: DeviceConnection,
-                                characteristic: GattCharacteristic
-                            ) {
-                                connectScope.launch {
-                                    val result = readCharacteristic(characteristic)
-                                    Log.d(TAG, "readCharacteristic() called with: result = $result")
+                    deviceConnection.onClickReadCharacteristic = object : OnClickCharacteristic {
+                        override fun onClick(
+                            deviceConnection: DeviceConnection,
+                            characteristic: GattCharacteristic
+                        ) {
+                            Log.d(
+                                TAG, "onClick() called with: " +
+                                    "deviceConnection = $deviceConnection, " +
+                                    "characteristic = $characteristic"
+                            )
 
-                                    deviceConnection.storeValueFor(
-                                        characteristic,
-                                        result.getOrNull()
-                                    )
-                                    launch(Dispatchers.Main) {
-                                        updateDeviceUI(deviceConnection)
-                                    }
+                            connectScope.launch {
+                                Log.d(
+                                    TAG, "readCharacteristic() called with: " +
+                                        "characteristic = $characteristic"
+                                )
+
+                                val result = readCharacteristic(characteristic)
+
+                                Log.d(TAG, "readCharacteristic() result: result = $result")
+
+                                deviceConnection.storeValueFor(
+                                    characteristic,
+                                    result.getOrNull()
+                                )
+                                launch(Dispatchers.Main) {
+                                    updateDeviceUI(deviceConnection)
                                 }
                             }
                         }
+                    }
 
                     // TODO(ofy) Improve this. Remove OnClickCharacteristic as it's not ideal
                     // to hold so many OnClickCharacteristic and difficult to use with Compose.
-                    deviceConnection.onClickWriteCharacteristic =
-                        object : OnClickCharacteristic {
-                            override fun onClick(
-                                deviceConnection: DeviceConnection,
-                                characteristic: GattCharacteristic
-                            ) {
-                                val view = layoutInflater.inflate(
-                                    R.layout.dialog_write_characteristic,
-                                    null
-                                )
-                                val editTextValue =
-                                    view.findViewById<EditText>(R.id.edit_text_value)
+                    deviceConnection.onClickWriteCharacteristic = object : OnClickCharacteristic {
+                        override fun onClick(
+                            deviceConnection: DeviceConnection,
+                            characteristic: GattCharacteristic
+                        ) {
+                            Log.d(
+                                TAG, "onClick() called with: " +
+                                    "deviceConnection = $deviceConnection, " +
+                                    "characteristic = $characteristic"
+                            )
 
-                                AlertDialog.Builder(requireContext())
-                                    .setTitle(getString(R.string.write))
-                                    .setView(view)
-                                    .setPositiveButton(getString(R.string.write)) { _, _ ->
-                                        val editTextValueString = editTextValue.text.toString()
-                                        val value = editTextValueString.toByteArray()
+                            val view = layoutInflater.inflate(
+                                R.layout.dialog_write_characteristic,
+                                null
+                            )
+                            val editTextValue =
+                                view.findViewById<EditText>(R.id.edit_text_value)
 
-                                        connectScope.launch {
-                                            val result = writeCharacteristic(
-                                                characteristic,
-                                                value
+                            AlertDialog.Builder(requireContext())
+                                .setTitle(getString(R.string.write))
+                                .setView(view)
+                                .setPositiveButton(getString(R.string.write)) { _, _ ->
+                                    val editTextValueString = editTextValue.text.toString()
+                                    val value = editTextValueString.toByteArray()
+
+                                    connectScope.launch {
+                                        Log.d(
+                                            TAG, "writeCharacteristic() called with: " +
+                                                "characteristic = $characteristic, " +
+                                                "value = ${value.decodeToString()}"
+                                        )
+
+                                        val result = writeCharacteristic(characteristic, value)
+
+                                        Log.d(
+                                            TAG, "writeCharacteristic() result: " +
+                                                "result = $result"
+                                        )
+
+                                        launch(Dispatchers.Main) {
+                                            toast(
+                                                "Called write with: $editTextValueString, " +
+                                                    "result = $result"
                                             )
-                                            Log.d(TAG, "writeCharacteristic() called with: " +
-                                                "result = $result")
-                                            launch(Dispatchers.Main) {
-                                                toast("Called write with: `$editTextValueString`")
-                                                    .show()
-                                            }
+                                                .show()
                                         }
                                     }
-                                    .setNegativeButton(getString(R.string.cancel), null)
-                                    .create()
-                                    .show()
-                            }
+                                }
+                                .setNegativeButton(getString(R.string.cancel), null)
+                                .create()
+                                .show()
                         }
+                    }
+
+                    awaitCancellation()
                 }
             } catch (exception: Exception) {
                 if (exception is CancellationException) {
-                    Log.d(TAG, "connectGatt() CancellationException")
+                    Log.e(TAG, "connectGatt() CancellationException", exception)
+
+                    deviceConnection.status = Status.DISCONNECTED
+                    launch(Dispatchers.Main) {
+                        updateDeviceUI(deviceConnection)
+                    }
                 } else {
                     Log.e(TAG, "connectGatt() exception", exception)
+
                     deviceConnection.status = Status.DISCONNECTED
                     launch(Dispatchers.Main) {
                         updateDeviceUI(deviceConnection)
@@ -365,11 +423,13 @@
                 binding.textViewDeviceConnectionStatus.setTextColor(getColor(R.color.green_500))
                 binding.buttonReconnect.isVisible = true
             }
+
             Status.CONNECTING -> {
                 binding.progressIndicatorDeviceConnection.isVisible = true
                 binding.textViewDeviceConnectionStatus.text = getString(R.string.connecting)
                 binding.textViewDeviceConnectionStatus.setTextColor(getColor(R.color.indigo_500))
             }
+
             Status.CONNECTED -> {
                 binding.textViewDeviceConnectionStatus.text = getString(R.string.connected)
                 binding.textViewDeviceConnectionStatus.setTextColor(getColor(R.color.indigo_500))
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml
index c61798e..4426518 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml
@@ -15,27 +15,16 @@
   limitations under the License.
   -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:paddingStart="16dp"
     android:paddingTop="8dp"
     android:paddingEnd="16dp">
 
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="0x"
-        android:textColor="@color/black"
-        android:textSize="21sp"
-        tools:ignore="HardcodedText" />
-
     <EditText
         android:id="@+id/edit_text_value"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginStart="4dp"
-        android:layout_marginEnd="4dp"
         android:hint="@string/value"
         android:inputType="text" />
 
diff --git a/browser/browser/api/api_lint.ignore b/browser/browser/api/api_lint.ignore
index bec6b20..4135ef4 100644
--- a/browser/browser/api/api_lint.ignore
+++ b/browser/browser/api/api_lint.ignore
@@ -39,8 +39,6 @@
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.SEND_TO_EXTERNAL_DEFAULT_HANDLER`, was `android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SESSION:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.SESSION`, was `android.support.customtabs.extra.SESSION`
-ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR:
-    Inconsistent extra value; expected `androidx.browser.customtabs.extra.SHOW_ON_TOOLBAR`, was `android.support.customtabs.customaction.SHOW_ON_TOOLBAR`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_TINT_ACTION_BUTTON:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.TINT_ACTION_BUTTON`, was `android.support.customtabs.extra.TINT_ACTION_BUTTON`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_TITLE_VISIBILITY_STATE:
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index 02dd082..fd57d8a 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -111,7 +111,6 @@
     method public static boolean isBookmarksButtonEnabled(android.content.Intent);
     method public static boolean isDownloadButtonEnabled(android.content.Intent);
     method public static boolean isSendToExternalDefaultHandlerEnabled(android.content.Intent);
-    method public static boolean isShowOnToolbarEnabled(android.content.Intent);
     method public void launchUrl(android.content.Context, android.net.Uri);
     method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
     method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
@@ -150,7 +149,6 @@
     field public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER = "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER";
     field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
     field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
-    field public static final String EXTRA_SHOW_ON_TOOLBAR = "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
     field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
     field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
     field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
@@ -204,7 +202,6 @@
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareIdentityEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
-    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowOnToolbarEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 1e7b718..f59bc7c1 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -122,7 +122,6 @@
     method public static boolean isBookmarksButtonEnabled(android.content.Intent);
     method public static boolean isDownloadButtonEnabled(android.content.Intent);
     method public static boolean isSendToExternalDefaultHandlerEnabled(android.content.Intent);
-    method public static boolean isShowOnToolbarEnabled(android.content.Intent);
     method public void launchUrl(android.content.Context, android.net.Uri);
     method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
     method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
@@ -161,7 +160,6 @@
     field public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER = "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER";
     field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
     field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
-    field public static final String EXTRA_SHOW_ON_TOOLBAR = "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
     field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
     field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
     field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
@@ -215,7 +213,6 @@
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareIdentityEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
-    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowOnToolbarEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
index 877a2f5..f1e50ed 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
@@ -192,14 +192,6 @@
             "androidx.browser.customtabs.extra.DISABLE_BACKGROUND_INTERACTION";
 
     /**
-     * Extra that enables the client to add an additional action button to the toolbar.
-     * If the bitmap icon does not fit on the toolbar then the action button will be
-     * added to the secondary toolbar.
-     */
-    public static final String EXTRA_SHOW_ON_TOOLBAR =
-            "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
-
-    /**
      * Extra that specifies the {@link PendingIntent} to be sent when the user swipes up from
      * the secondary (bottom) toolbar.
      */
@@ -1182,20 +1174,6 @@
         }
 
         /**
-         * Enables the client to add an additional action button to the toolbar. If the bitmap
-         * icon does not fit on the toolbar then the action button will be added to the secondary
-         * toolbar.
-         *
-         * @param enabled Whether the additional actions can be added to the toolbar.
-         * @see CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR
-         */
-        @NonNull
-        public Builder setShowOnToolbarEnabled(boolean enabled) {
-            mIntent.putExtra(EXTRA_SHOW_ON_TOOLBAR, enabled);
-            return this;
-        }
-
-        /**
          * Allow Custom Tabs to obtain the caller's identity i.e. package name.
          * @param enabled Whether the identity sharing is enabled.
          */
@@ -1463,14 +1441,6 @@
     }
 
     /**
-     * @return Whether the additional actions can be added to the toolbar.
-     * @see CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR
-     */
-    public static boolean isShowOnToolbarEnabled(@NonNull Intent intent) {
-        return intent.getBooleanExtra(EXTRA_SHOW_ON_TOOLBAR, false);
-    }
-
-    /**
      * @return The {@link PendingIntent} that will be sent when the user swipes up
      *     from the secondary toolbar.
      * @see CustomTabsIntent#EXTRA_SECONDARY_TOOLBAR_SWIPE_UP_GESTURE
diff --git a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
index aee0f19..4978624 100644
--- a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
+++ b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
@@ -599,19 +599,6 @@
         assertFalse(CustomTabsIntent.isBackgroundInteractionEnabled(intent));
     }
 
-    @Test
-    public void testShowOnToolbar() {
-        Intent intent = new CustomTabsIntent.Builder().build().intent;
-        assertFalse(CustomTabsIntent.isShowOnToolbarEnabled(intent));
-
-        intent = new CustomTabsIntent.Builder().setShowOnToolbarEnabled(false).build().intent;
-        assertFalse(CustomTabsIntent.isShowOnToolbarEnabled(intent));
-
-        // The extra is set to true only when explicitly called to enable it.
-        intent = new CustomTabsIntent.Builder().setShowOnToolbarEnabled(true).build().intent;
-        assertTrue(CustomTabsIntent.isShowOnToolbarEnabled(intent));
-    }
-
     @Config(minSdk = Build.VERSION_CODES.N)
     @Test
     public void testTranslateLocale() {
diff --git a/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt b/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
index 4efa132..9f3be62 100644
--- a/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
+++ b/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
@@ -360,7 +360,6 @@
     <option name="instrumentation-arg" key="notAnnotation" value="androidx.test.filters.FlakyTest" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.InstrumentationResultsRunListener" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.SideEffectRunListener" />
-    <option name="instrumentation-arg" key="androidx.benchmark.profiling.mode" value="MethodTracing" />
     <include name="google/unbundled/common/setup" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
     <option name="cleanup-apks" value="true" />
diff --git a/buildSrc/imports/README.md b/buildSrc/imports/README.md
new file mode 100644
index 0000000..7de92c8
--- /dev/null
+++ b/buildSrc/imports/README.md
@@ -0,0 +1,3 @@
+This directory contains projects that just mirror the corresponding project in the main build in ../..
+
+This may be useful if a project in ../.. creates a plugin that another project wants to apply
diff --git a/buildSrc/imports/baseline-profile-gradle-plugin/build.gradle b/buildSrc/imports/baseline-profile-gradle-plugin/build.gradle
new file mode 100644
index 0000000..c40a849
--- /dev/null
+++ b/buildSrc/imports/baseline-profile-gradle-plugin/build.gradle
@@ -0,0 +1,34 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+    main.java.srcDirs += "${supportRootFolder}" +
+            "/benchmark/baseline-profile-gradle-plugin/src/main/kotlin"
+    main.resources.srcDirs += "${supportRootFolder}" +
+            "/benchmark/baseline-profile-gradle-plugin/src/main/resources"
+}
+
+gradlePlugin {
+    plugins {
+        baselineProfileProducer {
+            id = "androidx.baselineprofile.producer"
+            implementationClass = "androidx.baselineprofile.gradle.producer.BaselineProfileProducerPlugin"
+        }
+        baselineProfileConsumer {
+            id = "androidx.baselineprofile.consumer"
+            implementationClass = "androidx.baselineprofile.gradle.consumer.BaselineProfileConsumerPlugin"
+        }
+        baselineProfileAppTarget {
+            id = "androidx.baselineprofile.apptarget"
+            implementationClass = "androidx.baselineprofile.gradle.apptarget.BaselineProfileAppTargetPlugin"
+        }
+        baselineProfileWrapper {
+            id = "androidx.baselineprofile"
+            implementationClass = "androidx.baselineprofile.gradle.wrapper.BaselineProfileWrapperPlugin"
+        }
+    }
+}
+
+validatePlugins {
+    enableStricterValidation = true
+}
diff --git a/buildSrc/imports/benchmark-darwin-plugin/build.gradle b/buildSrc/imports/benchmark-darwin-plugin/build.gradle
new file mode 100644
index 0000000..3dd24f0
--- /dev/null
+++ b/buildSrc/imports/benchmark-darwin-plugin/build.gradle
@@ -0,0 +1,24 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+    main.java.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin"
+    main.resources.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/resources"
+}
+
+dependencies {
+    implementation(libs.apacheCommonsMath)
+}
+
+gradlePlugin {
+    plugins {
+        darwinBenchmark {
+            id = "androidx.benchmark.darwin"
+            implementationClass = "androidx.benchmark.darwin.gradle.DarwinBenchmarkPlugin"
+        }
+    }
+}
+
+validatePlugins {
+    enableStricterValidation = true
+}
diff --git a/buildSrc/imports/benchmark-gradle-plugin/build.gradle b/buildSrc/imports/benchmark-gradle-plugin/build.gradle
new file mode 100644
index 0000000..98ad0ec
--- /dev/null
+++ b/buildSrc/imports/benchmark-gradle-plugin/build.gradle
@@ -0,0 +1,20 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+    main.java.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/kotlin"
+    main.resources.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/resources"
+}
+
+gradlePlugin {
+    plugins {
+        benchmark {
+            id = "androidx.benchmark"
+            implementationClass = "androidx.benchmark.gradle.BenchmarkPlugin"
+        }
+    }
+}
+
+validatePlugins {
+    enableStricterValidation = true
+}
diff --git a/buildSrc/imports/compose-icons/build.gradle b/buildSrc/imports/compose-icons/build.gradle
new file mode 100644
index 0000000..2c17324
--- /dev/null
+++ b/buildSrc/imports/compose-icons/build.gradle
@@ -0,0 +1,6 @@
+apply from: "../../shared.gradle"
+
+sourceSets {
+    main.java.srcDirs += "${supportRootFolder}/compose/material/material/icons/generator/src/main" +
+            "/kotlin"
+}
diff --git a/buildSrc/imports/glance-layout-generator/build.gradle b/buildSrc/imports/glance-layout-generator/build.gradle
new file mode 100644
index 0000000..71f1bec
--- /dev/null
+++ b/buildSrc/imports/glance-layout-generator/build.gradle
@@ -0,0 +1,6 @@
+apply from: "../../shared.gradle"
+
+sourceSets {
+    main.java.srcDirs += "${supportRootFolder}/glance/glance-appwidget/glance-layout-generator/" +
+            "src/main/kotlin"
+}
diff --git a/buildSrc/imports/inspection-gradle-plugin/build.gradle b/buildSrc/imports/inspection-gradle-plugin/build.gradle
new file mode 100644
index 0000000..572e990
--- /dev/null
+++ b/buildSrc/imports/inspection-gradle-plugin/build.gradle
@@ -0,0 +1,21 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+    main.java.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main/kotlin"
+    main.resources.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main" +
+            "/resources"
+}
+
+gradlePlugin {
+    plugins {
+        inspection {
+            id = "androidx.inspection"
+            implementationClass = "androidx.inspection.gradle.InspectionPlugin"
+        }
+    }
+}
+
+validatePlugins {
+    enableStricterValidation = true
+}
diff --git a/buildSrc/imports/stableaidl-gradle-plugin/build.gradle b/buildSrc/imports/stableaidl-gradle-plugin/build.gradle
new file mode 100644
index 0000000..22f5967
--- /dev/null
+++ b/buildSrc/imports/stableaidl-gradle-plugin/build.gradle
@@ -0,0 +1,19 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+    main.java.srcDirs += "${supportRootFolder}/stableaidl/stableaidl-gradle-plugin/src/main/java"
+}
+
+gradlePlugin {
+    plugins {
+        stableaidl {
+            id = "androidx.stableaidl"
+            implementationClass = "androidx.stableaidl.StableAidlPlugin"
+        }
+    }
+}
+
+validatePlugins {
+    enableStricterValidation = true
+}
diff --git a/buildSrc/out.gradle b/buildSrc/out.gradle
index e0f12c2..8fd588f 100644
--- a/buildSrc/out.gradle
+++ b/buildSrc/out.gradle
@@ -44,7 +44,7 @@
     def (outDir, buildSrcOut) = getOutDir(subdir)
     project.ext.buildSrcOut = buildSrcOut
     project.ext.outDir = outDir
-    def pathAsFilepath = project.path.replace(":", "").replaceAll(":", "/")
+    def pathAsFilepath = project.path.replaceFirst(":", "").replaceAll(":", "/")
     project.layout.buildDirectory.set(new File(buildSrcOut, "$pathAsFilepath/build").getCanonicalFile())
 }
 
diff --git a/buildSrc/plugins/README.md b/buildSrc/plugins/README.md
index 68b1cc4..363e1b4 100644
--- a/buildSrc/plugins/README.md
+++ b/buildSrc/plugins/README.md
@@ -1,3 +1,5 @@
 This is the :buildSrc:plugins project
 
 It contains plugins to be applied by various other projects in this repository
+
+The plugins in this project do not get published to remote repositories
diff --git a/buildSrc/plugins/build.gradle b/buildSrc/plugins/build.gradle
index f5ca9cf..d09f782 100644
--- a/buildSrc/plugins/build.gradle
+++ b/buildSrc/plugins/build.gradle
@@ -2,6 +2,13 @@
 
 dependencies {
     implementation(project(":public"))
+    api project(":imports:baseline-profile-gradle-plugin")
+    api project(":imports:benchmark-darwin-plugin")
+    api project(":imports:benchmark-gradle-plugin")
+    api project(":imports:compose-icons")
+    api project(":imports:glance-layout-generator")
+    api project(":imports:inspection-gradle-plugin")
+    api project(":imports:stableaidl-gradle-plugin")
 }
 
 apply from: "../shared.gradle"
diff --git a/buildSrc/private/build.gradle b/buildSrc/private/build.gradle
index 21d6482..2c576dd 100644
--- a/buildSrc/private/build.gradle
+++ b/buildSrc/private/build.gradle
@@ -1,7 +1,15 @@
 apply plugin: "kotlin"
+apply plugin: "java-gradle-plugin"
 
 dependencies {
     implementation(project(":public"))
+    implementation(project(":imports:benchmark-gradle-plugin"))
+    implementation(project(":imports:inspection-gradle-plugin"))
+    implementation(project(":imports:stableaidl-gradle-plugin"))
+}
+
+validatePlugins {
+    enableStricterValidation = true
 }
 
 apply from: "../shared.gradle"
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
index 2d1760f..b199df3 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
@@ -109,9 +109,7 @@
 
                     // Disable ListIterator if we are not in a matching path, or we are in an
                     // unpublished project
-                    if (
-                        ignoreListIteratorFilter.any { path.contains(it) } || !isPublished
-                    ) {
+                    if (ignoreListIteratorFilter.any { path.contains(it) } || !isPublished) {
                         disable.add("ListIterator")
                     }
                 }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
index 038ad3c..9b30b5a 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
@@ -411,8 +411,8 @@
         get() = kotlinTarget.map { project.getVersionByName(it.catalogVersion) }
 
     /**
-     * Whether to validate the androidx configuration block using validateProjectParser. This
-     * should always be set to true unless we are temporarily working around a bug.
+     * Whether to validate the androidx configuration block using validateProjectParser. This should
+     * always be set to true unless we are temporarily working around a bug.
      */
     var runProjectParser: Boolean = true
 
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 1051dfc..97eced4 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -34,6 +34,7 @@
 import androidx.build.testConfiguration.TestModule
 import androidx.build.testConfiguration.addAppApkToTestConfigGeneration
 import androidx.build.testConfiguration.configureTestConfigGeneration
+import androidx.build.uptodatedness.TaskUpToDateValidator
 import com.android.build.api.artifact.SingleArtifact
 import com.android.build.api.variant.AndroidComponentsExtension
 import com.android.build.api.variant.ApplicationAndroidComponentsExtension
@@ -78,6 +79,7 @@
 import org.gradle.api.tasks.testing.Test
 import org.gradle.api.tasks.testing.logging.TestExceptionFormat
 import org.gradle.api.tasks.testing.logging.TestLogEvent
+import org.gradle.build.event.BuildEventsListenerRegistry
 import org.gradle.jvm.tasks.Jar
 import org.gradle.kotlin.dsl.KotlinClosure1
 import org.gradle.kotlin.dsl.create
@@ -92,6 +94,7 @@
 import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
 import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper
 import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
 import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests
 import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
@@ -102,9 +105,11 @@
  * A plugin which enables all of the Gradle customizations for AndroidX. This plugin reacts to other
  * plugins being added and adds required and optional functionality.
  */
-class AndroidXImplPlugin
+abstract class AndroidXImplPlugin
 @Inject
 constructor(private val componentFactory: SoftwareComponentFactory) : Plugin<Project> {
+    @get:javax.inject.Inject abstract val registry: BuildEventsListenerRegistry
+
     override fun apply(project: Project) {
         if (project.isRoot)
             throw Exception("Root project should use AndroidXRootImplPlugin instead")
@@ -169,6 +174,7 @@
             }
         }
         project.disallowAccidentalAndroidDependenciesInKmpProject(kmpExtension)
+        TaskUpToDateValidator.setup(project, registry)
     }
 
     private fun Project.registerProjectOrArtifact() {
@@ -308,7 +314,7 @@
                     if (details.requested.group == "org.jetbrains.kotlin") {
                         if (
                             details.requested.group == "org.jetbrains.kotlin" &&
-                            details.requested.version == null
+                                details.requested.version == null
                         ) {
                             details.useVersion(kotlinVersionStringProvider.get())
                         }
@@ -1158,9 +1164,10 @@
 }
 
 val Project.androidExtension: AndroidComponentsExtension<*, *, *>
-    get() = extensions.findByType<LibraryAndroidComponentsExtension>()
-        ?: extensions.findByType<ApplicationAndroidComponentsExtension>()
-        ?: throw IllegalArgumentException("Failed to find any registered Android extension")
+    get() =
+        extensions.findByType<LibraryAndroidComponentsExtension>()
+            ?: extensions.findByType<ApplicationAndroidComponentsExtension>()
+            ?: throw IllegalArgumentException("Failed to find any registered Android extension")
 
 val Project.multiplatformExtension
     get() = extensions.findByType(KotlinMultiplatformExtension::class.java)
@@ -1260,10 +1267,16 @@
         ?.findByName("androidTest")
         ?.let { if (it.kotlin.files.isNotEmpty()) return true }
 
-    // check kotlin-multiplatform androidInstrumentedTest source set
-    multiplatformExtension?.apply {
-        sourceSets.findByName("androidInstrumentedTest")?.let {
-            if (it.kotlin.files.isNotEmpty()) return true
+    // check kotlin-multiplatform androidInstrumentedTest target source sets
+    multiplatformExtension?.let { extension ->
+        val instrumentedTestSourceSets = extension
+            .targets
+            .filterIsInstance<KotlinAndroidTarget>()
+            .mapNotNull {
+                target -> target.compilations.findByName("debugAndroidTest")
+            }.flatMap { compilation -> compilation.allKotlinSourceSets }
+        if (instrumentedTestSourceSets.any { it.kotlin.files.isNotEmpty() }) {
+            return true
         }
     }
 
@@ -1278,9 +1291,7 @@
     }
 }
 
-/**
- * Verifies we don't accidentially write "implementation" instead of "commonMainImplementation"
- */
+/** Verifies we don't accidentially write "implementation" instead of "commonMainImplementation" */
 fun Project.disallowAccidentalAndroidDependenciesInKmpProject(
     kmpExtension: AndroidXMultiplatformExtension
 ) {
@@ -1288,15 +1299,16 @@
         if (kmpExtension.supportedPlatforms.isNotEmpty()) {
             val androidConfiguration = project.configurations.findByName("implementation")
             if (androidConfiguration != null) {
-               if (
-                   androidConfiguration.dependencies.isNotEmpty() ||
-                   androidConfiguration.dependencyConstraints.isNotEmpty()
-               ) {
-                   throw GradleException(
-                       "The 'implementation' Configuration should not be used in a " +
-                       "multiplatform project: this Configuration is declared by the " +
-                       "Android plugin rather than the kmp plugin. Did you mean " +
-                       "'commonMainImplementation'?")
+                if (
+                    androidConfiguration.dependencies.isNotEmpty() ||
+                        androidConfiguration.dependencyConstraints.isNotEmpty()
+                ) {
+                    throw GradleException(
+                        "The 'implementation' Configuration should not be used in a " +
+                            "multiplatform project: this Configuration is declared by the " +
+                            "Android plugin rather than the kmp plugin. Did you mean " +
+                            "'commonMainImplementation'?"
+                    )
                 }
             }
         }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
index 9eb83d2..c26c469 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
@@ -26,7 +26,6 @@
 import androidx.build.playground.VerifyPlaygroundGradleConfigurationTask
 import androidx.build.studio.StudioTask.Companion.registerStudioTask
 import androidx.build.testConfiguration.registerOwnersServiceTasks
-import androidx.build.uptodatedness.TaskUpToDateValidator
 import androidx.build.uptodatedness.cacheEvenIfNoOutputs
 import com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
 import java.io.File
@@ -38,12 +37,9 @@
 import org.gradle.api.plugins.JvmEcosystemPlugin
 import org.gradle.api.tasks.bundling.Zip
 import org.gradle.api.tasks.bundling.ZipEntryCompression
-import org.gradle.build.event.BuildEventsListenerRegistry
 import org.gradle.kotlin.dsl.extra
 
 abstract class AndroidXRootImplPlugin : Plugin<Project> {
-    @get:javax.inject.Inject abstract val registry: BuildEventsListenerRegistry
-
     override fun apply(project: Project) {
         if (!project.isRoot) {
             throw Exception("This plugin should only be applied to root project")
@@ -161,8 +157,6 @@
 
         registerStudioTask()
 
-        TaskUpToDateValidator.setup(project, registry)
-
         project.tasks.register("listTaskOutputs", ListTaskOutputsTask::class.java) { task ->
             task.setOutput(File(project.getDistributionDirectory(), "task_outputs.txt"))
             task.removePrefix(project.getCheckoutRoot().path)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt b/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
index 2846580..383eeb8 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
@@ -45,9 +45,7 @@
 val bundlingAttribute: Attribute<String> =
     Attribute.of("org.gradle.dependency.bundling", String::class.java)
 
-/**
- * JVM Args needed to run it on JVM 17+
- */
+/** JVM Args needed to run it on JVM 17+ */
 private fun JavaExecSpec.addKtlintJvmArgs() {
     this.jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
 }
@@ -179,8 +177,7 @@
             val subdirectories = overrideSubdirectories
             if (subdirectories.isNullOrEmpty()) return@let
             subdirectories.map { arguments.add("$it/$InputDir/$IncludedFiles") }
-        }
-            ?: arguments.add("$InputDir/$IncludedFiles")
+        } ?: arguments.add("$InputDir/$IncludedFiles")
 
         ExcludedDirectoryGlobs.mapTo(arguments) { "!$InputDir/$it" }
         return arguments
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
index a307c9d..f1b1677 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -37,9 +37,7 @@
 import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
 import org.jetbrains.kotlin.tooling.core.withClosure
 
-/**
- * Single entry point to Android Lint configuration.
- */
+/** Single entry point to Android Lint configuration. */
 fun Project.configureLint() {
     project.plugins.all { plugin ->
         when (plugin) {
@@ -48,53 +46,52 @@
             // Only configure non-multiplatform Java projects via JavaPlugin. Multiplatform
             // projects targeting Java (e.g. `jvm { withJava() }`) are configured via
             // KotlinBasePlugin.
-            is JavaPlugin -> if (project.multiplatformExtension == null) {
-                configureNonAndroidProjectForLint()
-            }
+            is JavaPlugin ->
+                if (project.multiplatformExtension == null) {
+                    configureNonAndroidProjectForLint()
+                }
             // Only configure non-Android multiplatform projects via KotlinBasePlugin.
             // Multiplatform projects targeting Android (e.g. `id("com.android.library")`) are
             // configured via AppPlugin or LibraryPlugin.
-            is KotlinBasePlugin -> if (
-                project.multiplatformExtension != null &&
-                !project.plugins.hasPlugin(AppPlugin::class.java) &&
-                !project.plugins.hasPlugin(LibraryPlugin::class.java)
-            ) {
-                configureNonAndroidProjectForLint()
+            is KotlinBasePlugin ->
+                if (
+                    project.multiplatformExtension != null &&
+                        !project.plugins.hasPlugin(AppPlugin::class.java) &&
+                        !project.plugins.hasPlugin(LibraryPlugin::class.java)
+                ) {
+                    configureNonAndroidProjectForLint()
+                }
+        }
+    }
+}
+
+/** Android Lint configuration entry point for Android projects. */
+private fun Project.configureAndroidProjectForLint(isLibrary: Boolean) =
+    androidExtension.finalizeDsl { extension ->
+        // The lintAnalyze task is used by `androidx-studio-integration-lint.sh`.
+        tasks.register("lintAnalyze") { task -> task.enabled = false }
+
+        configureLint(extension.lint, isLibrary)
+
+        // We already run lintDebug, we don't need to run lint on the release variant.
+        tasks.named("lint").configure { task -> task.enabled = false }
+
+        afterEvaluate {
+            registerLintDebugIfNeededAfterEvaluate()
+
+            if (extension.buildFeatures.aidl == true) {
+                configureLintForAidlAfterEvaluate()
             }
         }
     }
-}
 
-/**
- * Android Lint configuration entry point for Android projects.
- */
-private fun Project.configureAndroidProjectForLint(
-    isLibrary: Boolean
-) = androidExtension.finalizeDsl { extension ->
-    // The lintAnalyze task is used by `androidx-studio-integration-lint.sh`.
-    tasks.register("lintAnalyze") { task -> task.enabled = false }
-
-    configureLint(extension.lint, isLibrary)
-
-    // We already run lintDebug, we don't need to run lint on the release variant.
-    tasks.named("lint").configure { task -> task.enabled = false }
-
-    afterEvaluate {
-        registerLintDebugIfNeededAfterEvaluate()
-
-        if (extension.buildFeatures.aidl == true) {
-            configureLintForAidlAfterEvaluate()
-        }
-    }
-}
-
-/**
- * Android Lint configuration entry point for non-Android projects.
- */
+/** Android Lint configuration entry point for non-Android projects. */
 private fun Project.configureNonAndroidProjectForLint() = afterEvaluate {
     // TODO(aurimas): remove this workaround for b/293900782 after upgrading to AGP 8.2.0-beta01
-    if (path == ":collection:collection-benchmark-kmp" ||
-        path == ":benchmark:benchmark-darwin-samples") {
+    if (
+        path == ":collection:collection-benchmark-kmp" ||
+            path == ":benchmark:benchmark-darwin-samples"
+    ) {
         return@afterEvaluate
     }
     // The lint plugin expects certain configurations and source sets which are only added by
@@ -147,8 +144,9 @@
     }
 }
 
-private fun String.camelCase() =
-    replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
+private fun String.camelCase() = replaceFirstChar {
+    if (it.isLowerCase()) it.titlecase() else it.toString()
+}
 
 /**
  * If the project is targeting Android and using the AIDL build feature, installs AIDL source
@@ -186,9 +184,7 @@
 
     // Also configure the model writing task, so that we don't run into mismatches between
     // analyzed sources in one module and a downstream module
-    project.tasks.withType<LintModelWriterTask>().configureEach {
-        it.variantInputs.addSourceSets()
-    }
+    project.tasks.withType<LintModelWriterTask>().configureEach { it.variantInputs.addSourceSets() }
 }
 
 /**
@@ -208,10 +204,8 @@
     // Synthesize target configurations based on multiplatform configurations.
     val kmpApiElements = kmpTargets.map { it.apiElementsConfigurationName }
     val kmpRuntimeElements = kmpTargets.map { it.runtimeElementsConfigurationName }
-    listOf(
-        kmpRuntimeElements to "runtimeElements",
-        kmpApiElements to "apiElements"
-    ).forEach { (kmpConfigNames, targetConfigName) ->
+    listOf(kmpRuntimeElements to "runtimeElements", kmpApiElements to "apiElements").forEach {
+        (kmpConfigNames, targetConfigName) ->
         project.configurations.maybeCreate(targetConfigName).apply {
             kmpConfigNames
                 .mapNotNull { configName -> project.configurations.findByName(configName) }
@@ -220,12 +214,11 @@
     }
 
     // Synthesize source sets based on multiplatform source sets.
-    val javaExtension = project.extensions.findByType(JavaPluginExtension::class.java)
-        ?: throw GradleException("Failed to find extension of type 'JavaPluginExtension'")
-    listOf(
-        "main" to "main",
-        "test" to "test"
-    ).forEach { (kmpCompilationName, targetSourceSetName) ->
+    val javaExtension =
+        project.extensions.findByType(JavaPluginExtension::class.java)
+            ?: throw GradleException("Failed to find extension of type 'JavaPluginExtension'")
+    listOf("main" to "main", "test" to "test").forEach { (kmpCompilationName, targetSourceSetName)
+        ->
         javaExtension.sourceSets.maybeCreate(targetSourceSetName).apply {
             kmpTargets
                 .mapNotNull { target -> target.compilations.findByName(kmpCompilationName) }
@@ -249,15 +242,14 @@
     val multiplatformExtension = project.multiplatformExtension ?: return
     multiplatformExtension.targets.findByName("android") ?: return
 
-    val androidMain = multiplatformExtension.sourceSets.findByName("androidMain")
-        ?: throw GradleException("Failed to find source set with name 'androidMain'")
+    val androidMain =
+        multiplatformExtension.sourceSets.findByName("androidMain")
+            ?: throw GradleException("Failed to find source set with name 'androidMain'")
 
     // Get all the source sets androidMain transitively / directly depends on.
     val dependencySourceSets = androidMain.withClosure(KotlinSourceSet::dependsOn)
 
-    /**
-     * Helper function to add the missing sourcesets to this [VariantInputs]
-     */
+    /** Helper function to add the missing sourcesets to this [VariantInputs] */
     fun VariantInputs.addSourceSets() {
         // Each variant has a source provider for the variant (such as debug) and the 'main'
         // variant. The actual files that Lint will run on is both of these providers
@@ -277,9 +269,7 @@
 
     // Also configure the model writing task, so that we don't run into mismatches between
     // analyzed sources in one module and a downstream module
-    project.tasks.withType<LintModelWriterTask>().configureEach {
-        it.variantInputs.addSourceSets()
-    }
+    project.tasks.withType<LintModelWriterTask>().configureEach { it.variantInputs.addSourceSets() }
 }
 
 private fun Project.configureLint(lint: Lint, isLibrary: Boolean) {
@@ -295,9 +285,7 @@
 
     project.dependencies.add("lintChecks", lintChecksProject)
 
-    afterEvaluate {
-        addSourceSetsForAndroidMultiplatformAfterEvaluate()
-    }
+    afterEvaluate { addSourceSetsForAndroidMultiplatformAfterEvaluate() }
 
     // The purpose of this specific project is to test that lint is running, so
     // it contains expected violations that we do not want to trigger a build failure
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index 9380bb9..f0b4877 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -443,9 +443,7 @@
         scm.url.set("https://cs.android.com/androidx/platform/frameworks/support")
         scm.connection.set(ANDROID_GIT_URL)
     }
-    pom.organization { org ->
-        org.name.set("The Android Open Source Project")
-    }
+    pom.organization { org -> org.name.set("The Android Open Source Project") }
     pom.developers { devs ->
         devs.developer { dev -> dev.name.set("The Android Open Source Project") }
     }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt b/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
index 274498d..a852523 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
@@ -56,6 +56,5 @@
     @Suppress("UNCHECKED_CAST")
     return LazyTaskRegistry.get(project).once(name) {
         tasks.register(name, T::class.java) { onConfigure(it) }.also(onRegister)
-    }
-        ?: tasks.named(name) as TaskProvider<T>
+    } ?: tasks.named(name) as TaskProvider<T>
 }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
index 04c4da3..fed3cc0 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
@@ -98,9 +98,10 @@
         }
     }
 
-    val disableNames = setOf(
-        "releaseSourcesJar",
-    )
+    val disableNames =
+        setOf(
+            "releaseSourcesJar",
+        )
     disableUnusedSourceJarTasks(disableNames)
 }
 
@@ -134,9 +135,10 @@
         }
     registerSourcesVariant(sourceJar)
 
-    val disableNames = setOf(
-        "kotlinSourcesJar",
-    )
+    val disableNames =
+        setOf(
+            "kotlinSourcesJar",
+        )
     disableUnusedSourceJarTasks(disableNames)
 }
 
@@ -171,9 +173,10 @@
             task.metaInf.from(metadataFile)
         }
     registerMultiplatformSourcesVariant(sourceJar)
-    val disableNames = setOf(
-        "kotlinSourcesJar",
-    )
+    val disableNames =
+        setOf(
+            "kotlinSourcesJar",
+        )
     disableUnusedSourceJarTasks(disableNames)
 }
 
@@ -273,9 +276,8 @@
             }
         }
     }
-    val sourceSetMetadata = mapOf(
-        "sourceSets" to sourceSetsByName.keys.sorted().map { sourceSetsByName[it] }
-    )
+    val sourceSetMetadata =
+        mapOf("sourceSets" to sourceSetsByName.keys.sorted().map { sourceSetsByName[it] })
     val gson = GsonBuilder().setPrettyPrinting().create()
     return gson.toJson(sourceSetMetadata)
 }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
index 427f566..867c3ea 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
@@ -77,8 +77,9 @@
     }
 
     libraryAndroidComponentsExtension.onVariants {
-        it.sources
-            .resources!!
-            .addGeneratedSourceDirectory(writeVersionFile, VersionFileWriterTask::outputDir)
+        it.sources.resources!!.addGeneratedSourceDirectory(
+            writeVersionFile,
+            VersionFileWriterTask::outputDir
+        )
     }
 }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
index fb6620e..544e835b 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
@@ -235,7 +235,9 @@
                 .sortedWith(compareBy({ it.groupId }, { it.artifactId }, { it.version }))
 
         private fun String?.isAndroidXDependency() =
-            this != null && startsWith("androidx.") && !startsWith("androidx.test") &&
+            this != null &&
+                startsWith("androidx.") &&
+                !startsWith("androidx.test") &&
                 !startsWith("androidx.databinding")
 
         /* For androidx release notes, the most common use case is to track and publish the last sha
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
index 9e3f7cc..3e8cdbe 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
@@ -157,8 +157,7 @@
                 val variant =
                     config.library.libraryVariants.find {
                         it.name == Release.DEFAULT_PUBLISH_CONFIG
-                    }
-                        ?: return@afterEvaluate
+                    } ?: return@afterEvaluate
 
                 javaInputs =
                     JavaCompileInputs.fromLibraryVariant(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
index 144ed14..15ec17e 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
@@ -102,6 +102,8 @@
 
     @Input lateinit var hidingAnnotations: List<String>
 
+    @Input lateinit var nullabilityAnnotations: List<String>
+
     @InputFiles
     @PathSensitive(PathSensitivity.NONE)
     lateinit var versionMetadataFiles: Provider<List<File>>
@@ -154,8 +156,7 @@
                             sourceLinks = emptyList()
                         )
                     }
-                }
-                ?: emptyList()
+                } ?: emptyList()
         return listOf(
             DokkaInputModels.SourceSet(
                 id = sourceSetIdForSourceSet("main"),
@@ -215,7 +216,8 @@
                                         "annotationsNotToDisplayKotlin" to
                                             annotationsNotToDisplayKotlin,
                                         "hidingAnnotations" to hidingAnnotations,
-                                        "versionMetadataFilenames" to checkVersionMetadataFiles()
+                                        "versionMetadataFilenames" to checkVersionMetadataFiles(),
+                                        "validNullabilityAnnotations" to nullabilityAnnotations,
                                     )
                                 )
                         )
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt
index 22a3626..2aa8bf3 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt
@@ -15,7 +15,6 @@
  */
 
 @file:Suppress("unused") // used by gson
-
 package androidx.build.dackka
 
 import com.google.gson.annotations.SerializedName
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
index 1304305..9b46153 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
@@ -59,15 +59,13 @@
 
     @TaskAction
     fun generate() {
-        val entries = createEntries(
-            getArtifactIds().get(),
-            getArtifactFiles().get(),
-            multiplatform = false
-        ) + createEntries(
-            getMultiplatformArtifactIds().get(),
-            getMultiplatformArtifactFiles().get(),
-            multiplatform = true
-        )
+        val entries =
+            createEntries(getArtifactIds().get(), getArtifactFiles().get(), multiplatform = false) +
+                createEntries(
+                    getMultiplatformArtifactIds().get(),
+                    getMultiplatformArtifactFiles().get(),
+                    multiplatform = true
+                )
 
         val gson =
             if (DEBUG) {
@@ -99,15 +97,17 @@
             val componentId = (id.componentIdentifier as ModuleComponentIdentifier)
 
             // Fetch the list of files contained in the .jar file
-            val fileList = ZipFile(file).entries().toList().map {
-                if (multiplatform) {
-                    // Paths for multiplatform will start with a directory for the platform (e.g.
-                    // "commonMain"), while Dackka only sees the part of the path after this.
-                    it.name.substringAfter("/")
-                } else {
-                    it.name
+            val fileList =
+                ZipFile(file).entries().toList().map {
+                    if (multiplatform) {
+                        // Paths for multiplatform will start with a directory for the platform
+                        // (e.g.
+                        // "commonMain"), while Dackka only sees the part of the path after this.
+                        it.name.substringAfter("/")
+                    } else {
+                        it.name
+                    }
                 }
-            }
 
             MetadataEntry(
                 groupId = componentId.group,
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index 432cb50..cc96c2e 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -303,9 +303,10 @@
                 projectGraph = parameters.projectGraph,
                 dependencyTracker = parameters.dependencyTracker,
                 logger = logger.toLogger(),
-                cobuiltTestPaths = parameters.cobuiltTestPaths
-                        ?: AffectedModuleDetectorImpl.COBUILT_TEST_PATHS,
-                alwaysBuildIfExists = parameters.alwaysBuildIfExists
+                cobuiltTestPaths =
+                    parameters.cobuiltTestPaths ?: AffectedModuleDetectorImpl.COBUILT_TEST_PATHS,
+                alwaysBuildIfExists =
+                    parameters.alwaysBuildIfExists
                         ?: AffectedModuleDetectorImpl.ALWAYS_BUILD_IF_EXISTS,
                 ignoredPaths = parameters.ignoredPaths ?: AffectedModuleDetectorImpl.IGNORED_PATHS,
                 changedFilesProvider = changedFilesProvider
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
index e6ccb06..05265d5 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
@@ -472,12 +472,12 @@
                 task.getArtifactFiles().set(artifacts.map { result -> result.map { it.file } })
                 val multiplatformArtifacts =
                     multiplatformDocsConfiguration.incoming.artifacts.resolvedArtifacts
-                task.getMultiplatformArtifactIds().set(multiplatformArtifacts.map { result ->
-                    result.map { it.id }
-                })
-                task.getMultiplatformArtifactFiles().set(multiplatformArtifacts.map { result ->
-                    result.map { it.file }
-                })
+                task
+                    .getMultiplatformArtifactIds()
+                    .set(multiplatformArtifacts.map { result -> result.map { it.id } })
+                task
+                    .getMultiplatformArtifactFiles()
+                    .set(multiplatformArtifacts.map { result -> result.map { it.file } })
                 task.destinationFile.set(getMetadataRegularFile(project))
             }
 
@@ -487,10 +487,11 @@
         val dackkaTask =
             project.tasks.register("docs", DackkaTask::class.java) { task ->
                 var taskStartTime: LocalDateTime? = null
-                task.argsJsonFile = File(
-                    project.rootProject.getDistributionDirectory(),
-                    "dackkaArgs-${project.name}.json"
-                )
+                task.argsJsonFile =
+                    File(
+                        project.rootProject.getDistributionDirectory(),
+                        "dackkaArgs-${project.name}.json"
+                    )
                 task.apply {
                     dependsOn(unzipJvmSourcesTask)
                     dependsOn(unzipSamplesTask)
@@ -524,6 +525,7 @@
                     annotationsNotToDisplayJava = hiddenAnnotationsJava
                     annotationsNotToDisplayKotlin = hiddenAnnotationsKotlin
                     hidingAnnotations = annotationsToHideApis
+                    nullabilityAnnotations = validNullabilityAnnotations
                     versionMetadataFiles =
                         versionMetadataConfiguration.incoming.artifacts.resolvedArtifacts.map {
                             it.map { it.file }
@@ -699,6 +701,13 @@
         "java.lang.Override"
     )
 
+val validNullabilityAnnotations = listOf(
+    "androidx.annotation.Nullable", "android.annotation.Nullable",
+    "androidx.annotation.NonNull", "android.annotation.NonNull",
+    // Required by media3
+    "org.checkerframework.checker.nullness.qual.Nullable",
+)
+
 // Annotations which should not be displayed in the Kotlin docs, in addition to hiddenAnnotations
 private val hiddenAnnotationsKotlin: List<String> = listOf("kotlin.ExtensionFunctionType")
 
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
index 7b470d9..5a9bc80 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
@@ -215,24 +215,22 @@
     val allowPublicRepos = System.getenv("ALLOW_PUBLIC_REPOS") != null
     val sbomPublishDir = project.getSbomPublishDir()
 
-    val sbomBuiltFile = project.layout.buildDirectory.file(
-        "spdx/release.spdx.json"
-    ).get().getAsFile()
+    val sbomBuiltFile =
+        project.layout.buildDirectory.file("spdx/release.spdx.json").get().getAsFile()
 
-    val publishTask = project.tasks.register("exportSboms", Copy::class.java) { publishTask ->
-        publishTask.destinationDir = sbomPublishDir
-        val sbomBuildDir = sbomBuiltFile.parentFile
-        publishTask.from(sbomBuildDir)
-        publishTask.rename(sbomBuiltFile.name, "$projectName-$projectVersion.spdx.json")
+    val publishTask =
+        project.tasks.register("exportSboms", Copy::class.java) { publishTask ->
+            publishTask.destinationDir = sbomPublishDir
+            val sbomBuildDir = sbomBuiltFile.parentFile
+            publishTask.from(sbomBuildDir)
+            publishTask.rename(sbomBuiltFile.name, "$projectName-$projectVersion.spdx.json")
 
-        publishTask.doFirst {
-            if (!sbomBuiltFile.exists()) {
-                throw GradleException(
-                    "sbom file does not exist: $sbomBuiltFile"
-                )
+            publishTask.doFirst {
+                if (!sbomBuiltFile.exists()) {
+                    throw GradleException("sbom file does not exist: $sbomBuiltFile")
+                }
             }
         }
-    }
 
     project.tasks.withType(SpdxSbomTask::class.java).configureEach { task ->
         val sbomProjectDir = project.projectDir
@@ -302,9 +300,7 @@
             target.getConfigurations().set(sbomConfigurations)
         }
         project.addToBuildOnServer(tasks.named("spdxSbomForRelease"))
-        publishTask.configure { task ->
-            task.dependsOn("spdxSbomForRelease")
-        }
+        publishTask.configure { task -> task.dependsOn("spdxSbomForRelease") }
     }
 }
 
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
index 3a3226e..d4e7a1eb 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
@@ -41,10 +41,13 @@
 
     fun applicationId(applicationId: String) = apply { this.applicationId = applicationId }
 
-    fun isMicrobenchmark(isMicrobenchmark: Boolean) =
-        apply { this.isMicrobenchmark = isMicrobenchmark }
-    fun isMacrobenchmark(isMacrobenchmark: Boolean) =
-        apply { this.isMacrobenchmark = isMacrobenchmark }
+    fun isMicrobenchmark(isMicrobenchmark: Boolean) = apply {
+        this.isMicrobenchmark = isMicrobenchmark
+    }
+
+    fun isMacrobenchmark(isMacrobenchmark: Boolean) = apply {
+        this.isMacrobenchmark = isMacrobenchmark
+    }
 
     fun isPostsubmit(isPostsubmit: Boolean) = apply { this.isPostsubmit = isPostsubmit }
 
@@ -251,7 +254,8 @@
     <option name="run-command-timeout" value="240000" />
     </target_preparer>
 
-""".trimIndent()
+"""
+        .trimIndent()
 
 private fun benchmarkPostInstallCommand(packageName: String): String {
     return "cmd package compile -f -m speed $packageName"
@@ -331,7 +335,6 @@
     """
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.InstrumentationResultsRunListener" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.SideEffectRunListener" />
-    <option name="instrumentation-arg" key="androidx.benchmark.profiling.mode" value="MethodTracing" />
 
 """
         .trimIndent()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
index 10a9cc1..51091b6 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
@@ -41,9 +41,13 @@
         // media service/client tests are created from multiple projects, so we get multiple
         // entries with the same TestModule.name. This code merges all the TestModule.path entries
         // across the test modules with the same name.
-        val data = testModules.groupBy { it.name }.map {
-            TestModule(name = it.key, path = it.value.flatMap { module -> module.path })
-        }.associateBy { it.name }
+        val data =
+            testModules
+                .groupBy { it.name }
+                .map {
+                    TestModule(name = it.key, path = it.value.flatMap { module -> module.path })
+                }
+                .associateBy { it.name }
         return gson.toJson(data)
     }
 
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
index ce67a56..1af36c1 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
@@ -300,21 +300,19 @@
         if (!clientToT && !serviceToT) return
         testModules.add(
             TestModule(
-                name = getJsonName(
-                    clientToT = clientToT,
-                    serviceToT = serviceToT,
-                    clientTests = true
-                ),
+                name =
+                    getJsonName(clientToT = clientToT, serviceToT = serviceToT, clientTests = true),
                 path = listOf(projectDir.toRelativeString(getSupportRootFolder()))
             )
         )
         testModules.add(
             TestModule(
-                name = getJsonName(
-                    clientToT = clientToT,
-                    serviceToT = serviceToT,
-                    clientTests = false
-                ),
+                name =
+                    getJsonName(
+                        clientToT = clientToT,
+                        serviceToT = serviceToT,
+                        clientTests = false
+                    ),
                 path = listOf(projectDir.toRelativeString(getSupportRootFolder()))
             )
         )
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt b/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt
index 8fa0772..b51596da 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt
@@ -253,18 +253,18 @@
                 DONT_TRY_RERUNNING_TASK_TYPES.contains(task::class.qualifiedName))
         }
 
-        fun setup(rootProject: Project, registry: BuildEventsListenerRegistry) {
-            if (!shouldEnable(rootProject)) {
+        fun setup(project: Project, registry: BuildEventsListenerRegistry) {
+            if (!shouldEnable(project)) {
                 return
             }
             val validate =
-                rootProject.providers
+                project.providers
                     .environmentVariable(DISALLOW_TASK_EXECUTION_VAR_NAME)
                     .map { true }
                     .orElse(false)
             // create listener for validating that any task that reran was expected to rerun
             val validatorProvider =
-                rootProject.gradle.sharedServices.registerIfAbsent(
+                project.gradle.sharedServices.registerIfAbsent(
                     "TaskUpToDateValidator",
                     TaskUpToDateValidator::class.java
                 ) { spec ->
@@ -273,10 +273,8 @@
             registry.onTaskCompletion(validatorProvider)
 
             // skip rerunning tasks that are known to be unnecessary to rerun
-            rootProject.allprojects { subproject ->
-                subproject.tasks.configureEach { task ->
-                    task.onlyIf { shouldTryRerunningTask(task) || !validate.get() }
-                }
+            project.tasks.configureEach { task ->
+                task.onlyIf { shouldTryRerunningTask(task) || !validate.get() }
             }
         }
     }
diff --git a/buildSrc/public/build.gradle b/buildSrc/public/build.gradle
index 75091cd..6779c30 100644
--- a/buildSrc/public/build.gradle
+++ b/buildSrc/public/build.gradle
@@ -1,76 +1 @@
 apply from: "../shared.gradle"
-
-sourceSets {
-
-    // Benchmark
-    main.java.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/kotlin"
-    main.resources.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/resources"
-
-    // Benchmark darwin
-    main.java.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin"
-    main.resources.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/resources"
-
-    // Baseline profile
-    main.java.srcDirs += "${supportRootFolder}" +
-            "/benchmark/baseline-profile-gradle-plugin/src/main/kotlin"
-    main.resources.srcDirs += "${supportRootFolder}" +
-            "/benchmark/baseline-profile-gradle-plugin/src/main/resources"
-
-    // Inspection
-    main.java.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main/kotlin"
-    main.resources.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main" +
-            "/resources"
-
-    // Compose
-    main.java.srcDirs += "${supportRootFolder}/compose/material/material/icons/generator/src/main" +
-            "/kotlin"
-
-    // Glance
-    main.java.srcDirs += "${supportRootFolder}/glance/glance-appwidget/glance-layout-generator/" +
-            "src/main/kotlin"
-
-    // Stable AIDL
-    main.java.srcDirs += "${supportRootFolder}/stableaidl/stableaidl-gradle-plugin/src/main/java"
-}
-
-dependencies {
-    // This is for androidx.benchmark.darwin
-    implementation(libs.apacheCommonsMath)
-}
-
-gradlePlugin {
-    plugins {
-        benchmark {
-            id = "androidx.benchmark"
-            implementationClass = "androidx.benchmark.gradle.BenchmarkPlugin"
-        }
-        baselineProfileProducer {
-            id = "androidx.baselineprofile.producer"
-            implementationClass = "androidx.baselineprofile.gradle.producer.BaselineProfileProducerPlugin"
-        }
-        baselineProfileConsumer {
-            id = "androidx.baselineprofile.consumer"
-            implementationClass = "androidx.baselineprofile.gradle.consumer.BaselineProfileConsumerPlugin"
-        }
-        baselineProfileAppTarget {
-            id = "androidx.baselineprofile.apptarget"
-            implementationClass = "androidx.baselineprofile.gradle.apptarget.BaselineProfileAppTargetPlugin"
-        }
-        baselineProfileWrapper {
-            id = "androidx.baselineprofile"
-            implementationClass = "androidx.baselineprofile.gradle.wrapper.BaselineProfileWrapperPlugin"
-        }
-        inspection {
-            id = "androidx.inspection"
-            implementationClass = "androidx.inspection.gradle.InspectionPlugin"
-        }
-        darwinBenchmark {
-            id = "androidx.benchmark.darwin"
-            implementationClass = "androidx.benchmark.darwin.gradle.DarwinBenchmarkPlugin"
-        }
-        stableaidl {
-            id = "androidx.stableaidl"
-            implementationClass = "androidx.stableaidl.StableAidlPlugin"
-        }
-    }
-}
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt b/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt
index 4a65f8d..8d29c124 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt
@@ -70,8 +70,7 @@
                 }
             project.addToBuildOnServer(apkCopy)
         }
-    }
-        ?: throw Exception("Unable to set up app APK copying")
+    } ?: throw Exception("Unable to set up app APK copying")
 }
 
 fun setupTestApkCopy(project: Project) {
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt b/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
index dfcb8e5..060a487 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
@@ -51,8 +51,8 @@
      * Used project are expected
      *
      * @param relocations a list of package relocations to apply
-     * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
-     *        null means no filtering
+     * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix, null
+     *   means no filtering
      * @receiver the project that should bundle jars specified by this configuration
      * @see forInsideAar(String, String)
      */
@@ -77,8 +77,8 @@
      *
      * @param from specifies from which package the rename should happen
      * @param to specifies to which package to put the renamed classes
-     * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
-     *        null means no filtering
+     * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix, null
+     *   means no filtering
      * @receiver the project that should bundle jars specified by these configurations
      */
     @JvmStatic
@@ -100,18 +100,19 @@
      *
      * @param from specifies from which package the rename should happen
      * @param to specifies to which package to put the renamed classes
-     * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
-     * null means no filtering
+     * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix, null
+     *   means no filtering
      * @receiver the project that should bundle jars specified by these configurations
      */
     @JvmStatic
     fun Project.forInsideJar(from: String, to: String, dropResourcesWithSuffix: String?) {
         val bundle = configurations.create(CONFIGURATION_NAME)
-        val repackage = configureRepackageTaskForType(
-            relocations = listOf(Relocation(from, to)),
-            configuration = bundle,
-            dropResourcesWithSuffix = dropResourcesWithSuffix
-        )
+        val repackage =
+            configureRepackageTaskForType(
+                relocations = listOf(Relocation(from, to)),
+                configuration = bundle,
+                dropResourcesWithSuffix = dropResourcesWithSuffix
+            )
         dependencies.add("compileOnly", files(repackage.flatMap { it.archiveFile }))
         dependencies.add("testImplementation", files(repackage.flatMap { it.archiveFile }))
 
@@ -143,7 +144,8 @@
      * KMP Version of [Project.forInsideJar]. See those docs for details.
      *
      * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
-     *      * null means no filtering
+     *     * null means no filtering
+     *
      * TODO(b/237104605): bundleInside is a global configuration. Should figure out how to make it
      *   work properly with kmp and source sets so it can reside inside a sourceSet dependency.
      */
@@ -152,18 +154,18 @@
         val kmpExtension =
             extensions.findByType<KotlinMultiplatformExtension>() ?: error("kmp only")
         val bundle = configurations.create(CONFIGURATION_NAME)
-        val repackage = configureRepackageTaskForType(
-            relocations = listOf(Relocation(from, to)),
-            configuration = bundle,
-            dropResourcesWithSuffix = dropResourcesWithSuffix
-        )
+        val repackage =
+            configureRepackageTaskForType(
+                relocations = listOf(Relocation(from, to)),
+                configuration = bundle,
+                dropResourcesWithSuffix = dropResourcesWithSuffix
+            )
 
         // To account for KMP structure we need to find the jvm specific target
         // and add the repackaged archive files to only their compilations.
         val jvmTarget =
             kmpExtension.targets.firstOrNull { it.platformType == KotlinPlatformType.jvm }
-                as? KotlinJvmTarget
-                ?: error("cannot find jvm target")
+                as? KotlinJvmTarget ?: error("cannot find jvm target")
         jvmTarget.compilations["main"].defaultSourceSet {
             dependencies { compileOnly(files(repackage.flatMap { it.archiveFile })) }
         }
@@ -234,7 +236,7 @@
         relocations: List<Relocation>,
         configuration: Configuration,
         dropResourcesWithSuffix: String?
-        ): TaskProvider<ShadowJar> {
+    ): TaskProvider<ShadowJar> {
         return tasks.register(REPACKAGE_TASK_NAME, ShadowJar::class.java) { task ->
             task.apply {
                 configurations = listOf(configuration)
@@ -252,9 +254,7 @@
     }
 
     internal class DontIncludeResourceTransformer : Transformer {
-        @Optional
-        @Input
-        var dropResourcesWithSuffix: String? = null
+        @Optional @Input var dropResourcesWithSuffix: String? = null
 
         override fun getName(): String {
             return "DontIncludeResourceTransformer"
diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle
index df55a68..8a1ea9b 100644
--- a/buildSrc/settings.gradle
+++ b/buildSrc/settings.gradle
@@ -18,6 +18,13 @@
 include ":plugins"
 include ":private"
 include ":public"
+include ":imports:benchmark-gradle-plugin"
+include ":imports:benchmark-darwin-plugin"
+include ":imports:baseline-profile-gradle-plugin"
+include ":imports:inspection-gradle-plugin"
+include ":imports:compose-icons"
+include ":imports:glance-layout-generator"
+include ":imports:stableaidl-gradle-plugin"
 
 dependencyResolutionManagement {
     versionCatalogs {
diff --git a/buildSrc/shared.gradle b/buildSrc/shared.gradle
index f907dd2..0c85b7a 100644
--- a/buildSrc/shared.gradle
+++ b/buildSrc/shared.gradle
@@ -3,11 +3,10 @@
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 apply plugin: "kotlin"
-apply plugin: "java-gradle-plugin"
 
 buildscript {
-    project.ext.supportRootFolder = project.projectDir.getParentFile().getParentFile()
-    apply from: "../repos.gradle"
+    project.ext.supportRootFolder = buildscript.sourceFile.parentFile.parentFile
+    apply from: "${buildscript.sourceFile.parent}/repos.gradle"
     repos.addMavenRepositories(repositories)
     dependencies {
         classpath(libs.kotlinGradlePluginz)
@@ -17,10 +16,10 @@
 dependencies {
     implementation(project(":jetpad-integration"))
 }
-apply from: "../out.gradle"
+apply from: "${buildscript.sourceFile.parent}/out.gradle"
 init.chooseBuildSrcBuildDir()
 
-apply from: "../shared-dependencies.gradle"
+apply from: "${buildscript.sourceFile.parent}/shared-dependencies.gradle"
 
 java {
     sourceCompatibility = JavaVersion.VERSION_17
@@ -32,10 +31,6 @@
     task.preserveFileTimestamps = false
 }
 
-validatePlugins {
-    enableStricterValidation = true
-}
-
 project.repos.addMavenRepositories(project.repositories)
 tasks.withType(KotlinCompile).configureEach {
     kotlinOptions {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
index 6fd951c..57ccca4 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
@@ -20,6 +20,8 @@
 
 import android.annotation.SuppressLint
 import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_ON
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
 import android.hardware.camera2.CameraMetadata
 import android.hardware.camera2.params.DynamicRangeProfiles
 import android.os.Build
@@ -211,11 +213,19 @@
     }
 
     override fun isPreviewStabilizationSupported(): Boolean {
-        return false
+        val availableVideoStabilizationModes = cameraProperties.metadata[
+            CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES]
+        return availableVideoStabilizationModes != null &&
+            availableVideoStabilizationModes.contains(
+            CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION)
     }
 
     override fun isVideoStabilizationSupported(): Boolean {
-        return false
+        val availableVideoStabilizationModes = cameraProperties.metadata[
+            CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES]
+        return availableVideoStabilizationModes != null &&
+            availableVideoStabilizationModes.contains(
+            CONTROL_VIDEO_STABILIZATION_MODE_ON)
     }
 
     private fun profileSetToDynamicRangeSet(profileSet: Set<Long>): Set<DynamicRange> {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
index 72d3930..4cd28b4 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
@@ -146,7 +146,8 @@
         return supportedSurfaceCombinationMap[cameraId]!!.getSuggestedStreamSpecifications(
             cameraMode,
             existingSurfaces,
-            newUseCaseConfigsSupportedSizeMap
+            newUseCaseConfigsSupportedSizeMap,
+            isPreviewStabilizationOn
         )
     }
 }
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
index 7d1c04f..a83161c 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
@@ -256,6 +256,9 @@
                 builder.addCameraCaptureCallback(CaptureCallbackContainer.create(it))
             }
 
+            builder.setPreviewStabilization(config.previewStabilizationMode)
+            builder.setVideoStabilization(config.videoStabilizationMode)
+
             // Copy extended Camera2 configurations
             val extendedConfig = MutableOptionsBundle.create().apply {
                 camera2Config.getPhysicalCameraId()?.let { physicalCameraId ->
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
index 33fac2e..c0fe1de 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
@@ -769,9 +769,92 @@
     }
 
     @JvmStatic
-    fun generateConcurrentSupportedCombinationList(): List<SurfaceCombination> {
-        val surfaceCombinations: MutableList<SurfaceCombination> = arrayListOf()
-        surfaceCombinations.addAll(getConcurrentSupportedCombinationList())
-        return surfaceCombinations
+    fun getPreviewStabilizationSupportedCombinationList(): List<SurfaceCombination> {
+        val combinationList: MutableList<SurfaceCombination> = ArrayList()
+        // (PRIV, s1440p)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, s1440p)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, s1440p) + (JPEG, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, s1440p) + (JPEG, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, s1440p) + (YUV, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, s1440p) + (YUV, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, PREVIEW) + (PRIV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, PREVIEW) + (PRIV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, PREVIEW) + (YUV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, PREVIEW) + (YUV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        return combinationList
     }
 }
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
index 2122ec2..63c187f 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
@@ -85,9 +85,14 @@
     private val hardwareLevel =
         cameraMetadata[CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL]
             ?: CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
+    private val availableStabilizationMode =
+        cameraMetadata[CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES]
+            ?: CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES
     private val concurrentSurfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
     private val surfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
     private val ultraHighSurfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
+    private val previewStabilizationSurfaceCombinations: MutableList<SurfaceCombination> =
+        mutableListOf()
     private val featureSettingsToSupportedCombinationsMap:
         MutableMap<FeatureSettings, List<SurfaceCombination>> = mutableMapOf()
     private val surfaceCombinations10Bit: MutableList<SurfaceCombination> = mutableListOf()
@@ -95,6 +100,7 @@
     private var isBurstCaptureSupported = false
     private var isConcurrentCameraModeSupported = false
     private var isUltraHighResolutionSensorSupported = false
+    private var isPreviewStabilizationSupported = false
     internal lateinit var surfaceSizeDefinition: SurfaceSizeDefinition
     private val surfaceSizeDefinitionFormats = mutableListOf<Int>()
     private val streamConfigurationMapCompat = getStreamConfigurationMapCompat()
@@ -120,6 +126,10 @@
         if (dynamicRangeResolver.is10BitDynamicRangeSupported()) {
             generate10BitSupportedCombinationList()
         }
+
+        if (isPreviewStabilizationSupported) {
+            generatePreviewStabilizationSupportedCombinationList()
+        }
         generateSurfaceSizeDefinition()
     }
 
@@ -162,7 +172,14 @@
                     supportedSurfaceCombinations.addAll(surfaceCombinations)
                 }
 
-                else -> supportedSurfaceCombinations.addAll(surfaceCombinations)
+                else -> {
+                    supportedSurfaceCombinations.addAll(
+                        if (featureSettings.isPreviewStabilizationOn)
+                            previewStabilizationSurfaceCombinations
+                        else
+                            surfaceCombinations
+                    )
+                }
             }
         } else if (featureSettings.requiredMaxBitDepth == DynamicRange.BIT_DEPTH_10_BIT) {
             // For 10-bit outputs, only the default camera mode is currently supported.
@@ -200,6 +217,7 @@
      * @param attachedSurfaces  the existing surfaces.
      * @param newUseCaseConfigsSupportedSizeMap newly added UseCaseConfig to supported output sizes
      * map.
+     * @param isPreviewStabilizationOn whether the preview stabilization is enabled.
      * @return the suggested stream specs, which is a mapping from UseCaseConfig to the suggested
      * stream specification.
      * @throws IllegalArgumentException if the suggested solution for newUseCaseConfigs cannot be
@@ -208,7 +226,8 @@
     fun getSuggestedStreamSpecifications(
         cameraMode: Int,
         attachedSurfaces: List<AttachedSurfaceInfo>,
-        newUseCaseConfigsSupportedSizeMap: Map<UseCaseConfig<*>, List<Size>>
+        newUseCaseConfigsSupportedSizeMap: Map<UseCaseConfig<*>, List<Size>>,
+        isPreviewStabilizationOn: Boolean = false
     ): Pair<Map<UseCaseConfig<*>, StreamSpec>, Map<AttachedSurfaceInfo, StreamSpec>> {
         // Refresh Preview Size based on current display configurations.
         refreshPreviewSize()
@@ -225,7 +244,8 @@
             newUseCaseConfigs, useCasesPriorityOrder
         )
         val requiredMaxBitDepth: Int = getRequiredMaxBitDepth(resolvedDynamicRanges)
-        val featureSettings = FeatureSettings(cameraMode, requiredMaxBitDepth)
+        val featureSettings = FeatureSettings(cameraMode, requiredMaxBitDepth,
+            isPreviewStabilizationOn)
         require(
             !(cameraMode != CameraMode.DEFAULT &&
                 requiredMaxBitDepth == DynamicRange.BIT_DEPTH_10_BIT)
@@ -818,6 +838,16 @@
                     .REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
             )
         }
+
+        // Preview Stabilization
+        val availablePreviewStabilizationModes: IntArray? =
+            cameraMetadata.get<IntArray>(
+                CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES)
+
+        availablePreviewStabilizationModes?.apply {
+            isPreviewStabilizationSupported = contains(
+                CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION)
+        }
     }
 
     /**
@@ -843,7 +873,13 @@
 
     private fun generateConcurrentSupportedCombinationList() {
         concurrentSurfaceCombinations.addAll(
-            GuaranteedConfigurationsUtil.generateConcurrentSupportedCombinationList()
+            GuaranteedConfigurationsUtil.getConcurrentSupportedCombinationList()
+        )
+    }
+
+    private fun generatePreviewStabilizationSupportedCombinationList() {
+        previewStabilizationSurfaceCombinations.addAll(
+            GuaranteedConfigurationsUtil.getPreviewStabilizationSupportedCombinationList()
         )
     }
 
@@ -1181,10 +1217,11 @@
      *           the camera. A value of [DynamicRange.BIT_DEPTH_10_BIT] corresponds to the camera
      *           capability
      *           [CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT].
-     *
+     * @param isPreviewStabilizationOn Whether the preview stabilization is enabled.
      */
     data class FeatureSettings(
         @CameraMode.Mode val cameraMode: Int,
-        val requiredMaxBitDepth: Int
+        val requiredMaxBitDepth: Int,
+        val isPreviewStabilizationOn: Boolean = false
     )
 }
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt
index 8f78da2..ad32973 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt
@@ -26,10 +26,10 @@
 
 /**
  * QuirkSummary
- * Bug Id: b/241876294
+ * Bug Id: b/241876294, b/299075294
  * Description: CamcorderProfile resolutions can not find a match in the output size list of
- * [CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]. Since these resolutions
- * can be supported in native camera app, add these resolutions back.
+ *              [CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]. Some resolutions are
+ *              added back as they are supported by the camera and do not have stretching issues.
  * Device(s): Motorola Moto E5 Play.
  *
  * TODO: enable CameraXQuirksClassDetector lint check when kotlin is supported.
@@ -65,14 +65,10 @@
     private val motoE5PlayExtraSupportedResolutions: Array<Size>
         get() = arrayOf(
             // FHD
-            Size(1920, 1080),
             Size(1440, 1080),
             // HD
-            Size(1280, 720),
             Size(960, 720),
             // SD (640:480 is already included in the original list)
-            Size(864, 480),
-            Size(720, 480)
         )
 
     companion object {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
index 88ff62b..7d6d71e 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
@@ -18,6 +18,8 @@
 package androidx.camera.camera2.pipe.integration.impl
 
 import android.content.Context
+import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CaptureRequest
 import android.media.MediaCodec
 import android.os.Build
 import androidx.annotation.GuardedBy
@@ -48,8 +50,10 @@
 import androidx.camera.core.impl.CameraInternal
 import androidx.camera.core.impl.CameraMode
 import androidx.camera.core.impl.DeferrableSurface
+import androidx.camera.core.impl.PreviewConfig
 import androidx.camera.core.impl.SessionConfig
 import androidx.camera.core.impl.SessionConfig.ValidatingBuilder
+import androidx.camera.core.impl.stabilization.StabilizationMode
 import javax.inject.Inject
 import javax.inject.Provider
 import kotlinx.coroutines.Job
@@ -458,10 +462,19 @@
             )
         }
 
+        var isPreviewStabilizationOn = false
+        for (useCase in currentUseCases) {
+            if (useCase.currentConfig is PreviewConfig) {
+                isPreviewStabilizationOn =
+                    useCase.currentConfig.previewStabilizationMode == StabilizationMode.ON
+            }
+        }
+
         return supportedSurfaceCombination.checkSupported(
             SupportedSurfaceCombination.FeatureSettings(
                 CameraMode.DEFAULT,
-                DynamicRange.BIT_DEPTH_8_BIT
+                DynamicRange.BIT_DEPTH_8_BIT,
+                isPreviewStabilizationOn
             ), surfaceConfigs
         )
     }
@@ -580,11 +593,34 @@
                     quirkCloseCameraDeviceOnClose = shouldCloseCameraDeviceOnClose,
                 )
 
+            // Set video stabilization mode to capture request
+            var videoStabilizationMode = CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_OFF
+            if (sessionConfigAdapter.getValidSessionConfigOrNull() != null) {
+                val config = sessionConfigAdapter
+                    .getValidSessionConfigOrNull()!!
+                    .repeatingCaptureConfig
+                val isPreviewStabilizationMode = config.previewStabilizationMode
+                val isVideoStabilizationMode = config.videoStabilizationMode
+
+                if (isPreviewStabilizationMode == StabilizationMode.OFF ||
+                    isVideoStabilizationMode == StabilizationMode.OFF) {
+                    videoStabilizationMode = CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_OFF
+                } else if (isPreviewStabilizationMode == StabilizationMode.ON) {
+                    videoStabilizationMode =
+                        CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
+                } else if (isVideoStabilizationMode == StabilizationMode.ON) {
+                    videoStabilizationMode = CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON
+                }
+            }
+
             // Build up a config (using TEMPLATE_PREVIEW by default)
             return CameraGraph.Config(
                 camera = cameraConfig.cameraId,
                 streams = streamConfigMap.keys.toList(),
                 defaultListeners = listOf(callbackMap, requestListener),
+                defaultParameters = mapOf(
+                    CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE to videoStabilizationMode
+                ),
                 flags = combinedFlags,
             )
         }
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
index dbb6baf..e845092 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
@@ -17,6 +17,9 @@
 package androidx.camera.camera2.pipe.integration.adapter
 
 import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_OFF
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_ON
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
 import android.os.Build
 import android.util.Range
 import android.util.Size
@@ -177,4 +180,80 @@
             CameraInfo.IMPLEMENTATION_TYPE_CAMERA2
         )
     }
+
+    @Test
+    fun cameraInfo_isPreviewStabilizationSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF,
+                                CONTROL_VIDEO_STABILIZATION_MODE_ON,
+                                CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isPreviewStabilizationSupported).isTrue()
+    }
+
+    @Test
+    fun cameraInfo_isPreviewStabilizationNotSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF,
+                                CONTROL_VIDEO_STABILIZATION_MODE_ON
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isPreviewStabilizationSupported).isFalse()
+    }
+
+    @Test
+    fun cameraInfo_isVideoStabilizationSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF,
+                                CONTROL_VIDEO_STABILIZATION_MODE_ON
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isVideoStabilizationSupported).isTrue()
+    }
+
+    @Test
+    fun cameraInfo_isVideoStabilizationNotSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isVideoStabilizationSupported).isFalse()
+    }
 }
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt
index 8311cc8..c4d6e34 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt
@@ -93,12 +93,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
@@ -130,12 +126,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt
index c6b3b8d4..52c5535 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt
@@ -20,6 +20,7 @@
 import android.hardware.camera2.CaptureRequest
 import android.hardware.camera2.CaptureResult
 import android.os.Build
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 import androidx.camera.camera2.pipe.Metadata
@@ -61,6 +62,9 @@
             get() = TODO("Not yet implemented")
         override val physicalRequestKeys: Set<CaptureRequest.Key<*>>
             get() = TODO("Not yet implemented")
+        override val supportedExtensions: Set<Int>
+            get() = TODO("Not yet implemented")
+
         override val requestKeys: Set<CaptureRequest.Key<*>>
             get() = TODO("Not yet implemented")
         override val resultKeys: Set<CaptureResult.Key<*>>
@@ -72,6 +76,14 @@
             TODO("Not yet implemented")
         }
 
+        override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+            TODO("Not yet implemented")
+        }
+
+        override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+            TODO("Not yet implemented")
+        }
+
         override fun <T> get(key: CameraCharacteristics.Key<T>): T? {
             println("throwingCameraMetadata get: key = $key")
             if (
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt
index 132aeb3..3a9a837 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt
@@ -20,6 +20,7 @@
 import android.hardware.camera2.CaptureRequest
 import android.hardware.camera2.CaptureResult
 import android.os.Build
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 import androidx.camera.camera2.pipe.Metadata
@@ -112,13 +113,26 @@
         override val isRedacted: Boolean = false
 
         override val physicalCameraIds: Set<CameraId> = physicalMetadata.keys
+        override val supportedExtensions: Set<Int>
+            get() = TODO("b/299356087 - Add support for fake extension metadata")
+
         override suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata =
             physicalMetadata[cameraId]!!
 
         override fun awaitPhysicalMetadata(cameraId: CameraId): CameraMetadata =
             physicalMetadata[cameraId]!!
 
-        override fun <T : Any> unwrapAs(type: KClass<T>): T? = null
+        override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+            TODO("b/299356087 - Add support for fake extension metadata")
+        }
+
+        override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+            TODO("b/299356087 - Add support for fake extension metadata")
+        }
+
+        override fun <T : Any> unwrapAs(type: KClass<T>): T? {
+            TODO("Not yet implemented")
+        }
     }
 
     companion object {
diff --git a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
index e631d09..c097a17 100644
--- a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
+++ b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
@@ -25,6 +25,7 @@
 import android.hardware.camera2.TotalCaptureResult
 import android.view.Surface
 import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 import androidx.camera.camera2.pipe.FrameInfo
@@ -84,6 +85,7 @@
     override val sessionKeys: Set<CaptureRequest.Key<*>> = emptySet(),
     val physicalMetadata: Map<CameraId, CameraMetadata> = emptyMap(),
     override val physicalRequestKeys: Set<CaptureRequest.Key<*>> = emptySet(),
+    override val supportedExtensions: Set<Int> = emptySet(),
 ) : FakeMetadata(metadata), CameraMetadata {
 
     override fun <T> get(key: CameraCharacteristics.Key<T>): T? = characteristics[key] as T?
@@ -94,12 +96,21 @@
     override val isRedacted: Boolean = false
 
     override val physicalCameraIds: Set<CameraId> = physicalMetadata.keys
+
     override suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata =
         physicalMetadata[cameraId]!!
 
     override fun awaitPhysicalMetadata(cameraId: CameraId): CameraMetadata =
         physicalMetadata[cameraId]!!
 
+    override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+        TODO("b/299356087 - Add support for fake extension metadata")
+    }
+
+    override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+        TODO("b/299356087 - Add support for fake extension metadata")
+    }
+
     override fun <T : Any> unwrapAs(type: KClass<T>): T? = null
 }
 
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraExtensionMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraExtensionMetadata.kt
new file mode 100644
index 0000000..6d6d0bb
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraExtensionMetadata.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 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.
+ */
+
+@file:RequiresApi(31) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe
+
+import android.hardware.camera2.CameraExtensionCharacteristics
+import android.hardware.camera2.CaptureRequest
+import android.hardware.camera2.CaptureResult
+import android.util.Size
+import androidx.annotation.RequiresApi
+import androidx.annotation.RestrictTo
+
+/**
+ * [CameraExtensionMetadata] is a compatibility wrapper around [CameraExtensionCharacteristics].
+ *
+ * Applications should, in most situations, prefer using this interface to unwrapping and
+ * using the underlying [CameraExtensionCharacteristics] object directly. Implementation(s) of this
+ * interface provide compatibility guarantees and performance improvements over using
+ * [CameraExtensionCharacteristics] directly. This allows code to get reasonable behavior for all
+ * properties across all OS levels and makes behavior that depends on [CameraExtensionMetadata]
+ * easier to test and reason about.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+interface CameraExtensionMetadata : Metadata, UnsafeWrapper {
+    val camera: CameraId
+    val isRedacted: Boolean
+    val cameraExtension: Int
+
+    val requestKeys: Set<CaptureRequest.Key<*>>
+    val resultKeys: Set<CaptureResult.Key<*>>
+
+    fun getOutputSizes(imageFormat: Int): Set<Size>
+    fun getOutputSizes(klass: Class<*>): Set<Size>
+}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt
index 57e6259..2ba2457 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt
@@ -48,9 +48,12 @@
 
     val physicalCameraIds: Set<CameraId>
     val physicalRequestKeys: Set<CaptureRequest.Key<*>>
+    val supportedExtensions: Set<Int>
 
     suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata
     fun awaitPhysicalMetadata(cameraId: CameraId): CameraMetadata
+    suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata
+    fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata
 
     companion object {
         /**
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt
index 20bdb3d..1fcfbd4 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt
@@ -21,6 +21,7 @@
 import android.hardware.camera2.CameraCaptureSession
 import android.hardware.camera2.CameraCharacteristics
 import android.hardware.camera2.CameraDevice
+import android.hardware.camera2.CameraExtensionCharacteristics
 import android.hardware.camera2.CameraExtensionSession
 import android.hardware.camera2.CameraManager
 import android.hardware.camera2.CaptureRequest
@@ -314,6 +315,13 @@
 
     @JvmStatic
     @DoNotInline
+    fun getCameraExtensionCharacteristics(
+        cameraManager: CameraManager,
+        cameraId: String
+    ): CameraExtensionCharacteristics = cameraManager.getCameraExtensionCharacteristics(cameraId)
+
+    @JvmStatic
+    @DoNotInline
     fun newExtensionSessionConfiguration(
         extensionMode: Int,
         outputs: List<OutputConfiguration?>,
@@ -322,6 +330,29 @@
     ): ExtensionSessionConfiguration {
         return ExtensionSessionConfiguration(extensionMode, outputs, executor, stateCallback)
     }
+
+    @JvmStatic
+    @DoNotInline
+    fun getSupportedExtensions(
+        extensionCharacteristics: CameraExtensionCharacteristics
+    ): List<Int> = extensionCharacteristics.supportedExtensions
+
+    @JvmStatic
+    @DoNotInline
+    fun getExtensionSupportedSizes(
+        extensionCharacteristics: CameraExtensionCharacteristics,
+        extension: Int,
+        imageFormat: Int
+    ): List<Size> = extensionCharacteristics.getExtensionSupportedSizes(extension, imageFormat)
+
+    @JvmStatic
+    @DoNotInline
+    fun getExtensionSupportedSizes(
+        extensionCharacteristics: CameraExtensionCharacteristics,
+        extension: Int,
+        klass: Class<*>
+    ): List<Size> =
+        extensionCharacteristics.getExtensionSupportedSizes(extension, klass)
 }
 
 @RequiresApi(Build.VERSION_CODES.TIRAMISU)
@@ -379,4 +410,30 @@
     fun getTimestampBase(outputConfig: OutputConfiguration): Int {
         return outputConfig.timestampBase
     }
+
+    @JvmStatic
+    @DoNotInline
+    fun getAvailableCaptureRequestKeys(
+        extensionCharacteristics: CameraExtensionCharacteristics,
+        extension: Int
+    ): Set<CaptureRequest.Key<Any>> =
+        extensionCharacteristics.getAvailableCaptureRequestKeys(extension)
+
+    @JvmStatic
+    @DoNotInline
+    fun getAvailableCaptureResultKeys(
+        extensionCharacteristics: CameraExtensionCharacteristics,
+        extension: Int
+    ): Set<CaptureResult.Key<Any>> =
+        extensionCharacteristics.getAvailableCaptureResultKeys(extension)
+}
+
+@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+internal object Api34Compat {
+    @JvmStatic
+    @DoNotInline
+    fun isPostviewAvailable(
+        extensionCharacteristics: CameraExtensionCharacteristics,
+        extension: Int
+    ): Boolean = extensionCharacteristics.isPostviewAvailable(extension)
 }
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraExtensionMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraExtensionMetadata.kt
new file mode 100644
index 0000000..2dc7595
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraExtensionMetadata.kt
@@ -0,0 +1,144 @@
+/*
+ * Copyright 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 androidx.camera.camera2.pipe.compat
+
+import android.hardware.camera2.CameraExtensionCharacteristics
+import android.hardware.camera2.CaptureRequest
+import android.hardware.camera2.CaptureResult
+import android.os.Build
+import android.util.Size
+import androidx.annotation.GuardedBy
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
+import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.Metadata
+import androidx.camera.camera2.pipe.core.Debug
+import androidx.camera.camera2.pipe.core.Log
+import kotlin.reflect.KClass
+
+/**
+ * This implementation provides access to [CameraExtensionMetadata] and lazy caching of
+ * properties that are either expensive to create and access, or that only exist on newer versions
+ * of the OS. This allows all fields to be accessed and return reasonable values on all OS versions.
+ */
+@RequiresApi(Build.VERSION_CODES.S)
+// TODO(b/200306659): Remove and replace with annotation on package-info.java
+internal class Camera2CameraExtensionMetadata(
+    override val camera: CameraId,
+    override val isRedacted: Boolean,
+    override val cameraExtension: Int,
+    private val extensionCharacteristics: CameraExtensionCharacteristics,
+    private val metadata: Map<Metadata.Key<*>, Any?>
+) : CameraExtensionMetadata {
+    @GuardedBy("supportedExtensionSizesByFormat")
+    private val supportedExtensionSizesByFormat = mutableMapOf<Int, Lazy<Set<Size>>>()
+
+    @GuardedBy("supportedExtensionSizesByClass")
+    private val supportedExtensionSizesByClass = mutableMapOf<Class<*>, Lazy<Set<Size>>>()
+
+    // TODO: b/299356087 - this here may need a switch statement on the key
+    @Suppress("UNCHECKED_CAST")
+    override fun <T> get(key: Metadata.Key<T>): T? = metadata[key] as T?
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <T> getOrDefault(key: Metadata.Key<T>, default: T): T =
+        metadata[key] as T? ?: default
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <T : Any> unwrapAs(type: KClass<T>): T? =
+        when (type) {
+            CameraExtensionCharacteristics::class -> extensionCharacteristics as T
+            else -> null
+        }
+
+    override val requestKeys: Set<CaptureRequest.Key<*>>
+        get() = _requestKeys.value
+    override val resultKeys: Set<CaptureResult.Key<*>>
+        get() = _resultKeys.value
+
+    override fun getOutputSizes(imageFormat: Int): Set<Size> {
+        val supportedExtensionSizes = synchronized(supportedExtensionSizesByFormat) {
+            supportedExtensionSizesByFormat.getOrPut(imageFormat) {
+                lazy(LazyThreadSafetyMode.PUBLICATION) {
+                    Api31Compat.getExtensionSupportedSizes(
+                        extensionCharacteristics,
+                        cameraExtension,
+                        imageFormat
+                    ).toSet()
+                }
+            }
+        }
+        return supportedExtensionSizes.value
+    }
+
+    override fun getOutputSizes(klass: Class<*>): Set<Size> {
+        val supportedExtensionSizes = synchronized(supportedExtensionSizesByClass) {
+            supportedExtensionSizesByClass.getOrPut(klass) {
+                lazy(LazyThreadSafetyMode.PUBLICATION) {
+                    Api31Compat.getExtensionSupportedSizes(
+                        extensionCharacteristics,
+                        cameraExtension,
+                        klass
+                    ).toSet()
+                }
+            }
+        }
+        return supportedExtensionSizes.value
+    }
+
+    private val _requestKeys: Lazy<Set<CaptureRequest.Key<*>>> =
+        lazy(LazyThreadSafetyMode.PUBLICATION) {
+            try {
+                Debug.trace("Camera-$camera#availableCaptureRequestKeys") {
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                        Api33Compat.getAvailableCaptureRequestKeys(
+                            extensionCharacteristics,
+                            cameraExtension
+                        ).toSet()
+                    } else {
+                        emptySet()
+                    }
+                }
+            } catch (e: AssertionError) {
+                Log.warn(e) {
+                    "Failed to getAvailableCaptureRequestKeys from Camera-$camera"
+                }
+                emptySet()
+            }
+        }
+
+    private val _resultKeys: Lazy<Set<CaptureResult.Key<*>>> =
+        lazy(LazyThreadSafetyMode.PUBLICATION) {
+            try {
+                Debug.trace("Camera-$camera#availableCaptureResultKeys") {
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                        Api33Compat.getAvailableCaptureResultKeys(
+                            extensionCharacteristics,
+                            cameraExtension
+                        ).toSet()
+                    } else {
+                        emptySet()
+                    }
+                }
+            } catch (e: AssertionError) {
+                Log.warn(e) {
+                    "Failed to getAvailableCaptureResultKeys from Camera-$camera"
+                }
+                emptySet()
+            }
+        }
+}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
index 7274b3b..892e1da 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
@@ -17,12 +17,14 @@
 package androidx.camera.camera2.pipe.compat
 
 import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraExtensionCharacteristics
 import android.hardware.camera2.CaptureRequest
 import android.hardware.camera2.CaptureResult
 import android.os.Build
 import android.util.ArrayMap
 import androidx.annotation.GuardedBy
 import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 import androidx.camera.camera2.pipe.Metadata
@@ -47,7 +49,10 @@
     @GuardedBy("values")
     private val values = ArrayMap<CameraCharacteristics.Key<*>, Any?>()
 
-    // TODO: b/275575818 - this here may need a switch statement on the key
+    @GuardedBy("extensionCache")
+    private val extensionCache = ArrayMap<Int, CameraExtensionMetadata>()
+
+    // TODO: b/299356087 - this here may need a switch statement on the key
     @Suppress("UNCHECKED_CAST")
     override fun <T> get(key: Metadata.Key<T>): T? = metadata[key] as T?
 
@@ -106,6 +111,8 @@
         get() = _physicalCameraIds.value
     override val physicalRequestKeys: Set<CaptureRequest.Key<*>>
         get() = _physicalRequestKeys.value
+    override val supportedExtensions: Set<Int>
+        get() = _supportedExtensions.value
 
     override suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata {
         check(physicalCameraIds.contains(cameraId)) {
@@ -121,6 +128,51 @@
         return metadataProvider.awaitCameraMetadata(cameraId)
     }
 
+    private fun getExtensionCharacteristics(): CameraExtensionCharacteristics {
+        return metadataProvider.getCameraExtensionCharacteristics(camera)
+    }
+
+    override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+        val existing = synchronized(extensionCache) { extensionCache[extension] }
+        return if (existing != null) {
+            existing
+        } else {
+            val extensionMetadata = metadataProvider.getCameraExtensionMetadata(camera, extension)
+            synchronized(extensionCache) { extensionCache[extension] = extensionMetadata }
+            extensionMetadata
+        }
+    }
+
+    override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+        val existing = synchronized(extensionCache) { extensionCache[extension] }
+        return if (existing != null) {
+            existing
+        } else {
+            val extensionMetadata = metadataProvider.awaitCameraExtensionMetadata(camera, extension)
+            synchronized(extensionCache) { extensionCache[extension] = extensionMetadata }
+            extensionMetadata
+        }
+    }
+
+    private val _supportedExtensions: Lazy<Set<Int>> =
+        lazy(LazyThreadSafetyMode.PUBLICATION) {
+            try {
+                Debug.trace("Camera-$camera#supportedExtensions") {
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                        val extensionCharacteristics = getExtensionCharacteristics()
+                        Api31Compat.getSupportedExtensions(extensionCharacteristics).toSet()
+                    } else {
+                        emptySet()
+                    }
+                }
+            } catch (e: AssertionError) {
+                Log.warn(e) {
+                    "Failed to getSupportedExtensions from Camera-$camera"
+                }
+                emptySet()
+            }
+        }
+
     private val _keys: Lazy<Set<CameraCharacteristics.Key<*>>> =
         lazy(LazyThreadSafetyMode.PUBLICATION) {
             try {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
index ba3953d7..ce3d323 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
@@ -18,12 +18,14 @@
 
 import android.content.Context
 import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraExtensionCharacteristics
 import android.hardware.camera2.CameraManager
 import android.os.Build
 import android.util.ArrayMap
 import androidx.annotation.GuardedBy
 import androidx.annotation.RequiresApi
 import androidx.camera.camera2.pipe.CameraError
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 import androidx.camera.camera2.pipe.CameraPipe
@@ -41,10 +43,11 @@
 import kotlinx.coroutines.withContext
 
 /**
- * Provides caching and querying of [CameraMetadata] via Camera2.
+ * Provides caching and querying of [CameraMetadata] and [CameraExtensionMetadata]
+ * via Camera2.
  *
  * This class is thread safe and provides suspending functions for querying and accessing
- * [CameraMetadata].
+ * [CameraMetadata] and [CameraExtensionMetadata].
  */
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
 @Singleton
@@ -57,9 +60,16 @@
     private val cameraMetadataConfig: CameraPipe.CameraMetadataConfig,
     private val timeSource: TimeSource
 ) : Camera2MetadataProvider {
+
     @GuardedBy("cache")
     private val cache = ArrayMap<String, CameraMetadata>()
 
+    @GuardedBy("extensionCache")
+    private val extensionCache = ArrayMap<String, CameraExtensionMetadata>()
+
+    @GuardedBy("extensionCharacteristicsCache")
+    private val extensionCharacteristicsCache = ArrayMap<String, CameraExtensionCharacteristics>()
+
     override suspend fun getCameraMetadata(cameraId: CameraId): CameraMetadata {
         synchronized(cache) {
             val existing = cache[cameraId.value]
@@ -72,6 +82,23 @@
         return withContext(threads.backgroundDispatcher) { awaitCameraMetadata(cameraId) }
     }
 
+    override suspend fun getCameraExtensionMetadata(
+        cameraId: CameraId,
+        extension: Int
+    ): CameraExtensionMetadata {
+        synchronized(extensionCache) {
+            val existing = extensionCache[cameraId.value]
+            if (existing != null) {
+                return existing
+            }
+        }
+
+        // Suspend and query CameraExtensionMetadata on a background thread.
+        return withContext(threads.backgroundDispatcher) {
+            awaitCameraExtensionMetadata(cameraId, extension)
+        }
+    }
+
     override fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata {
         return Debug.trace("Camera-${cameraId.value}#awaitMetadata") {
             synchronized(cache) {
@@ -88,7 +115,36 @@
         }
     }
 
-    private fun createCameraMetadata(cameraId: CameraId, redacted: Boolean): Camera2CameraMetadata {
+    override fun awaitCameraExtensionMetadata(
+        cameraId: CameraId,
+        extension: Int
+    ): CameraExtensionMetadata {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+            return Debug.trace("Camera-${cameraId.value}#awaitExtensionMetadata") {
+                synchronized(extensionCache) {
+                    val existing = extensionCache[cameraId.value]
+                    if (existing != null) {
+                        return@trace existing
+                    } else if (!isMetadataRedacted()) {
+                        val result = createCameraExtensionMetadata(cameraId, false, extension)
+                        extensionCache[cameraId.value] = result
+                        return@trace result
+                    }
+                }
+                return@trace createCameraExtensionMetadata(cameraId, true, extension)
+            }
+        } else {
+            throw Exception(
+                "Extension sessions are only supported on Android S or higher. " +
+                    "Device SDK is ${Build.VERSION.SDK_INT}"
+            )
+        }
+    }
+
+    private fun createCameraMetadata(
+        cameraId: CameraId,
+        redacted: Boolean
+    ): Camera2CameraMetadata {
         val start = Timestamps.now(timeSource)
 
         return Debug.trace("Camera-${cameraId.value}#readCameraMetadata") {
@@ -153,6 +209,77 @@
         }
     }
 
+    @RequiresApi(Build.VERSION_CODES.S)
+    private fun createCameraExtensionMetadata(
+        cameraId: CameraId,
+        redacted: Boolean,
+        extension: Int
+    ): Camera2CameraExtensionMetadata {
+        val start = Timestamps.now(timeSource)
+
+        return Debug.trace("Camera-${cameraId.value}#readCameraExtensionMetadata") {
+            try {
+                Log.debug { "Loading extension metadata for $cameraId" }
+
+                val extensionCharacteristics = getCameraExtensionCharacteristics(cameraId)
+
+                val extensionMetadata =
+                    Camera2CameraExtensionMetadata(
+                        cameraId,
+                        redacted,
+                        extension,
+                        extensionCharacteristics,
+                        emptyMap()
+                    )
+
+                Log.info {
+                    val duration = Timestamps.now(timeSource) - start
+                    val redactedString =
+                        when (redacted) {
+                            false -> ""
+                            true -> " (redacted)"
+                        }
+                    "Loaded extension metadata for $cameraId in " +
+                        "${duration.formatMs()}$redactedString"
+                }
+
+                return@trace extensionMetadata
+            } catch (throwable: Throwable) {
+                throw IllegalStateException(
+                    "Failed to load extension metadata " +
+                        "for $cameraId!", throwable
+                )
+            }
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.S)
+    override fun getCameraExtensionCharacteristics(
+        cameraId: CameraId
+    ): CameraExtensionCharacteristics {
+        synchronized(extensionCharacteristicsCache) {
+            val existing = extensionCharacteristicsCache[cameraId.value]
+            if (existing != null) {
+                return existing
+            }
+        }
+        Log.debug { "Retrieving CameraExtensionCharacteristics for $cameraId" }
+        val cameraManager =
+            cameraPipeContext.getSystemService(Context.CAMERA_SERVICE) as CameraManager
+
+        val extensionCharacteristics = Api31Compat
+            .getCameraExtensionCharacteristics(cameraManager, cameraId.value)
+
+        // This technically shouldn't be null per documentation, but we suspect it could be
+        // under certain devices in certain situations.
+        @Suppress("RedundantRequireNotNullCall")
+        checkNotNull(extensionCharacteristics) {
+            "Failed to get CameraExtensionCharacteristics for $cameraId!"
+        }
+
+        return extensionCharacteristics
+    }
+
     private fun isMetadataRedacted(): Boolean = !permissions.hasCameraPermission
 
     private fun shouldBlockSensorOrientationCache(characteristics: CameraCharacteristics): Boolean {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt
index 4680eef..0ef832f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt
@@ -16,7 +16,9 @@
 
 package androidx.camera.camera2.pipe.compat
 
+import android.hardware.camera2.CameraExtensionCharacteristics
 import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 
@@ -30,4 +32,22 @@
      * Attempt to retrieve [CameraMetadata], blocking the calling thread if it is not yet available.
      */
     fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata
+
+    /** Attempt to retrieve [CameraExtensionCharacteristics] */
+    fun getCameraExtensionCharacteristics(cameraId: CameraId): CameraExtensionCharacteristics
+
+    /**
+     * Attempt to retrieve [CameraExtensionMetadata], blocking the calling thread if it is
+     * not yet available.
+     */
+    suspend fun getCameraExtensionMetadata(
+        cameraId: CameraId,
+        extension: Int
+    ): CameraExtensionMetadata
+
+    /**
+     * Attempt to retrieve [CameraExtensionMetadata], blocking the calling thread if it is
+     * not yet available.
+     */
+    fun awaitCameraExtensionMetadata(cameraId: CameraId, extension: Int): CameraExtensionMetadata
 }
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt
index bb36212..d6b4bec 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt
@@ -106,5 +106,21 @@
                 Build.MANUFACTURER]?.contains(Build.DEVICE) == true &&
                 Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE
         }
+
+        /**
+         * A quirk that calls CameraExtensionCharacteristics before opening an Extension session.
+         * This is an issue in the Android camera framework where Camera2 has a global variable
+         * recording if advanced extensions are supported or not, and the variable is updated
+         * the first time CameraExtensionCharacteristics are queried. If CameraExtensionCharacteristics
+         * are not queried and therefore the variable is not set, Camera2 will fall back to basic
+         * extensions, even if they are not supported, causing the session creation to fail.
+         *
+         * - Bug(s): b/293473614
+         * - Device(s): All devices that support advanced extensions
+         * - API levels: Before 34 (U)
+         */
+        internal fun shouldGetExtensionCharacteristicsBeforeSession(): Boolean {
+            return Build.VERSION.SDK_INT <= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
+        }
     }
 }
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
index 59e63f2..96484ad 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
@@ -422,6 +422,23 @@
                 )
             }
 
+        val extensionMode = checkNotNull(
+            graphConfig.sessionParameters
+                [CameraPipeKeys.camera2ExtensionMode] as? Int
+        ) {
+            "The CameraPipeKeys.camera2ExtensionMode must be set in the sessionParameters of the " +
+                "CameraGraph.Config when creating an Extension CameraGraph."
+        }
+
+        val cameraMetadata = camera2MetadataProvider.awaitCameraMetadata(cameraDevice.cameraId)
+
+        val supportedExtensions = cameraMetadata.supportedExtensions
+
+        check(extensionMode in supportedExtensions) {
+            "$cameraDevice does not support extension mode $extensionMode. Supported " +
+                "extensions are ${supportedExtensions.stream()}"
+        }
+
         val outputs = buildOutputConfigurations(
             graphConfig,
             streamGraph,
@@ -437,16 +454,6 @@
 
         check(graphConfig.input == null) { "Reprocessing is not supported for Extensions" }
 
-        val extensionMode = checkNotNull(
-            graphConfig.sessionParameters
-                [CameraPipeKeys.camera2ExtensionMode] as? Int
-        ) {
-            "The CameraPipeKeys.camera2ExtensionMode must be set in the sessionParameters of the " +
-                "CameraGraph.Config when creating an Extension CameraGraph."
-        }
-
-        // TODO: b/275575818 - check camera supports extension mode from metadata
-
         val extensionSessionState = ExtensionSessionState(captureSessionState)
 
         val sessionConfig =
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
index dcf8a14..dace6c2 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
@@ -20,11 +20,13 @@
 
 import android.content.Context
 import android.graphics.SurfaceTexture
+import android.hardware.camera2.CameraExtensionCharacteristics
 import android.os.Build
 import android.os.Looper
 import android.util.Size
 import android.view.Surface
 import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraGraph
 import androidx.camera.camera2.pipe.CameraGraph.Flags.FinalizeSessionOnCloseBehavior
 import androidx.camera.camera2.pipe.CameraId
@@ -210,5 +212,25 @@
         override fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata {
             return fakeCamera.metadata
         }
+
+        override fun getCameraExtensionCharacteristics(
+            cameraId: CameraId
+        ): CameraExtensionCharacteristics {
+            TODO("b/299356087 - Add support for fake extension metadata")
+        }
+
+        override suspend fun getCameraExtensionMetadata(
+            cameraId: CameraId,
+            extension: Int
+        ): CameraExtensionMetadata {
+            TODO("b/299356087 - Add support for fake extension metadata")
+        }
+
+        override fun awaitCameraExtensionMetadata(
+            cameraId: CameraId,
+            extension: Int
+        ): CameraExtensionMetadata {
+            TODO("b/299356087 - Add support for fake extension metadata")
+        }
     }
 }
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
index 7fff5c7..276a508 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
@@ -18,6 +18,7 @@
 
 import android.hardware.camera2.CameraAccessException
 import android.hardware.camera2.CameraDevice
+import android.hardware.camera2.CameraExtensionCharacteristics
 import android.os.Build
 import androidx.camera.camera2.pipe.CameraError
 import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_CAMERA_DISABLED
@@ -28,6 +29,7 @@
 import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_DO_NOT_DISTURB_ENABLED
 import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_ILLEGAL_ARGUMENT_EXCEPTION
 import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_SECURITY_EXCEPTION
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 import androidx.camera.camera2.pipe.core.DurationNs
@@ -64,6 +66,26 @@
 
             override fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata =
                 FakeCameraMetadata(cameraId = cameraId)
+
+            override fun getCameraExtensionCharacteristics(
+                cameraId: CameraId
+            ): CameraExtensionCharacteristics {
+                TODO("b/299356087 - Add support for fake extension metadata")
+            }
+
+            override suspend fun getCameraExtensionMetadata(
+                cameraId: CameraId,
+                extension: Int
+            ): CameraExtensionMetadata {
+                TODO("b/299356087 - Add support for fake extension metadata")
+            }
+
+            override fun awaitCameraExtensionMetadata(
+                cameraId: CameraId,
+                extension: Int
+            ): CameraExtensionMetadata {
+                TODO("b/299356087 - Add support for fake extension metadata")
+            }
         }
 
     // TODO(lnishan): Consider mocking this object when Mockito works well with value classes.
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt
index 686adee..bfcc2d6 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt
@@ -16,7 +16,9 @@
 
 package androidx.camera.camera2.pipe.testing
 
+import android.hardware.camera2.CameraExtensionCharacteristics
 import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
 import androidx.camera.camera2.pipe.CameraId
 import androidx.camera.camera2.pipe.CameraMetadata
 import androidx.camera.camera2.pipe.compat.Camera2MetadataProvider
@@ -24,7 +26,8 @@
 /** Utility class for providing fake metadata for tests. */
 @RequiresApi(21)
 class FakeCameraMetadataProvider(
-    private val fakeMetadata: Map<CameraId, CameraMetadata> = emptyMap()
+    private val fakeMetadata: Map<CameraId, CameraMetadata> = emptyMap(),
+    private val fakeExtensionMetadata: Map<CameraId, CameraExtensionMetadata> = emptyMap()
 ) : Camera2MetadataProvider {
     override suspend fun getCameraMetadata(cameraId: CameraId): CameraMetadata =
         awaitCameraMetadata(cameraId)
@@ -33,4 +36,24 @@
         checkNotNull(fakeMetadata[cameraId]) {
             "Failed to find metadata for $cameraId. Available fakeMetadata is $fakeMetadata"
         }
+
+    override fun getCameraExtensionCharacteristics(
+        cameraId: CameraId
+    ): CameraExtensionCharacteristics {
+        TODO("b/299356087 - Add support for fake extension metadata")
+    }
+
+    override suspend fun getCameraExtensionMetadata(
+        cameraId: CameraId,
+        extension: Int
+    ): CameraExtensionMetadata = awaitCameraExtensionMetadata(cameraId, extension)
+
+    override fun awaitCameraExtensionMetadata(
+        cameraId: CameraId,
+        extension: Int
+    ): CameraExtensionMetadata =
+        checkNotNull(fakeExtensionMetadata[cameraId]) {
+            "Failed to find extension metadata for $cameraId. Available " +
+                "fakeExtensionMetadata is $fakeExtensionMetadata"
+        }
 }
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
index edcf484..ffffd60 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
@@ -22,6 +22,7 @@
 import static android.hardware.camera2.CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING;
 import static android.hardware.camera2.CameraMetadata.SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME;
 import static android.hardware.camera2.CameraMetadata.SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;
+
 import static androidx.camera.camera2.internal.ZslUtil.isCapabilitySupported;
 
 import android.hardware.camera2.CameraCharacteristics;
@@ -55,7 +56,6 @@
 import androidx.camera.core.ExposureState;
 import androidx.camera.core.FocusMeteringAction;
 import androidx.camera.core.Logger;
-import androidx.camera.core.PreviewCapabilities;
 import androidx.camera.core.ZoomState;
 import androidx.camera.core.impl.CameraCaptureCallback;
 import androidx.camera.core.impl.CameraInfoInternal;
@@ -508,12 +508,6 @@
         }
     }
 
-    @NonNull
-    @Override
-    public PreviewCapabilities getPreviewCapabilities() {
-        return Camera2PreviewCapabilities.from(this);
-    }
-
     @Override
     public boolean isVideoStabilizationSupported() {
         int[] availableVideoStabilizationModes =
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2PreviewCapabilities.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2PreviewCapabilities.java
deleted file mode 100644
index aa25edd..0000000
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2PreviewCapabilities.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2023 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 androidx.camera.camera2.internal;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.CameraInfo;
-import androidx.camera.core.PreviewCapabilities;
-import androidx.camera.core.impl.CameraInfoInternal;
-
-/**
- * Camera2 implementation of {@link PreviewCapabilities}.
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public class Camera2PreviewCapabilities implements PreviewCapabilities {
-
-    private boolean mIsStabilizationSupported = false;
-
-    Camera2PreviewCapabilities(@NonNull CameraInfoInternal cameraInfoInternal) {
-        mIsStabilizationSupported = cameraInfoInternal.isPreviewStabilizationSupported();
-    }
-
-
-    @NonNull
-    static Camera2PreviewCapabilities from(@NonNull CameraInfo cameraInfo) {
-        return new Camera2PreviewCapabilities((CameraInfoInternal) cameraInfo);
-    }
-
-
-    @Override
-    public boolean isStabilizationSupported() {
-        return mIsStabilizationSupported;
-    }
-}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java
index 4c8d046..9907a6c 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java
@@ -27,10 +27,11 @@
 
 /**
  * <p>QuirkSummary
- *     Bug Id: b/241876294
+ *     Bug Id: b/241876294, b/299075294
  *     Description: CamcorderProfile resolutions can not find a match in the output size list of
- *                  CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP. Since these resolutions
- *                  can be supported in native camera app, add these resolutions back.
+ *                  CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP. Some resolutions are
+ *                  added back as they are supported by the camera and do not have stretching
+ *                  issues.
  *     Device(s): Motorola Moto E5 Play.
  */
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
@@ -75,14 +76,10 @@
         // Both the front and the main cameras support the following resolutions.
         return new Size[]{
                 // FHD
-                new Size(1920, 1080),
                 new Size(1440, 1080),
                 // HD
-                new Size(1280, 720),
                 new Size(960, 720),
                 // SD (640:480 is already included in the original list)
-                new Size(864, 480),
-                new Size(720, 480),
         };
     }
 }
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt
index f802c7d3..fb68bec 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt
@@ -92,12 +92,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
@@ -129,12 +125,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
diff --git a/camera/camera-core/api/current.txt b/camera/camera-core/api/current.txt
index adace2b..485169b 100644
--- a/camera/camera-core/api/current.txt
+++ b/camera/camera-core/api/current.txt
@@ -136,6 +136,7 @@
   @RequiresApi(21) public final class CameraXConfig {
     method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?);
     method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+    method public long getCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
     method public int getMinimumLoggingLevel();
     method public android.os.Handler? getSchedulerHandler(android.os.Handler?);
   }
@@ -145,6 +146,7 @@
     method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
     method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector);
     method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
     method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int);
     method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler);
   }
@@ -427,6 +429,7 @@
     method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isPreviewStabilizationEnabled();
     method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
     method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
     method public void setTargetRotation(int);
@@ -435,6 +438,7 @@
   public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
     ctor public Preview.Builder();
     method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setPreviewStabilizationEnabled(boolean);
     method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
     method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
     method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range<java.lang.Integer!>);
@@ -447,6 +451,10 @@
     method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
   }
 
+  @RequiresApi(21) public interface PreviewCapabilities {
+    method public boolean isStabilizationSupported();
+  }
+
   public class ProcessingException extends java.lang.Exception {
     ctor public ProcessingException();
   }
diff --git a/camera/camera-core/api/restricted_current.txt b/camera/camera-core/api/restricted_current.txt
index adace2b..485169b 100644
--- a/camera/camera-core/api/restricted_current.txt
+++ b/camera/camera-core/api/restricted_current.txt
@@ -136,6 +136,7 @@
   @RequiresApi(21) public final class CameraXConfig {
     method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?);
     method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+    method public long getCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
     method public int getMinimumLoggingLevel();
     method public android.os.Handler? getSchedulerHandler(android.os.Handler?);
   }
@@ -145,6 +146,7 @@
     method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
     method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector);
     method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
     method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int);
     method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler);
   }
@@ -427,6 +429,7 @@
     method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isPreviewStabilizationEnabled();
     method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
     method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
     method public void setTargetRotation(int);
@@ -435,6 +438,7 @@
   public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
     ctor public Preview.Builder();
     method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setPreviewStabilizationEnabled(boolean);
     method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
     method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
     method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range<java.lang.Integer!>);
@@ -447,6 +451,10 @@
     method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
   }
 
+  @RequiresApi(21) public interface PreviewCapabilities {
+    method public boolean isStabilizationSupported();
+  }
+
   public class ProcessingException extends java.lang.Exception {
     ctor public ProcessingException();
   }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
index 4d7519d..105bde1 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
@@ -298,17 +298,6 @@
     }
 
     /**
-     * Returns {@link PreviewCapabilities} to query preview stream related device capability.
-     *
-     * @return {@link PreviewCapabilities}
-     */
-    @NonNull
-    @RestrictTo(Scope.LIBRARY_GROUP)
-    default PreviewCapabilities getPreviewCapabilities() {
-        return PreviewCapabilities.EMPTY;
-    }
-
-    /**
      * Returns if {@link ImageFormat#PRIVATE} reprocessing is supported on the device.
      *
      * @return true if supported, otherwise false.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
index 7da7c2d..62a81c7 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
@@ -302,7 +302,7 @@
                 CameraSelector availableCamerasLimiter =
                         mCameraXConfig.getAvailableCamerasLimiter(null);
                 long cameraOpenRetryMaxTimeoutInMs =
-                        mCameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileOccupied(-1L);
+                        mCameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileResuming(-1L);
                 mCameraFactory = cameraFactoryProvider.newInstance(mAppContext,
                         cameraThreadConfig, availableCamerasLimiter, cameraOpenRetryMaxTimeoutInMs);
                 CameraDeviceSurfaceManager.Provider surfaceManagerProvider =
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java
index 902db41..c198fe0 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java
@@ -109,9 +109,9 @@
                     "camerax.core.appConfig.availableCamerasLimiter",
                     CameraSelector.class);
 
-    static final Option<Long> OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_OCCUPIED =
+    static final Option<Long> OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_RESUMING =
             Option.create(
-                    "camerax.core.appConfig.cameraOpenRetryMaxTimeoutInMsWhileOccupied",
+                    "camerax.core.appConfig.cameraOpenRetryMaxTimeoutInMsWhileResuming",
                     long.class);
 
     // *********************************************************************************************
@@ -199,11 +199,10 @@
     /**
      * Returns the camera open retry maximum timeout in milliseconds.
      *
-     * @see Builder#setCameraOpenRetryMaxTimeoutInMsWhileOccupied(long)
+     * @see Builder#setCameraOpenRetryMaxTimeoutInMsWhileResuming(long)
      */
-    @RestrictTo(Scope.LIBRARY_GROUP)
-    public long getCameraOpenRetryMaxTimeoutInMsWhileOccupied(long valueIfMissing) {
-        return mConfig.retrieveOption(OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_OCCUPIED,
+    public long getCameraOpenRetryMaxTimeoutInMsWhileResuming(long valueIfMissing) {
+        return mConfig.retrieveOption(OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_RESUMING,
                 valueIfMissing);
     }
 
@@ -381,16 +380,29 @@
         }
 
         /**
-         * Sets the camera open retry maximum timeout in milliseconds.
+         * Sets the camera open retry maximum timeout in milliseconds. This is only needed when
+         * users don't want to retry camera opening for a long time.
          *
-         * By default, the retry maximum timeout is 30 minutes when in active resume mode.
+         * <p>When {@link androidx.lifecycle.LifecycleOwner} is in ON_RESUME state, CameraX will
+         * actively retry opening the camera periodically to resume, until there is
+         * non-recoverable errors happening and then move to pending open state waiting for the
+         * next camera available after timeout.
+         *
+         * <p>When in active resuming mode, it will periodically retry opening the
+         * camera regardless of the camera availability.
+         * Elapsed time <= 2 minutes -> retry once per 1 second.
+         * Elapsed time 2 to 5 minutes -> retry once per 2 seconds.
+         * Elapsed time > 5 minutes -> retry once per 4 seconds.
+         * Retry will stop after 30 minutes.
+         *
+         * <p>When not in active resuming state, the camera will be attempted to be opened every
+         * 700ms for 10 seconds. This value cannot currently be changed.
          *
          */
-        @RestrictTo(Scope.LIBRARY_GROUP)
         @NonNull
-        public Builder setCameraOpenRetryMaxTimeoutInMsWhileOccupied(long valueIfMissing) {
+        public Builder setCameraOpenRetryMaxTimeoutInMsWhileResuming(long valueIfMissing) {
             getMutableConfig().insertOption(
-                    OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_OCCUPIED, valueIfMissing);
+                    OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_RESUMING, valueIfMissing);
             return this;
         }
 
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
index c39b5cb..fd7942d 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
@@ -87,6 +87,7 @@
 import androidx.camera.core.impl.StreamSpec;
 import androidx.camera.core.impl.UseCaseConfig;
 import androidx.camera.core.impl.UseCaseConfigFactory;
+import androidx.camera.core.impl.capability.PreviewCapabilitiesImpl;
 import androidx.camera.core.impl.stabilization.StabilizationMode;
 import androidx.camera.core.impl.utils.executor.CameraXExecutors;
 import androidx.camera.core.internal.TargetConfig;
@@ -673,9 +674,19 @@
     }
 
     /**
+     * Returns {@link PreviewCapabilities} to query preview stream related device capability.
+     *
+     * @return {@link PreviewCapabilities}
+     */
+    @NonNull
+    @RestrictTo(Scope.LIBRARY_GROUP)
+    public static PreviewCapabilities getPreviewCapabilities(@NonNull CameraInfo cameraInfo) {
+        return PreviewCapabilitiesImpl.from(cameraInfo);
+    }
+
+    /**
      * Returns whether video stabilization is enabled for preview stream.
      */
-    @RestrictTo(Scope.LIBRARY_GROUP)
     public boolean isPreviewStabilizationEnabled() {
         return getCurrentConfig().getPreviewStabilizationMode() == StabilizationMode.ON;
     }
@@ -1160,12 +1171,49 @@
         }
 
         /**
-         * Enable preview stabilization.
+         * Enable preview stabilization. It will enable stabilization for both the preview and
+         * video capture use cases.
+         *
+         * <p>Devices running Android 13 or higher can provide support for video stabilization.
+         * This feature lets apps provide a what you see is what you get (WYSIWYG) experience
+         * when comparing between the camera preview and the recording.
+         *
+         * <p>It is recommended to query the device capability via
+         * {@link PreviewCapabilities#isStabilizationSupported()} before enabling this feature,
+         * otherwise HAL error might be thrown.
+         *
+         * <p> If both preview stabilization and video stabilization are enabled or disabled, the
+         * final result will be
+         *
+         * <p>
+         * <table>
+         * <tr> <th id="rb">Preview</th> <th id="rb">VideoCapture</th>   <th id="rb">Result</th>
+         * </tr>
+         * <tr> <td>ON</td> <td>ON</td> <td>Both Preview and VideoCapture will be stabilized,
+         * VideoCapture quality might be worse than only VideoCapture stabilized</td>
+         * </tr>
+         * <tr> <td>ON</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>ON</td> <td>NOT SPECIFIED</td> <td>Both Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>ON</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>NOT SPECIFIED</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>ON</td> <td>Only VideoCapture will be stabilized,
+         * Preview might be stabilized depending on devices</td>
+         * </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * </table><br>
          *
          * @param enabled True if enable, otherwise false.
          * @return the current Builder.
+         *
+         * @see PreviewCapabilities#isStabilizationSupported()
          */
-        @RestrictTo(Scope.LIBRARY_GROUP)
         @NonNull
         public Builder setPreviewStabilizationEnabled(boolean enabled) {
             getMutableConfig().insertOption(OPTION_PREVIEW_STABILIZATION_MODE,
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java b/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java
index 283b013..7920e27 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java
@@ -18,35 +18,24 @@
 
 import android.hardware.camera2.CaptureRequest;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
-import androidx.annotation.RestrictTo;
 
 /**
- * PreviewCapabilities is used to query preview stream capabilities on the device.
+ * PreviewCapabilities is used to query {@link Preview} use case capabilities on the device.
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
 public interface PreviewCapabilities {
 
     /**
-     * Returns if preview stabilization is supported on the device.
+     * Returns if preview stabilization is supported on the device. Preview stabilization can be
+     * turned on via {@link Preview.Builder#setPreviewStabilizationEnabled(boolean)}.
      *
      * @return true if
      * {@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION} is supported,
      * otherwise false.
      *
+     * @see Preview.Builder#setPreviewStabilizationEnabled(boolean)
      * @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
      */
     boolean isStabilizationSupported();
-
-
-    /** An empty implementation. */
-    @NonNull
-    PreviewCapabilities EMPTY = new PreviewCapabilities() {
-        @Override
-        public boolean isStabilizationSupported() {
-            return false;
-        }
-    };
 }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java
index 0bd54ec..5ce2595 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java
@@ -27,7 +27,6 @@
 import androidx.camera.core.ExperimentalZeroShutterLag;
 import androidx.camera.core.ExposureState;
 import androidx.camera.core.FocusMeteringAction;
-import androidx.camera.core.PreviewCapabilities;
 import androidx.camera.core.ZoomState;
 import androidx.lifecycle.LiveData;
 
@@ -203,10 +202,4 @@
     public boolean isVideoStabilizationSupported() {
         return mCameraInfoInternal.isVideoStabilizationSupported();
     }
-
-    @NonNull
-    @Override
-    public PreviewCapabilities getPreviewCapabilities() {
-        return mCameraInfoInternal.getPreviewCapabilities();
-    }
 }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/capability/PreviewCapabilitiesImpl.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/capability/PreviewCapabilitiesImpl.java
new file mode 100644
index 0000000..f410a6a
--- /dev/null
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/capability/PreviewCapabilitiesImpl.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 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 androidx.camera.core.impl.capability;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.camera.core.CameraInfo;
+import androidx.camera.core.Preview;
+import androidx.camera.core.PreviewCapabilities;
+import androidx.camera.core.impl.CameraInfoInternal;
+
+/**
+ * Implementation of {@link PreviewCapabilities}. It delegates to {@link CameraInfoInternal} to
+ * retrieve {@link Preview} related capabilities.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@RequiresApi(21)
+public class PreviewCapabilitiesImpl implements PreviewCapabilities {
+
+    private boolean mIsStabilizationSupported;
+
+    PreviewCapabilitiesImpl(@NonNull CameraInfoInternal cameraInfoInternal) {
+        mIsStabilizationSupported = cameraInfoInternal.isPreviewStabilizationSupported();
+    }
+
+    /**
+     * Gets {@link PreviewCapabilities} by the {@link CameraInfo}.
+     */
+    @NonNull
+    public static PreviewCapabilities from(@NonNull CameraInfo cameraInfo) {
+        return new PreviewCapabilitiesImpl((CameraInfoInternal) cameraInfo);
+    }
+
+    @Override
+    public boolean isStabilizationSupported() {
+        return mIsStabilizationSupported;
+    }
+}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java b/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java
index 6d1ddbe..300e148 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java
@@ -109,10 +109,10 @@
     @Test
     public void canGetCameraOpenRetryMaxTimeoutInMsWhileOccupied() {
         CameraXConfig cameraXConfig = new CameraXConfig.Builder()
-                .setCameraOpenRetryMaxTimeoutInMsWhileOccupied(1000L)
+                .setCameraOpenRetryMaxTimeoutInMsWhileResuming(1000L)
                 .build();
 
-        assertThat(cameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileOccupied(-1L))
+        assertThat(cameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileResuming(-1L))
                 .isEqualTo(1000L);
     }
 }
diff --git a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
index 8640874..a4ac439 100644
--- a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
+++ b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
@@ -183,6 +183,9 @@
 
         public void setSurfaceSharingConfigs(
                 @Nullable List<Camera2OutputConfigImpl> surfaceSharingConfigs) {
+            if (surfaceSharingConfigs != null) {
+                surfaceSharingConfigs = new ArrayList<>(surfaceSharingConfigs);
+            }
             mSurfaceSharingConfigs = surfaceSharingConfigs;
         }
     }
diff --git a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
index d1bb69a..12bf312 100644
--- a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
+++ b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
@@ -115,8 +115,8 @@
 
         Camera2SessionConfigImplImpl(@NonNull Camera2SessionConfigImplBuilder builder) {
             mSessionTemplateId = builder.getSessionTemplateId();
-            mSessionParameters = builder.getSessionParameters();
-            mCamera2OutputConfigs = builder.getCamera2OutputConfigs();
+            mSessionParameters = new HashMap<>(builder.getSessionParameters());
+            mCamera2OutputConfigs = new ArrayList<>(builder.getCamera2OutputConfigs());
             mSessionType = builder.getSessionType();
         }
 
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java
index 6b0d8c7..3349f00 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java
@@ -1488,7 +1488,6 @@
                 Logger.d(LOG_TAG, "++ Camera id: " + id);
                 try {
                     CameraCharacteristics c = manager.getCameraCharacteristics(id);
-                    Logger.d(LOG_TAG, id + " character: " + c);
                     if (c != null) {
                         Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
                         Logger.d(LOG_TAG, id + " lensFacing: " + lensFacing);
diff --git a/camera/camera-video/api/current.txt b/camera/camera-video/api/current.txt
index 7f1314e..bf615af 100644
--- a/camera/camera-video/api/current.txt
+++ b/camera/camera-video/api/current.txt
@@ -148,6 +148,7 @@
     method public java.util.Set<androidx.camera.core.DynamicRange!> getSupportedDynamicRanges();
     method public java.util.List<androidx.camera.video.Quality!> getSupportedQualities(androidx.camera.core.DynamicRange);
     method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+    method public default boolean isStabilizationSupported();
   }
 
   @RequiresApi(21) public final class VideoCapture<T extends androidx.camera.video.VideoOutput> extends androidx.camera.core.UseCase {
@@ -156,6 +157,7 @@
     method public T getOutput();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isVideoStabilizationEnabled();
     method public void setTargetRotation(int);
     method public static <T extends androidx.camera.video.VideoOutput> androidx.camera.video.VideoCapture<T!> withOutput(T);
   }
@@ -167,6 +169,7 @@
     method public androidx.camera.video.VideoCapture.Builder<T!> setMirrorMode(int);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetRotation(int);
+    method public androidx.camera.video.VideoCapture.Builder<T!> setVideoStabilizationEnabled(boolean);
   }
 
   @RequiresApi(21) public interface VideoOutput {
diff --git a/camera/camera-video/api/restricted_current.txt b/camera/camera-video/api/restricted_current.txt
index 7f1314e..bf615af 100644
--- a/camera/camera-video/api/restricted_current.txt
+++ b/camera/camera-video/api/restricted_current.txt
@@ -148,6 +148,7 @@
     method public java.util.Set<androidx.camera.core.DynamicRange!> getSupportedDynamicRanges();
     method public java.util.List<androidx.camera.video.Quality!> getSupportedQualities(androidx.camera.core.DynamicRange);
     method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+    method public default boolean isStabilizationSupported();
   }
 
   @RequiresApi(21) public final class VideoCapture<T extends androidx.camera.video.VideoOutput> extends androidx.camera.core.UseCase {
@@ -156,6 +157,7 @@
     method public T getOutput();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isVideoStabilizationEnabled();
     method public void setTargetRotation(int);
     method public static <T extends androidx.camera.video.VideoOutput> androidx.camera.video.VideoCapture<T!> withOutput(T);
   }
@@ -167,6 +169,7 @@
     method public androidx.camera.video.VideoCapture.Builder<T!> setMirrorMode(int);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetRotation(int);
+    method public androidx.camera.video.VideoCapture.Builder<T!> setVideoStabilizationEnabled(boolean);
   }
 
   @RequiresApi(21) public interface VideoOutput {
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
index b9e560e..8e5c043 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
@@ -45,6 +45,7 @@
 import androidx.camera.video.internal.DynamicRangeMatchedEncoderProfilesProvider;
 import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
 import androidx.camera.video.internal.compat.quirk.DeviceQuirks;
+import androidx.camera.video.internal.workaround.QualityResolutionModifiedEncoderProfilesProvider;
 import androidx.camera.video.internal.workaround.QualityValidatedEncoderProfilesProvider;
 import androidx.core.util.Preconditions;
 
@@ -76,7 +77,7 @@
 
     private final EncoderProfilesProvider mProfilesProvider;
 
-    private boolean mIsStabilizationSupported = false;
+    private final boolean mIsStabilizationSupported;
 
     // Mappings of DynamicRange to recording capability information. The mappings are divided
     // into two collections based on the key's (DynamicRange) category, one for specified
@@ -103,19 +104,23 @@
         EncoderProfilesProvider encoderProfilesProvider =
                 cameraInfoInternal.getEncoderProfilesProvider();
 
+        // Modify qualities' matching resolution to the value supported by camera.
+        Quirks deviceQuirks = DeviceQuirks.getAll();
+        encoderProfilesProvider = new QualityResolutionModifiedEncoderProfilesProvider(
+                encoderProfilesProvider, deviceQuirks);
+
         // Add backup HDR video information. In the initial version, only HLG10 profile is added.
         if (isHlg10SupportedByCamera(cameraInfoInternal)) {
             encoderProfilesProvider = new BackupHdrProfileEncoderProfilesProvider(
                     encoderProfilesProvider, backupVideoProfileValidator);
         }
 
-        // Workaround resolution quirk.
+        // Filter out qualities with unsupported resolutions.
         Quirks cameraQuirks = cameraInfoInternal.getCameraQuirks();
         encoderProfilesProvider = new ResolutionValidatedEncoderProfilesProvider(
                 encoderProfilesProvider, cameraQuirks);
 
-        // Workaround quality quirk.
-        Quirks deviceQuirks = DeviceQuirks.getAll();
+        // Filter out unsupported qualities.
         encoderProfilesProvider = new QualityValidatedEncoderProfilesProvider(
                 encoderProfilesProvider, cameraInfoInternal, deviceQuirks);
         mProfilesProvider = encoderProfilesProvider;
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
index 8f9fd80..e10278d 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
@@ -115,15 +115,26 @@
     boolean isQualitySupported(@NonNull Quality quality, @NonNull DynamicRange dynamicRange);
 
     /**
-     * Returns if video stabilization is supported on the device.
+     * Returns if video stabilization is supported on the device. Video stabilization can be
+     * turned on via {@link VideoCapture.Builder#setVideoStabilizationEnabled(boolean)}.
+     *
+     * <p>Not all recording sizes or frame rates may be supported for
+     * stabilization by a device that reports stabilization support. It is guaranteed
+     * that an output targeting a MediaRecorder or MediaCodec will be stabilized if
+     * the recording resolution is less than or equal to 1920 x 1080 (width less than
+     * or equal to 1920, height less than or equal to 1080), and the recording
+     * frame rate is less than or equal to 30fps. At other sizes, the video stabilization will
+     * not take effect.
      *
      * @return true if {@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE_ON} is supported,
      * otherwise false.
      *
+     * @see VideoCapture.Builder#setVideoStabilizationEnabled(boolean)
      * @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
      */
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
-    boolean isStabilizationSupported();
+    default boolean isStabilizationSupported() {
+        return false;
+    }
 
     /**
      * Gets the corresponding {@link VideoValidatedEncoderProfilesProxy} of the input quality and
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
index 8e8bbd6..3f73068 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
@@ -286,7 +286,6 @@
     /**
      * Returns whether video stabilization is enabled.
      */
-    @RestrictTo(Scope.LIBRARY_GROUP)
     public boolean isVideoStabilizationEnabled() {
         return getCurrentConfig().getVideoStabilizationMode() == StabilizationMode.ON;
     }
@@ -1797,10 +1796,13 @@
          *
          * <p>This target will be used as a part of the heuristics for the algorithm that determines
          * the final frame rate range and resolution of all concurrently bound use cases.
+         *
          * <p>It is not guaranteed that this target frame rate will be the final range,
          * as other use cases as well as frame rate restrictions of the device may affect the
          * outcome of the algorithm that chooses the actual frame rate.
          *
+         * <p>For supported frame rates, see {@link CameraInfo#getSupportedFrameRateRanges()}.
+         *
          * @param targetFrameRate the target frame rate range.
          */
         @NonNull
@@ -1812,10 +1814,56 @@
         /**
          * Enable video stabilization.
          *
+         * <p>It will enable stabilization for the video capture use case. However, it is not
+         * guaranteed the stabilization will be enabled for the preview use case. If you want to
+         * enable preview stabilization, use
+         * {@link Preview.Builder#setPreviewStabilizationEnabled(boolean)} instead.
+         *
+         * <p>Preview stabilization, where streams are stabilized with the same quality of
+         * stabilization for {@link Preview} and {@link VideoCapture} use cases, is enabled. This
+         * mode aims to give clients a 'what you see is what you get' effect. In this mode, the
+         * FoV reduction will be a maximum of 20 % both horizontally and vertically (10% from
+         * left, right, top, bottom) for the given zoom ratio / crop region. The resultant FoV
+         * will also be the same across all use cases (that have the same aspect ratio). This is
+         * the tradeoff between video stabilization and preview stabilization.
+         *
+         * <p>It is recommended to query the device capability via
+         * {@link VideoCapabilities#isStabilizationSupported()} before enabling this
+         * feature, otherwise HAL error might be thrown.
+         *
+         * <p> If both preview stabilization and video stabilization are enabled or disabled, the
+         * final result will be
+         *
+         * <p>
+         * <table>
+         * <tr> <th id="rb">Preview</th> <th id="rb">VideoCapture</th>   <th id="rb">Result</th>
+         * </tr>
+         * <tr> <td>ON</td> <td>ON</td> <td>Both Preview and VideoCapture will be stabilized,
+         * VideoCapture quality might be worse than only VideoCapture stabilized</td>
+         * </tr>
+         * <tr> <td>ON</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>ON</td> <td>NOT SPECIFIED</td> <td>Both Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>ON</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>NOT SPECIFIED</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>ON</td> <td>Only VideoCapture will be stabilized,
+         * Preview might be stabilized depending on devices</td>
+         * </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * </table><br>
+         *
          * @param enabled True if enable, otherwise false.
          * @return the current Builder.
+         *
+         * @see VideoCapabilities#isStabilizationSupported()
+         * @see Preview.Builder#setPreviewStabilizationEnabled(boolean)
          */
-        @RestrictTo(Scope.LIBRARY_GROUP)
         @NonNull
         public Builder<T> setVideoStabilizationEnabled(boolean enabled) {
             getMutableConfig().insertOption(OPTION_VIDEO_STABILIZATION_MODE,
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java
index 249e880..4c95232 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java
@@ -92,6 +92,9 @@
         if (ExtraSupportedResolutionQuirk.load()) {
             quirks.add(new ExtraSupportedResolutionQuirk());
         }
+        if (StretchedVideoResolutionQuirk.load()) {
+            quirks.add(new StretchedVideoResolutionQuirk());
+        }
 
         return quirks;
     }
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/StretchedVideoResolutionQuirk.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/StretchedVideoResolutionQuirk.java
new file mode 100644
index 0000000..ede9b54
--- /dev/null
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/StretchedVideoResolutionQuirk.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2023 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 androidx.camera.video.internal.compat.quirk;
+
+import static android.media.CamcorderProfile.QUALITY_1080P;
+import static android.media.CamcorderProfile.QUALITY_480P;
+import static android.media.CamcorderProfile.QUALITY_720P;
+
+import android.os.Build;
+import android.util.Size;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.impl.Quirk;
+
+/**
+ * <p>QuirkSummary
+ *     Bug Id: b/299075294
+ *     Description: The captured video is stretched while using the resolution obtained from
+ *                  EncoderProfiles. The quirk provides an alternative resolution for supported
+ *                  qualities.
+ *     Device(s): Motorola Moto E5 Play.
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+public class StretchedVideoResolutionQuirk implements Quirk {
+
+    static boolean load() {
+        return isMotoE5Play();
+    }
+
+    private static boolean isMotoE5Play() {
+        return "motorola".equalsIgnoreCase(Build.BRAND) && "moto e5 play".equalsIgnoreCase(
+                Build.MODEL);
+    }
+
+    /**
+     * Returns an alternative resolution available on the device.
+     */
+    @Nullable
+    public Size getAlternativeResolution(int quality) {
+        switch (quality) {
+            case QUALITY_480P:
+                return new Size(640, 480);
+            case QUALITY_720P:
+                return new Size(960, 720);
+            case QUALITY_1080P:
+                return new Size(1440, 1080);
+            default:
+                return null;
+        }
+    }
+
+}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProvider.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProvider.java
new file mode 100644
index 0000000..2086907
--- /dev/null
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProvider.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2023 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 androidx.camera.video.internal.workaround;
+
+import static java.util.Objects.requireNonNull;
+
+import android.util.Size;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.impl.EncoderProfilesProvider;
+import androidx.camera.core.impl.EncoderProfilesProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.ImmutableEncoderProfilesProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
+import androidx.camera.core.impl.Quirks;
+import androidx.camera.video.internal.compat.quirk.StretchedVideoResolutionQuirk;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An implementation that changes matching video resolution of qualities to values supported by
+ * camera.
+ *
+ * @see StretchedVideoResolutionQuirk
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+public class QualityResolutionModifiedEncoderProfilesProvider implements EncoderProfilesProvider {
+
+    @NonNull
+    private final EncoderProfilesProvider mProvider;
+    @NonNull
+    private final Quirks mQuirks;
+    @NonNull
+    private final Map<Integer, EncoderProfilesProxy> mEncoderProfilesCache = new HashMap<>();
+
+    public QualityResolutionModifiedEncoderProfilesProvider(
+            @NonNull EncoderProfilesProvider provider, @NonNull Quirks quirks) {
+        mProvider = provider;
+        mQuirks = quirks;
+    }
+
+    @Override
+    public boolean hasProfile(int quality) {
+        if (!mProvider.hasProfile(quality)) {
+            return false;
+        }
+
+        return getProfilesInternal(quality) != null;
+    }
+
+    @Nullable
+    @Override
+    public EncoderProfilesProxy getAll(int quality) {
+        return getProfilesInternal(quality);
+    }
+
+    @Nullable
+    private EncoderProfilesProxy getProfilesInternal(int quality) {
+        if (mEncoderProfilesCache.containsKey(quality)) {
+            return mEncoderProfilesCache.get(quality);
+        }
+
+
+        EncoderProfilesProxy profiles = null;
+        if (mProvider.hasProfile(quality)) {
+            EncoderProfilesProxy baseProfiles = requireNonNull(mProvider.getAll(quality));
+
+            // Apply alternative resolution if existed, leave keep the encoder profiles unchanged.
+            Size alternativeResolution = getAlternativeResolution(quality);
+            profiles = (alternativeResolution == null) ? baseProfiles : createNewEncoderProfiles(
+                    baseProfiles, alternativeResolution);
+        }
+        mEncoderProfilesCache.put(quality, profiles);
+
+        return profiles;
+    }
+
+    @Nullable
+    private Size getAlternativeResolution(int quality) {
+        for (StretchedVideoResolutionQuirk quirk : mQuirks.getAll(
+                StretchedVideoResolutionQuirk.class)) {
+            if (quirk != null) {
+                return quirk.getAlternativeResolution(quality);
+            }
+        }
+
+        return null;
+    }
+
+    @Nullable
+    private EncoderProfilesProxy createNewEncoderProfiles(
+            @NonNull EncoderProfilesProxy baseProfiles, @NonNull Size resolution) {
+        // Apply input resolution to video profiles.
+        List<VideoProfileProxy> newVideoProfiles = new ArrayList<>();
+        for (VideoProfileProxy videoProfile : baseProfiles.getVideoProfiles()) {
+            VideoProfileProxy newVideoProfile = generateVideoProfile(videoProfile, resolution);
+            newVideoProfiles.add(newVideoProfile);
+        }
+
+        return newVideoProfiles.isEmpty() ? null : ImmutableEncoderProfilesProxy.create(
+                baseProfiles.getDefaultDurationSeconds(),
+                baseProfiles.getRecommendedFileFormat(),
+                baseProfiles.getAudioProfiles(),
+                newVideoProfiles
+        );
+    }
+
+    @NonNull
+    private static VideoProfileProxy generateVideoProfile(@NonNull VideoProfileProxy baseProfile,
+            @NonNull Size resolution) {
+        return VideoProfileProxy.create(
+                baseProfile.getCodec(),
+                baseProfile.getMediaType(),
+                baseProfile.getBitrate(),
+                baseProfile.getFrameRate(),
+                resolution.getWidth(),
+                resolution.getHeight(),
+                baseProfile.getProfile(),
+                baseProfile.getBitDepth(),
+                baseProfile.getChromaSubsampling(),
+                baseProfile.getHdrFormat()
+        );
+    }
+}
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProviderTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProviderTest.kt
new file mode 100644
index 0000000..c71f84f
--- /dev/null
+++ b/camera/camera-video/src/test/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProviderTest.kt
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2023 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 androidx.camera.video.internal.workaround
+
+import android.media.CamcorderProfile.QUALITY_1080P
+import android.media.CamcorderProfile.QUALITY_2160P
+import android.media.CamcorderProfile.QUALITY_480P
+import android.media.CamcorderProfile.QUALITY_720P
+import android.os.Build
+import android.util.Size
+import androidx.camera.core.impl.EncoderProfilesProvider
+import androidx.camera.core.impl.EncoderProfilesProxy
+import androidx.camera.core.impl.Quirks
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_1080P
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_2160P
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_480P
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_720P
+import androidx.camera.testing.impl.fakes.FakeEncoderProfilesProvider
+import androidx.camera.video.internal.compat.quirk.StretchedVideoResolutionQuirk
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.internal.DoNotInstrument
+
+@RunWith(RobolectricTestRunner::class)
+@DoNotInstrument
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+class QualityResolutionModifiedEncoderProfilesProviderTest {
+
+    private val defaultProvider = createFakeEncoderProfilesProvider(
+        mapOf(
+            QUALITY_2160P to PROFILES_2160P,
+            QUALITY_1080P to PROFILES_1080P,
+            QUALITY_720P to PROFILES_720P,
+            QUALITY_480P to PROFILES_480P
+        )
+    )
+
+    @Test
+    fun hasNoProfile_canNotGetProfiles() {
+        val quirks = createFakeQuirks()
+        val emptyProvider = createFakeEncoderProfilesProvider()
+        val provider = QualityResolutionModifiedEncoderProfilesProvider(emptyProvider, quirks)
+
+        assertThat(provider.hasProfile(QUALITY_2160P)).isFalse()
+        assertThat(provider.hasProfile(QUALITY_1080P)).isFalse()
+        assertThat(provider.hasProfile(QUALITY_720P)).isFalse()
+        assertThat(provider.hasProfile(QUALITY_480P)).isFalse()
+        assertThat(provider.getAll(QUALITY_2160P)).isNull()
+        assertThat(provider.getAll(QUALITY_1080P)).isNull()
+        assertThat(provider.getAll(QUALITY_720P)).isNull()
+        assertThat(provider.getAll(QUALITY_480P)).isNull()
+    }
+
+    @Test
+    fun hasQuirk_canReplaceResolution() {
+        val quirks = createFakeQuirks(
+            resolutionMap = mapOf(QUALITY_720P to Size(960, 720))
+        )
+        val provider = QualityResolutionModifiedEncoderProfilesProvider(defaultProvider, quirks)
+
+        assertThat(provider.hasProfile(QUALITY_2160P)).isTrue()
+        assertThat(provider.hasProfile(QUALITY_1080P)).isTrue()
+        assertThat(provider.hasProfile(QUALITY_720P)).isTrue()
+        assertThat(provider.hasProfile(QUALITY_480P)).isTrue()
+        assertThat(provider.getAll(QUALITY_2160P)).isNotNull()
+        assertThat(provider.getAll(QUALITY_1080P)).isNotNull()
+        assertThat(provider.getAll(QUALITY_720P)).isNotNull()
+        assertThat(provider.getAll(QUALITY_480P)).isNotNull()
+
+        for (videoProfile in provider.getAll(QUALITY_720P)!!.videoProfiles) {
+            assertThat(videoProfile.width).isEqualTo(960)
+            assertThat(videoProfile.height).isEqualTo(720)
+        }
+    }
+
+    private fun createFakeEncoderProfilesProvider(
+        qualityToProfilesMap: Map<Int, EncoderProfilesProxy> = emptyMap()
+    ): EncoderProfilesProvider {
+        return FakeEncoderProfilesProvider.Builder().also { builder ->
+            for ((quality, profiles) in qualityToProfilesMap) {
+                builder.add(quality, profiles)
+            }
+        }.build()
+    }
+
+    private fun createFakeQuirks(resolutionMap: Map<Int, Size> = emptyMap()): Quirks {
+        return Quirks(listOf(FakeQuirk(resolutionMap)))
+    }
+
+    class FakeQuirk(
+        private val resolutionMap: Map<Int, Size> = emptyMap(),
+    ) : StretchedVideoResolutionQuirk() {
+
+        override fun getAlternativeResolution(quality: Int): Size? {
+            return resolutionMap[quality]
+        }
+    }
+}
diff --git a/camera/camera-view/api/current.txt b/camera/camera-view/api/current.txt
index 6184aeb..964bc06 100644
--- a/camera/camera-view/api/current.txt
+++ b/camera/camera-view/api/current.txt
@@ -11,16 +11,22 @@
     method @MainThread public java.util.concurrent.Executor? getImageAnalysisBackgroundExecutor();
     method @MainThread public int getImageAnalysisBackpressureStrategy();
     method @MainThread public int getImageAnalysisImageQueueDepth();
-    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
+    method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageAnalysisResolutionSelector();
+    method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
     method @MainThread public int getImageCaptureFlashMode();
     method @MainThread public java.util.concurrent.Executor? getImageCaptureIoExecutor();
     method @MainThread public int getImageCaptureMode();
-    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
+    method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageCaptureResolutionSelector();
+    method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> getInitializationFuture();
-    method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+    method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getPreviewResolutionSelector();
+    method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method @MainThread public androidx.camera.core.DynamicRange getVideoCaptureDynamicRange();
+    method @MainThread public int getVideoCaptureMirrorMode();
     method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+    method @MainThread public android.util.Range<java.lang.Integer!> getVideoCaptureTargetFrameRate();
     method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
     method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
     method @MainThread public boolean isImageAnalysisEnabled();
@@ -36,16 +42,22 @@
     method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?);
     method @MainThread public void setImageAnalysisBackpressureStrategy(int);
     method @MainThread public void setImageAnalysisImageQueueDepth(int);
-    method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setImageAnalysisResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+    method @Deprecated @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public void setImageCaptureFlashMode(int);
     method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?);
     method @MainThread public void setImageCaptureMode(int);
-    method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setImageCaptureResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+    method @Deprecated @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
     method @MainThread public void setPinchToZoomEnabled(boolean);
-    method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setPreviewResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+    method @Deprecated @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public void setTapToFocusEnabled(boolean);
+    method @MainThread public void setVideoCaptureDynamicRange(androidx.camera.core.DynamicRange);
+    method @MainThread public void setVideoCaptureMirrorMode(int);
     method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
+    method @MainThread public void setVideoCaptureTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
     method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
     method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
@@ -63,12 +75,12 @@
     field public static final int VIDEO_CAPTURE = 4; // 0x4
   }
 
-  @RequiresApi(21) public static final class CameraController.OutputSize {
-    ctor public CameraController.OutputSize(android.util.Size);
-    ctor public CameraController.OutputSize(int);
-    method public int getAspectRatio();
-    method public android.util.Size? getResolution();
-    field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
+  @Deprecated @RequiresApi(21) public static final class CameraController.OutputSize {
+    ctor @Deprecated public CameraController.OutputSize(android.util.Size);
+    ctor @Deprecated public CameraController.OutputSize(int);
+    method @Deprecated public int getAspectRatio();
+    method @Deprecated public android.util.Size? getResolution();
+    field @Deprecated public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
   }
 
   @RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController {
diff --git a/camera/camera-view/api/restricted_current.txt b/camera/camera-view/api/restricted_current.txt
index 6184aeb..964bc06 100644
--- a/camera/camera-view/api/restricted_current.txt
+++ b/camera/camera-view/api/restricted_current.txt
@@ -11,16 +11,22 @@
     method @MainThread public java.util.concurrent.Executor? getImageAnalysisBackgroundExecutor();
     method @MainThread public int getImageAnalysisBackpressureStrategy();
     method @MainThread public int getImageAnalysisImageQueueDepth();
-    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
+    method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageAnalysisResolutionSelector();
+    method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
     method @MainThread public int getImageCaptureFlashMode();
     method @MainThread public java.util.concurrent.Executor? getImageCaptureIoExecutor();
     method @MainThread public int getImageCaptureMode();
-    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
+    method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageCaptureResolutionSelector();
+    method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> getInitializationFuture();
-    method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+    method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getPreviewResolutionSelector();
+    method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method @MainThread public androidx.camera.core.DynamicRange getVideoCaptureDynamicRange();
+    method @MainThread public int getVideoCaptureMirrorMode();
     method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+    method @MainThread public android.util.Range<java.lang.Integer!> getVideoCaptureTargetFrameRate();
     method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
     method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
     method @MainThread public boolean isImageAnalysisEnabled();
@@ -36,16 +42,22 @@
     method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?);
     method @MainThread public void setImageAnalysisBackpressureStrategy(int);
     method @MainThread public void setImageAnalysisImageQueueDepth(int);
-    method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setImageAnalysisResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+    method @Deprecated @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public void setImageCaptureFlashMode(int);
     method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?);
     method @MainThread public void setImageCaptureMode(int);
-    method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setImageCaptureResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+    method @Deprecated @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
     method @MainThread public void setPinchToZoomEnabled(boolean);
-    method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setPreviewResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+    method @Deprecated @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public void setTapToFocusEnabled(boolean);
+    method @MainThread public void setVideoCaptureDynamicRange(androidx.camera.core.DynamicRange);
+    method @MainThread public void setVideoCaptureMirrorMode(int);
     method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
+    method @MainThread public void setVideoCaptureTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
     method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
     method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
@@ -63,12 +75,12 @@
     field public static final int VIDEO_CAPTURE = 4; // 0x4
   }
 
-  @RequiresApi(21) public static final class CameraController.OutputSize {
-    ctor public CameraController.OutputSize(android.util.Size);
-    ctor public CameraController.OutputSize(int);
-    method public int getAspectRatio();
-    method public android.util.Size? getResolution();
-    field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
+  @Deprecated @RequiresApi(21) public static final class CameraController.OutputSize {
+    ctor @Deprecated public CameraController.OutputSize(android.util.Size);
+    ctor @Deprecated public CameraController.OutputSize(int);
+    method @Deprecated public int getAspectRatio();
+    method @Deprecated public android.util.Size? getResolution();
+    field @Deprecated public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
   }
 
   @RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController {
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
index b76e3c6..154c4fd 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
@@ -20,7 +20,6 @@
 import static androidx.camera.core.impl.utils.executor.CameraXExecutors.directExecutor;
 import static androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor;
 import static androidx.camera.core.impl.utils.futures.Futures.transform;
-import static androidx.camera.view.CameraController.OutputSize.UNASSIGNED_ASPECT_RATIO;
 import static androidx.core.content.ContextCompat.getMainExecutor;
 
 import android.Manifest;
@@ -29,6 +28,7 @@
 import android.graphics.Matrix;
 import android.hardware.camera2.CaptureResult;
 import android.os.Build;
+import android.util.Range;
 import android.util.Size;
 
 import androidx.annotation.DoNotInline;
@@ -50,6 +50,7 @@
 import androidx.camera.core.CameraInfoUnavailableException;
 import androidx.camera.core.CameraSelector;
 import androidx.camera.core.CameraUnavailableException;
+import androidx.camera.core.DynamicRange;
 import androidx.camera.core.FocusMeteringAction;
 import androidx.camera.core.FocusMeteringResult;
 import androidx.camera.core.ImageAnalysis;
@@ -59,6 +60,7 @@
 import androidx.camera.core.Logger;
 import androidx.camera.core.MeteringPoint;
 import androidx.camera.core.MeteringPointFactory;
+import androidx.camera.core.MirrorMode;
 import androidx.camera.core.Preview;
 import androidx.camera.core.TorchState;
 import androidx.camera.core.UseCase;
@@ -66,9 +68,12 @@
 import androidx.camera.core.ViewPort;
 import androidx.camera.core.ZoomState;
 import androidx.camera.core.impl.ImageOutputConfig;
+import androidx.camera.core.impl.StreamSpec;
 import androidx.camera.core.impl.utils.Threads;
 import androidx.camera.core.impl.utils.futures.FutureCallback;
 import androidx.camera.core.impl.utils.futures.Futures;
+import androidx.camera.core.resolutionselector.ResolutionSelector;
+import androidx.camera.core.resolutionselector.ResolutionStrategy;
 import androidx.camera.lifecycle.ProcessCameraProvider;
 import androidx.camera.video.FileDescriptorOutputOptions;
 import androidx.camera.video.FileOutputOptions;
@@ -224,6 +229,8 @@
 
     @Nullable
     OutputSize mPreviewTargetSize;
+    @Nullable
+    ResolutionSelector mPreviewResolutionSelector;
 
     // Synthetic access
     @SuppressWarnings("WeakerAccess")
@@ -232,6 +239,8 @@
 
     @Nullable
     OutputSize mImageCaptureTargetSize;
+    @Nullable
+    ResolutionSelector mImageCaptureResolutionSelector;
 
     @Nullable
     Executor mImageCaptureIoExecutor;
@@ -250,6 +259,8 @@
 
     @Nullable
     OutputSize mImageAnalysisTargetSize;
+    @Nullable
+    ResolutionSelector mImageAnalysisResolutionSelector;
 
     @NonNull
     VideoCapture<Recorder> mVideoCapture;
@@ -263,6 +274,15 @@
     @NonNull
     QualitySelector mVideoCaptureQualitySelector = Recorder.DEFAULT_QUALITY_SELECTOR;
 
+    @MirrorMode.Mirror
+    private int mVideoCaptureMirrorMode = MirrorMode.MIRROR_MODE_OFF;
+
+    @NonNull
+    private DynamicRange mVideoCaptureDynamicRange = DynamicRange.UNSPECIFIED;
+
+    @NonNull
+    private Range<Integer> mVideoCaptureTargetFrameRate = StreamSpec.FRAME_RATE_RANGE_UNSPECIFIED;
+
     // The latest bound camera.
     // Synthetic access
     @SuppressWarnings("WeakerAccess")
@@ -351,10 +371,6 @@
         };
     }
 
-    private static Recorder generateVideoCaptureRecorder(@NonNull QualitySelector qualitySelector) {
-        return new Recorder.Builder().setQualitySelector(qualitySelector).build();
-    }
-
     /**
      * Gets the application context and preserves the attribution tag.
      *
@@ -483,6 +499,17 @@
     }
 
     /**
+     * Sets the {@link ResolutionSelector} on the config.
+     */
+    private void setResolutionSelector(@NonNull ImageOutputConfig.Builder<?> builder,
+            @Nullable ResolutionSelector resolutionSelector) {
+        if (resolutionSelector == null) {
+            return;
+        }
+        builder.setResolutionSelector(resolutionSelector);
+    }
+
+    /**
      * Sets the target aspect ratio or target resolution based on {@link OutputSize}.
      */
     private void setTargetOutputSize(@NonNull ImageOutputConfig.Builder<?> builder,
@@ -492,7 +519,7 @@
         }
         if (outputSize.getResolution() != null) {
             builder.setTargetResolution(outputSize.getResolution());
-        } else if (outputSize.getAspectRatio() != UNASSIGNED_ASPECT_RATIO) {
+        } else if (outputSize.getAspectRatio() != OutputSize.UNASSIGNED_ASPECT_RATIO) {
             builder.setTargetAspectRatio(outputSize.getAspectRatio());
         } else {
             Logger.e(TAG, "Invalid target surface size. " + outputSize);
@@ -572,8 +599,10 @@
      * @param targetSize the intended output size for {@link Preview}.
      * @see Preview.Builder#setTargetAspectRatio(int)
      * @see Preview.Builder#setTargetResolution(Size)
+     * @deprecated Use {@link #setPreviewResolutionSelector(ResolutionSelector)} instead.
      */
     @MainThread
+    @Deprecated
     public void setPreviewTargetSize(@Nullable OutputSize targetSize) {
         checkMainThread();
         if (isOutputSizeEqual(mPreviewTargetSize, targetSize)) {
@@ -587,8 +616,11 @@
     /**
      * Returns the intended output size for {@link Preview} set by
      * {@link #setPreviewTargetSize(OutputSize)}, or null if not set.
+     *
+     * @deprecated Use {@link #getPreviewResolutionSelector()} instead.
      */
     @MainThread
+    @Deprecated
     @Nullable
     public OutputSize getPreviewTargetSize() {
         checkMainThread();
@@ -596,6 +628,45 @@
     }
 
     /**
+     * Sets the {@link ResolutionSelector} for {@link Preview}.
+     *
+     * <p>CameraX uses this value as a hint to select the resolution for preview. The actual
+     * output may differ from the requested value due to device constraints. When set to null,
+     * CameraX will use the default config of {@link Preview}. By default, the selected resolution
+     * will be limited by the {@code PREVIEW} size which is defined as the best size match to the
+     * device's screen resolution, or to 1080p (1920x1080), whichever is smaller.
+     *
+     * <p>Changing the value will reconfigure the camera which will cause additional latency. To
+     * avoid this, set the value before controller is bound to lifecycle.
+     *
+     * @see Preview.Builder#setResolutionSelector(ResolutionSelector)
+     */
+    @MainThread
+    public void setPreviewResolutionSelector(@Nullable ResolutionSelector resolutionSelector) {
+        checkMainThread();
+        if (mPreviewResolutionSelector == resolutionSelector) {
+            return;
+        }
+        mPreviewResolutionSelector = resolutionSelector;
+        unbindPreviewAndRecreate();
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Returns the {@link ResolutionSelector} for {@link Preview}.
+     *
+     * <p>This method returns the value set by
+     * {@link #setPreviewResolutionSelector(ResolutionSelector)}. It returns {@code null} if
+     * the value has not been set.
+     */
+    @Nullable
+    @MainThread
+    public ResolutionSelector getPreviewResolutionSelector() {
+        checkMainThread();
+        return mPreviewResolutionSelector;
+    }
+
+    /**
      * Unbinds {@link Preview} and recreates with the latest parameters.
      */
     private void unbindPreviewAndRecreate() {
@@ -604,6 +675,7 @@
         }
         Preview.Builder builder = new Preview.Builder();
         setTargetOutputSize(builder, mPreviewTargetSize);
+        setResolutionSelector(builder, mPreviewResolutionSelector);
         mPreview = builder.build();
     }
 
@@ -769,8 +841,10 @@
      * To avoid this, set the value before controller is bound to lifecycle.
      *
      * @param targetSize the intended image size for {@link ImageCapture}.
+     * @deprecated Use {@link #setImageCaptureResolutionSelector(ResolutionSelector)} instead.
      */
     @MainThread
+    @Deprecated
     public void setImageCaptureTargetSize(@Nullable OutputSize targetSize) {
         checkMainThread();
         if (isOutputSizeEqual(mImageCaptureTargetSize, targetSize)) {
@@ -784,7 +858,10 @@
     /**
      * Returns the intended output size for {@link ImageCapture} set by
      * {@link #setImageCaptureTargetSize(OutputSize)}, or null if not set.
+     *
+     * @deprecated Use {@link #getImageCaptureResolutionSelector()} instead.
      */
+    @Deprecated
     @MainThread
     @Nullable
     public OutputSize getImageCaptureTargetSize() {
@@ -793,6 +870,45 @@
     }
 
     /**
+     * Sets the {@link ResolutionSelector} for {@link ImageCapture}.
+     *
+     * <p>CameraX uses this value as a hint to select the resolution for captured images. The actual
+     * output may differ from the requested value due to device constraints. When set to null,
+     * CameraX will use the default config of {@link ImageCapture}. The default resolution
+     * strategy for ImageCapture is {@link ResolutionStrategy#HIGHEST_AVAILABLE_STRATEGY}, which
+     * will select the largest available resolution to use.
+     *
+     * <p>Changing the value will reconfigure the camera which will cause additional latency. To
+     * avoid this, set the value before controller is bound to lifecycle.
+     *
+     * @see ImageCapture.Builder#setResolutionSelector(ResolutionSelector)
+     */
+    @MainThread
+    public void setImageCaptureResolutionSelector(@Nullable ResolutionSelector resolutionSelector) {
+        checkMainThread();
+        if (mImageCaptureResolutionSelector == resolutionSelector) {
+            return;
+        }
+        mImageCaptureResolutionSelector = resolutionSelector;
+        unbindImageCaptureAndRecreate(getImageCaptureMode());
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Returns the {@link ResolutionSelector} for {@link ImageCapture}.
+     *
+     * <p>This method returns the value set by
+     * {@link #setImageCaptureResolutionSelector} (ResolutionSelector)}. It returns {@code null} if
+     * the value has not been set.
+     */
+    @MainThread
+    @Nullable
+    public ResolutionSelector getImageCaptureResolutionSelector() {
+        checkMainThread();
+        return mImageCaptureResolutionSelector;
+    }
+
+    /**
      * Sets the default executor that will be used for {@link ImageCapture} IO tasks.
      *
      * <p> This executor will be used for any IO tasks specifically for {@link ImageCapture},
@@ -835,6 +951,7 @@
         }
         ImageCapture.Builder builder = new ImageCapture.Builder().setCaptureMode(imageCaptureMode);
         setTargetOutputSize(builder, mImageCaptureTargetSize);
+        setResolutionSelector(builder, mImageCaptureResolutionSelector);
         if (mImageCaptureIoExecutor != null) {
             builder.setIoExecutor(mImageCaptureIoExecutor);
         }
@@ -1016,8 +1133,10 @@
      * @param targetSize the intended output size for {@link ImageAnalysis}.
      * @see ImageAnalysis.Builder#setTargetAspectRatio(int)
      * @see ImageAnalysis.Builder#setTargetResolution(Size)
+     * @deprecated Use {@link #setImageAnalysisResolutionSelector(ResolutionSelector)} instead.
      */
     @MainThread
+    @Deprecated
     public void setImageAnalysisTargetSize(@Nullable OutputSize targetSize) {
         checkMainThread();
         if (isOutputSizeEqual(mImageAnalysisTargetSize, targetSize)) {
@@ -1033,15 +1152,60 @@
     /**
      * Returns the intended output size for {@link ImageAnalysis} set by
      * {@link #setImageAnalysisTargetSize(OutputSize)}, or null if not set.
+     *
+     * @deprecated Use {@link #getImageAnalysisResolutionSelector()} instead.
      */
     @MainThread
     @Nullable
+    @Deprecated
     public OutputSize getImageAnalysisTargetSize() {
         checkMainThread();
         return mImageAnalysisTargetSize;
     }
 
     /**
+     * Sets the {@link ResolutionSelector} for {@link ImageAnalysis}.
+     *
+     * <p>CameraX uses this value as a hint to select the resolution for images. The actual
+     * output may differ from the requested value due to device constraints. When set to null,
+     * CameraX will use the default config of {@link ImageAnalysis}. ImageAnalysis has a default
+     * {@link ResolutionStrategy} with bound size as 640x480 and fallback rule of
+     * {@link ResolutionStrategy#FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER}.
+     *
+     * <p>Changing the value will reconfigure the camera which will cause additional latency. To
+     * avoid this, set the value before controller is bound to lifecycle.
+     *
+     * @see ImageAnalysis.Builder#setResolutionSelector(ResolutionSelector)
+     */
+    @MainThread
+    public void setImageAnalysisResolutionSelector(
+            @Nullable ResolutionSelector resolutionSelector) {
+        checkMainThread();
+        if (mImageAnalysisResolutionSelector == resolutionSelector) {
+            return;
+        }
+        mImageAnalysisResolutionSelector = resolutionSelector;
+        unbindImageAnalysisAndRecreate(
+                mImageAnalysis.getBackpressureStrategy(),
+                mImageAnalysis.getImageQueueDepth());
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Returns the {@link ResolutionSelector} for {@link ImageAnalysis}.
+     *
+     * <p>This method returns the value set by
+     * {@link #setImageAnalysisResolutionSelector(ResolutionSelector)}. It returns {@code null} if
+     * the value has not been set.
+     */
+    @MainThread
+    @Nullable
+    public ResolutionSelector getImageAnalysisResolutionSelector() {
+        checkMainThread();
+        return mImageAnalysisResolutionSelector;
+    }
+
+    /**
      * Sets the executor that will be used for {@link ImageAnalysis} background tasks.
      *
      * <p>If not set, the background executor will default to an automatically generated
@@ -1090,6 +1254,7 @@
                 .setBackpressureStrategy(strategy)
                 .setImageQueueDepth(imageQueueDepth);
         setTargetOutputSize(builder, mImageAnalysisTargetSize);
+        setResolutionSelector(builder, mImageAnalysisResolutionSelector);
         if (mAnalysisBackgroundExecutor != null) {
             builder.setBackgroundExecutor(mAnalysisBackgroundExecutor);
         }
@@ -1419,6 +1584,104 @@
     }
 
     /**
+     * Sets the mirror mode for video capture.
+     *
+     * <p>Valid values include: {@link MirrorMode#MIRROR_MODE_OFF},
+     * {@link MirrorMode#MIRROR_MODE_ON} and {@link MirrorMode#MIRROR_MODE_ON_FRONT_ONLY}.
+     * If not set, it defaults to {@link MirrorMode#MIRROR_MODE_OFF}.
+     *
+     * @see VideoCapture.Builder#setMirrorMode(int)
+     */
+    @MainThread
+    public void setVideoCaptureMirrorMode(@MirrorMode.Mirror int mirrorMode) {
+        checkMainThread();
+        mVideoCaptureMirrorMode = mirrorMode;
+        unbindVideoAndRecreate();
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Gets the mirror mode for video capture.
+     */
+    @MainThread
+    @MirrorMode.Mirror
+    public int getVideoCaptureMirrorMode() {
+        checkMainThread();
+        return mVideoCaptureMirrorMode;
+    }
+
+    /**
+     * Sets the {@link DynamicRange} for video capture.
+     *
+     * <p>The dynamic range specifies how the range of colors, highlights and shadows that
+     * are captured by the video producer are displayed on a display. Some dynamic ranges will
+     * allow the video to make full use of the extended range of brightness of a display when
+     * the video is played back.
+     *
+     * <p>The supported dynamic ranges for video capture can be queried through the
+     * {@link androidx.camera.video.VideoCapabilities} returned by
+     * {@link Recorder#getVideoCapabilities(CameraInfo)} via
+     * {@link androidx.camera.video.VideoCapabilities#getSupportedDynamicRanges()}.
+     *
+     * <p>It is possible to choose a high dynamic range (HDR) with unspecified encoding by providing
+     * {@link DynamicRange#HDR_UNSPECIFIED_10_BIT}.
+     *
+     * <p>If the dynamic range is not provided, the default value is {@link DynamicRange#SDR}.
+     *
+     * @see VideoCapture.Builder#setDynamicRange(DynamicRange)
+     */
+    @MainThread
+    public void setVideoCaptureDynamicRange(@NonNull DynamicRange dynamicRange) {
+        checkMainThread();
+        mVideoCaptureDynamicRange = dynamicRange;
+        unbindVideoAndRecreate();
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Gets the {@link DynamicRange} for video capture.
+     */
+    @MainThread
+    @NonNull
+    public DynamicRange getVideoCaptureDynamicRange() {
+        checkMainThread();
+        return mVideoCaptureDynamicRange;
+    }
+
+    /**
+     * Sets the target frame rate range in frames per second for video capture.
+     *
+     * <p>This target will be used as a part of the heuristics for the algorithm that determines
+     * the final frame rate range and resolution of all concurrently bound use cases.
+     *
+     * <p>It is not guaranteed that this target frame rate will be the final range,
+     * as other use cases as well as frame rate restrictions of the device may affect the
+     * outcome of the algorithm that chooses the actual frame rate.
+     *
+     * <p>By default, the value is {@link StreamSpec#FRAME_RATE_RANGE_UNSPECIFIED}. For supported
+     * frame rates, see {@link CameraInfo#getSupportedFrameRateRanges()}.
+     *
+     * @see VideoCapture.Builder#setTargetFrameRate(Range)
+     */
+    @MainThread
+    public void setVideoCaptureTargetFrameRate(@NonNull Range<Integer> targetFrameRate) {
+        checkMainThread();
+        mVideoCaptureTargetFrameRate = targetFrameRate;
+        unbindVideoAndRecreate();
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Gets the target frame rate in frames per second for video capture.
+     */
+    @MainThread
+    @NonNull
+    public Range<Integer> getVideoCaptureTargetFrameRate() {
+        checkMainThread();
+        return mVideoCaptureTargetFrameRate;
+    }
+
+    /**
      * Unbinds VideoCapture and recreate with the latest parameters.
      */
     private void unbindVideoAndRecreate() {
@@ -1429,7 +1692,13 @@
     }
 
     private VideoCapture<Recorder> createNewVideoCapture() {
-        return VideoCapture.withOutput(generateVideoCaptureRecorder(mVideoCaptureQualitySelector));
+        Recorder videoRecorder = new Recorder.Builder().setQualitySelector(
+                mVideoCaptureQualitySelector).build();
+        return new VideoCapture.Builder<>(videoRecorder)
+                .setTargetFrameRate(mVideoCaptureTargetFrameRate)
+                .setMirrorMode(mVideoCaptureMirrorMode)
+                .setDynamicRange(mVideoCaptureDynamicRange)
+                .build();
     }
 
     // -----------------
@@ -2031,7 +2300,9 @@
      * @see #setImageAnalysisTargetSize(OutputSize)
      * @see #setPreviewTargetSize(OutputSize)
      * @see #setImageCaptureTargetSize(OutputSize)
+     * @deprecated Use {@link ResolutionSelector} instead.
      */
+    @Deprecated
     @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
     public static final class OutputSize {
 
diff --git a/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt b/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
index 9033f3e..a283985 100644
--- a/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
+++ b/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
@@ -20,15 +20,18 @@
 import android.graphics.Matrix
 import android.os.Build
 import android.os.Looper.getMainLooper
+import android.util.Range
 import android.util.Rational
 import android.util.Size
 import android.view.Surface
 import androidx.camera.core.AspectRatio
 import androidx.camera.core.CameraSelector
+import androidx.camera.core.DynamicRange
 import androidx.camera.core.ImageAnalysis
 import androidx.camera.core.ImageAnalysis.COORDINATE_SYSTEM_ORIGINAL
 import androidx.camera.core.ImageCapture
 import androidx.camera.core.ImageProxy
+import androidx.camera.core.MirrorMode
 import androidx.camera.core.TorchState
 import androidx.camera.core.ViewPort
 import androidx.camera.core.impl.ImageAnalysisConfig
@@ -36,6 +39,8 @@
 import androidx.camera.core.impl.ImageOutputConfig
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.directExecutor
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
+import androidx.camera.core.resolutionselector.AspectRatioStrategy
+import androidx.camera.core.resolutionselector.ResolutionSelector
 import androidx.camera.testing.fakes.FakeCamera
 import androidx.camera.testing.fakes.FakeCameraControl
 import androidx.camera.testing.impl.fakes.FakeLifecycleOwner
@@ -71,11 +76,14 @@
     }
 
     private val previewViewTransform = Matrix().also { it.postRotate(90F) }
-
     private val context = ApplicationProvider.getApplicationContext<Context>()
     private lateinit var controller: LifecycleCameraController
+    @Suppress("deprecation")
     private val targetSizeWithAspectRatio =
         CameraController.OutputSize(AspectRatio.RATIO_16_9)
+    private val resolutionSelector = ResolutionSelector.Builder()
+        .setAspectRatioStrategy(AspectRatioStrategy.RATIO_16_9_FALLBACK_AUTO_STRATEGY).build()
+    @Suppress("deprecation")
     private val targetSizeWithResolution =
         CameraController.OutputSize(Size(1080, 1960))
     private val targetVideoQuality = Quality.HIGHEST
@@ -307,6 +315,37 @@
 
     @UiThreadTest
     @Test
+    fun setPreviewResolutionSelector() {
+        controller.previewResolutionSelector = resolutionSelector
+        assertThat(controller.previewResolutionSelector).isEqualTo(resolutionSelector)
+
+        val config = controller.mPreview.currentConfig as ImageOutputConfig
+        assertThat(config.resolutionSelector).isEqualTo(resolutionSelector)
+    }
+
+    @UiThreadTest
+    @Test
+    fun setAnalysisResolutionSelector() {
+        controller.imageAnalysisResolutionSelector = resolutionSelector
+        assertThat(controller.imageAnalysisResolutionSelector).isEqualTo(resolutionSelector)
+
+        val config = controller.mImageAnalysis.currentConfig as ImageOutputConfig
+        assertThat(config.resolutionSelector).isEqualTo(resolutionSelector)
+    }
+
+    @UiThreadTest
+    @Test
+    fun setImageCaptureResolutionSelector() {
+        controller.imageCaptureResolutionSelector = resolutionSelector
+        assertThat(controller.imageCaptureResolutionSelector).isEqualTo(resolutionSelector)
+
+        val config = controller.mImageCapture.currentConfig as ImageOutputConfig
+        assertThat(config.resolutionSelector).isEqualTo(resolutionSelector)
+    }
+
+    @UiThreadTest
+    @Test
+    @Suppress("deprecation")
     fun setPreviewAspectRatio() {
         controller.previewTargetSize = targetSizeWithAspectRatio
         assertThat(controller.previewTargetSize).isEqualTo(targetSizeWithAspectRatio)
@@ -317,6 +356,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setPreviewResolution() {
         controller.previewTargetSize = targetSizeWithResolution
         assertThat(controller.previewTargetSize).isEqualTo(targetSizeWithResolution)
@@ -327,6 +367,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setAnalysisAspectRatio() {
         controller.imageAnalysisTargetSize = targetSizeWithAspectRatio
         assertThat(controller.imageAnalysisTargetSize).isEqualTo(targetSizeWithAspectRatio)
@@ -365,6 +406,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setImageCaptureResolution() {
         controller.imageCaptureTargetSize = targetSizeWithResolution
         assertThat(controller.imageCaptureTargetSize).isEqualTo(targetSizeWithResolution)
@@ -375,6 +417,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setImageCaptureAspectRatio() {
         controller.imageCaptureTargetSize = targetSizeWithAspectRatio
         assertThat(controller.imageCaptureTargetSize).isEqualTo(targetSizeWithAspectRatio)
@@ -413,6 +456,32 @@
 
     @UiThreadTest
     @Test
+    fun setVideoCaptureMirrorMode() {
+        controller.videoCaptureMirrorMode = MirrorMode.MIRROR_MODE_ON_FRONT_ONLY
+        assertThat(controller.videoCaptureMirrorMode)
+            .isEqualTo(MirrorMode.MIRROR_MODE_ON_FRONT_ONLY)
+        assertThat(controller.mVideoCapture.mirrorMode)
+            .isEqualTo(MirrorMode.MIRROR_MODE_ON_FRONT_ONLY)
+    }
+
+    @UiThreadTest
+    @Test
+    fun setVideoCaptureDynamicRange() {
+        controller.videoCaptureDynamicRange = DynamicRange.HDR10_10_BIT
+        assertThat(controller.videoCaptureDynamicRange).isEqualTo(DynamicRange.HDR10_10_BIT)
+        assertThat(controller.mVideoCapture.dynamicRange).isEqualTo(DynamicRange.HDR10_10_BIT)
+    }
+
+    @UiThreadTest
+    @Test
+    fun setVideoCaptureFrameRate() {
+        controller.videoCaptureTargetFrameRate = Range.create(60, 120)
+        assertThat(controller.videoCaptureTargetFrameRate).isEqualTo(Range.create(60, 120))
+        assertThat(controller.mVideoCapture.targetFrameRate).isEqualTo(Range.create(60, 120))
+    }
+
+    @UiThreadTest
+    @Test
     fun sensorRotationChanges_useCaseTargetRotationUpdated() {
         // Act.
         controller.mDeviceRotationListener.onRotationChanged(Surface.ROTATION_180)
diff --git a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt
index 8353647..1f16434 100644
--- a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt
+++ b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt
@@ -26,7 +26,7 @@
 /**
  * Populates [ViewfinderSurfaceRequest.Builder] from [CameraCharacteristics].
  *
- * <p>The [CameraCharacteristics] will be used to populate information including lens facing,
+ * The [CameraCharacteristics] will be used to populate information including lens facing,
  * sensor orientation and [ImplementationMode]. If the hardware level is legacy,
  * the [ImplementationMode] will be set to [ImplementationMode.COMPATIBLE].
  */
diff --git a/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml b/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
index 5ee37e2..1892026 100644
--- a/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
+++ b/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
@@ -76,6 +76,16 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity
+            android:name=".ServiceSettingActivity"
+            android:exported="true"
+            android:label="Service Test App"
+            android:taskAffinity="androidx.camera.integration.core.ServiceSettingActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
         <service
             android:name=".CameraXService"
             android:exported="true"
@@ -86,6 +96,7 @@
                 <action android:name="androidx.camera.integration.core.intent.action.TAKE_PICTURE" />
                 <action android:name="androidx.camera.integration.core.intent.action.START_RECORDING" />
                 <action android:name="androidx.camera.integration.core.intent.action.STOP_RECORDING" />
+                <action android:name="androidx.camera.integration.core.intent.action.STOP_SERVICE" />
             </intent-filter>
         </service>
     </application>
@@ -100,4 +111,5 @@
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 </manifest>
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
index e20ec12..d53a766 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
@@ -35,6 +35,7 @@
 import static androidx.camera.video.VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE;
 import static androidx.camera.video.VideoRecordEvent.Finalize.ERROR_NONE;
 import static androidx.camera.video.VideoRecordEvent.Finalize.ERROR_SOURCE_INACTIVE;
+
 import static java.util.Objects.requireNonNull;
 
 import android.Manifest;
@@ -1135,7 +1136,7 @@
         mZslToggle.setEnabled(mPhotoToggle.isChecked());
         mCameraDirectionButton.setEnabled(getCameraInfo() != null);
         mPreviewStabilizationToggle.setEnabled(mCamera != null
-                && mCamera.getCameraInfo().getPreviewCapabilities().isStabilizationSupported());
+                && Preview.getPreviewCapabilities(getCameraInfo()).isStabilizationSupported());
         mTorchButton.setEnabled(isFlashAvailable());
         // Flash button
         mFlashButton.setEnabled(mPhotoToggle.isChecked() && isFlashAvailable());
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java
index ac8e9cf..66fa64d 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java
@@ -32,6 +32,7 @@
 
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
+import android.app.PendingIntent;
 import android.content.ContentValues;
 import android.content.Intent;
 import android.media.MediaScannerConnection;
@@ -43,6 +44,9 @@
 import android.os.SystemClock;
 import android.provider.MediaStore;
 import android.util.Log;
+import android.view.View;
+import android.widget.RemoteViews;
+import android.widget.Toast;
 
 import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
@@ -73,6 +77,7 @@
 import java.io.File;
 import java.text.Format;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collections;
@@ -84,6 +89,7 @@
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * A service used to test background UseCases binding and camera operations.
@@ -92,6 +98,7 @@
     private static final String TAG = "CameraXService";
     private static final int NOTIFICATION_ID = 1;
     private static final String CHANNEL_ID_SERVICE_INFO = "channel_service_info";
+    private static final int FRAME_COUNT_TO_UPDATE_ANALYSIS_INFO = 60;
 
     // Actions
     public static final String ACTION_BIND_USE_CASES =
@@ -102,6 +109,8 @@
             "androidx.camera.integration.core.intent.action.START_RECORDING";
     public static final String ACTION_STOP_RECORDING =
             "androidx.camera.integration.core.intent.action.STOP_RECORDING";
+    public static final String ACTION_STOP_SERVICE =
+            "androidx.camera.integration.core.intent.action.STOP_SERVICE";
 
     // Extras
     public static final String EXTRA_VIDEO_CAPTURE_ENABLED = "EXTRA_VIDEO_CAPTURE_ENABLED";
@@ -109,6 +118,7 @@
     public static final String EXTRA_IMAGE_ANALYSIS_ENABLED = "EXTRA_IMAGE_ANALYSIS_ENABLED";
 
     private final IBinder mBinder = new CameraXServiceBinder();
+    private final AtomicInteger mAnalysisFrameCount = new AtomicInteger(0);
 
     ////////////////////////////////////////////////////////////////////////////////////////////////
     //                          Members only accessed on main thread                              //
@@ -116,6 +126,8 @@
     private final Map<Class<?>, UseCase> mBoundUseCases = new HashMap<>();
     @Nullable
     private Recording mActiveRecording;
+    @Nullable
+    private NotificationCompat.Builder mNotificationBuilder;
     //--------------------------------------------------------------------------------------------//
 
     ////////////////////////////////////////////////////////////////////////////////////////////////
@@ -159,6 +171,9 @@
                 startRecording();
             } else if (ACTION_STOP_RECORDING.equals(action)) {
                 stopRecording();
+            } else if (ACTION_STOP_SERVICE.equals(action)) {
+                stopForeground(true);
+                stopSelf();
             }
         }
         return super.onStartCommand(intent, flags, startId);
@@ -166,11 +181,12 @@
 
     private void makeForeground() {
         createNotificationChannel();
-        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this,
+        mNotificationBuilder = new NotificationCompat.Builder(this,
                 CHANNEL_ID_SERVICE_INFO)
                 .setSmallIcon(android.R.drawable.ic_menu_camera)
-                .setStyle(new NotificationCompat.DecoratedCustomViewStyle());
-        startForeground(NOTIFICATION_ID, notificationBuilder.build());
+                .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
+                .setCustomContentView(getNotificationView());
+        startForeground(NOTIFICATION_ID, mNotificationBuilder.build());
     }
 
     private void bindToLifecycle(@NonNull Intent intent) {
@@ -191,16 +207,12 @@
                 cameraProvider.bindToLifecycle(this, DEFAULT_BACK_CAMERA, useCaseGroup);
                 boundUseCases = useCaseGroup.getUseCases();
             } catch (IllegalArgumentException e) {
-                Log.w(TAG, "Failed to bind by " + e, e);
+                String msg = "Failed to bind by " + e;
+                Log.w(TAG, msg, e);
+                Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
             }
         }
-        Log.d(TAG, "Bound UseCases: " + boundUseCases);
-        for (UseCase boundUseCase : boundUseCases) {
-            mBoundUseCases.put(boundUseCase.getClass(), boundUseCase);
-        }
-        if (mOnUseCaseBoundCallback != null) {
-            mOnUseCaseBoundCallback.accept(boundUseCases);
-        }
+        onUseCaseBound(boundUseCases);
     }
 
     @Nullable
@@ -229,6 +241,20 @@
         return hasUseCase ? useCaseGroupBuilder.build() : null;
     }
 
+    private void onUseCaseBound(@NonNull List<UseCase> boundUseCases) {
+        Log.d(TAG, "Bound UseCases: " + boundUseCases);
+        for (UseCase boundUseCase : boundUseCases) {
+            mBoundUseCases.put(boundUseCase.getClass(), boundUseCase);
+        }
+        if (mOnUseCaseBoundCallback != null) {
+            mOnUseCaseBoundCallback.accept(boundUseCases);
+        }
+        mAnalysisFrameCount.set(0);
+        updateNotification();
+        Toast.makeText(CameraXService.this, getHumanReadableName(boundUseCases) + " is bound",
+                Toast.LENGTH_SHORT).show();
+    }
+
     private void createNotificationChannel() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             NotificationChannel serviceChannel = Api26Impl.newNotificationChannel(
@@ -245,6 +271,71 @@
         return checkNotNull(ContextCompat.getSystemService(this, NotificationManager.class));
     }
 
+    private void updateNotification() {
+        NotificationCompat.Builder builder = checkNotNull(mNotificationBuilder);
+        builder.setCustomContentView(getNotificationView());
+        getNotificationManager().notify(NOTIFICATION_ID, builder.build());
+    }
+
+    @NonNull
+    private RemoteViews getNotificationView() {
+        RemoteViews notificationView = new RemoteViews(getPackageName(),
+                R.layout.notification_service_collapsed);
+
+        // Update VideoCapture view
+        if (getVideoCapture() != null) {
+            PendingIntent recordingIntent;
+            int recordingIconResId;
+            int recordingStateVisibility;
+            RemoteViews videoView = new RemoteViews(getPackageName(),
+                    R.layout.notification_video_widget);
+            if (mActiveRecording == null) {
+                recordingIntent = PendingIntent.getService(this, 0,
+                        new Intent(ACTION_START_RECORDING),
+                        PendingIntent.FLAG_UPDATE_CURRENT);
+                recordingIconResId = android.R.drawable.ic_media_play;
+                recordingStateVisibility = View.GONE;
+            } else {
+                recordingIntent = PendingIntent.getService(this, 0,
+                        new Intent(ACTION_STOP_RECORDING),
+                        PendingIntent.FLAG_IMMUTABLE);
+                recordingIconResId = R.drawable.ic_media_stop;
+                recordingStateVisibility = View.VISIBLE;
+            }
+            videoView.setOnClickPendingIntent(R.id.control, recordingIntent);
+            videoView.setImageViewResource(R.id.control, recordingIconResId);
+            videoView.setViewVisibility(R.id.state, recordingStateVisibility);
+            notificationView.addView(R.id.video_container, videoView);
+        }
+
+        // Update ImageCapture view
+        if (getImageCapture() != null) {
+            RemoteViews imageView = new RemoteViews(getPackageName(),
+                    R.layout.notification_image_widget);
+            PendingIntent takePictureIntent = PendingIntent.getService(this, 0,
+                    new Intent(ACTION_TAKE_PICTURE),
+                    PendingIntent.FLAG_IMMUTABLE);
+            imageView.setOnClickPendingIntent(R.id.picture, takePictureIntent);
+            notificationView.addView(R.id.image_container, imageView);
+        }
+
+        // Update ImageAnalysis view
+        if (getImageAnalysis() != null) {
+            RemoteViews analysisView = new RemoteViews(getPackageName(),
+                    R.layout.notification_analysis_widget);
+            String analysisMsg = "Analysis:" + mAnalysisFrameCount.get();
+            analysisView.setTextViewText(R.id.text_view, analysisMsg);
+            notificationView.addView(R.id.analysis_container, analysisView);
+        }
+
+        // Update exit button
+        notificationView.setOnClickPendingIntent(R.id.exit,
+                PendingIntent.getService(this, 0, new Intent(ACTION_STOP_SERVICE),
+                        PendingIntent.FLAG_IMMUTABLE));
+
+        return notificationView;
+    }
+
     @Nullable
     private ImageCapture getImageCapture() {
         return (ImageCapture) mBoundUseCases.get(ImageCapture.class);
@@ -256,6 +347,11 @@
         return (VideoCapture<Recorder>) mBoundUseCases.get(VideoCapture.class);
     }
 
+    @Nullable
+    private ImageAnalysis getImageAnalysis() {
+        return (ImageAnalysis) mBoundUseCases.get(ImageAnalysis.class);
+    }
+
     private void takePicture() {
         ImageCapture imageCapture = getImageCapture();
         if (imageCapture == null) {
@@ -282,8 +378,10 @@
                     public void onImageSaved(
                             @NonNull ImageCapture.OutputFileResults outputFileResults) {
                         long durationMs = SystemClock.elapsedRealtime() - startTimeMs;
-                        Log.d(TAG, "Saved image " + outputFileResults.getSavedUri()
-                                + "  (" + durationMs + " ms)");
+                        String msg = "Saved image " + outputFileResults.getSavedUri()
+                                + "  (" + durationMs + " ms)";
+                        Log.d(TAG, msg);
+                        Toast.makeText(CameraXService.this, msg, Toast.LENGTH_LONG).show();
                         mSavedMediaUri.add(outputFileResults.getSavedUri());
                         if (mTakePictureLatch != null) {
                             mTakePictureLatch.countDown();
@@ -292,8 +390,9 @@
 
                     @Override
                     public void onError(@NonNull ImageCaptureException exception) {
-                        Log.e(TAG, "Failed to save image by " + exception.getImageCaptureError(),
-                                exception);
+                        String msg = "Failed to save image by " + exception.getImageCaptureError();
+                        Log.e(TAG, msg, exception);
+                        Toast.makeText(CameraXService.this, msg, Toast.LENGTH_SHORT).show();
                     }
                 });
     }
@@ -332,6 +431,7 @@
             mActiveRecording = pendingRecording
                     .withAudioEnabled()
                     .start(ContextCompat.getMainExecutor(this), mRecordingListener);
+            updateNotification();
         } else {
             Log.e(TAG, "It should stop the active recording before start a new one.");
         }
@@ -352,7 +452,19 @@
         }
     }
 
+    @NonNull
+    private static String getHumanReadableName(@NonNull List<UseCase> useCases) {
+        List<String> useCaseNames = new ArrayList<>();
+        for (UseCase useCase : useCases) {
+            useCaseNames.add(useCase.getClass().getSimpleName());
+        }
+        return useCaseNames.size() > 0 ? String.join(" | ", useCaseNames) : "No UseCase";
+    }
+
     private final ImageAnalysis.Analyzer mAnalyzer = image -> {
+        if (mAnalysisFrameCount.getAndIncrement() % FRAME_COUNT_TO_UPDATE_ANALYSIS_INFO == 0) {
+            updateNotification();
+        }
         if (mAnalysisFrameLatch != null) {
             mAnalysisFrameLatch.countDown();
         }
@@ -396,6 +508,7 @@
                         msg += " with code (" + finalize.getError() + ")";
                     }
                     Log.d(TAG, msg, finalize.getCause());
+                    Toast.makeText(CameraXService.this, msg, Toast.LENGTH_LONG).show();
 
                     mSavedMediaUri.add(uri);
                     if (mRecordVideoLatch != null) {
@@ -406,8 +519,10 @@
                     String errMsg = "Video capture failed by (" + finalize.getError() + "): "
                             + finalize.getCause();
                     Log.e(TAG, errMsg, finalize.getCause());
+                    Toast.makeText(CameraXService.this, errMsg, Toast.LENGTH_LONG).show();
             }
             mActiveRecording = null;
+            updateNotification();
         }
     };
 
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/ServiceSettingActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/ServiceSettingActivity.java
new file mode 100644
index 0000000..6e13d8f
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/ServiceSettingActivity.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2023 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 androidx.camera.integration.core;
+
+import static androidx.camera.integration.core.CameraXService.ACTION_BIND_USE_CASES;
+import static androidx.camera.integration.core.CameraXService.EXTRA_IMAGE_ANALYSIS_ENABLED;
+import static androidx.camera.integration.core.CameraXService.EXTRA_IMAGE_CAPTURE_ENABLED;
+import static androidx.camera.integration.core.CameraXService.EXTRA_VIDEO_CAPTURE_ENABLED;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.widget.Toast;
+import android.widget.ToggleButton;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * An activity to configure CameraXService.
+ *
+ * <p>It will:
+ * <ul>
+ *   <li>Grant runtime permissions.</li>
+ *   <li>Start the CameraXService automatically.</li>
+ *   <li>Control which use cases are bound to the CameraXService lifecycle.</li>
+ * </ul>
+ */
+public class ServiceSettingActivity extends AppCompatActivity {
+
+    private static final String[] REQUIRED_PERMISSIONS;
+
+    static {
+        List<String> permissions = new ArrayList<>();
+        permissions.add(android.Manifest.permission.CAMERA);
+        permissions.add(android.Manifest.permission.RECORD_AUDIO);
+        // From Android T, skips the permission check of WRITE_EXTERNAL_STORAGE since it won't be
+        // granted any more.
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
+            permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+        } else {
+            // From Android T, POST_NOTIFICATIONS is required for foreground service to post
+            // notification.
+            permissions.add(Manifest.permission.POST_NOTIFICATIONS);
+        }
+        REQUIRED_PERMISSIONS = permissions.toArray(new String[0]);
+    }
+
+    private ToggleButton mButtonVideo;
+    private ToggleButton mButtonImage;
+    private ToggleButton mButtonAnalysis;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.activity_service_setting);
+        mButtonVideo = findViewById(R.id.video_toggle);
+        mButtonImage = findViewById(R.id.image_toggle);
+        mButtonAnalysis = findViewById(R.id.analysis_toggle);
+
+        mButtonVideo.setOnClickListener(v -> bindUseCases());
+        mButtonImage.setOnClickListener(v -> bindUseCases());
+        mButtonAnalysis.setOnClickListener(v -> bindUseCases());
+
+        grantPermissions();
+    }
+
+    private void onPermissionGranted() {
+        launchService();
+        bindUseCases();
+    }
+
+    private void launchService() {
+        Intent intent = createServiceIntent(null);
+        ContextCompat.startForegroundService(this, intent);
+    }
+
+    private void bindUseCases() {
+        Intent intent = createServiceIntent(ACTION_BIND_USE_CASES);
+        intent.putExtra(EXTRA_VIDEO_CAPTURE_ENABLED, mButtonVideo.isChecked());
+        intent.putExtra(EXTRA_IMAGE_CAPTURE_ENABLED, mButtonImage.isChecked());
+        intent.putExtra(EXTRA_IMAGE_ANALYSIS_ENABLED, mButtonAnalysis.isChecked());
+        ContextCompat.startForegroundService(this, intent);
+    }
+
+    @NonNull
+    private Intent createServiceIntent(@Nullable String action) {
+        Intent intent = new Intent(this, CameraXService.class);
+        intent.setAction(action);
+        return intent;
+    }
+
+    private boolean isPermissionMissing() {
+        for (String permission : REQUIRED_PERMISSIONS) {
+            if (ContextCompat.checkSelfPermission(this, permission)
+                    != PackageManager.PERMISSION_GRANTED) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void grantPermissions() {
+        if (isPermissionMissing()) {
+            ActivityResultLauncher<String[]> permissionLauncher = registerForActivityResult(
+                    new ActivityResultContracts.RequestMultiplePermissions(),
+                    result -> {
+                        for (String permission : REQUIRED_PERMISSIONS) {
+                            if (!Objects.requireNonNull(result.get(permission))) {
+                                Toast.makeText(this, "Camera permission denied.",
+                                        Toast.LENGTH_SHORT).show();
+                                finish();
+                                return;
+                            }
+                        }
+                        onPermissionGranted();
+                    });
+
+            permissionLauncher.launch(REQUIRED_PERMISSIONS);
+        } else {
+            onPermissionGranted();
+        }
+    }
+}
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
index 976b5f3..84a51b0 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
@@ -275,7 +275,7 @@
     private void exportTestInformation() {
         String information = KEY_DEVICE_ORIENTATION + ": " + mDeviceOrientation;
         FileUtil.writeTextToExternalFile(information,
-                generateFileName(INFO_FILE_PREFIX, false), "txt");
+                generateFileName(INFO_FILE_PREFIX, true), "txt");
     }
 
     @NonNull
diff --git a/camera/integration-tests/coretestapp/src/main/res/drawable/ic_media_stop.png b/camera/integration-tests/coretestapp/src/main/res/drawable/ic_media_stop.png
new file mode 100644
index 0000000..8ea7efe
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/drawable/ic_media_stop.png
Binary files differ
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/activity_service_setting.xml b/camera/integration-tests/coretestapp/src/main/res/layout/activity_service_setting.xml
new file mode 100644
index 0000000..5682525
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/activity_service_setting.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2023 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.
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/constraintLayout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="androidx.camera.integration.core.ServiceSettingActivity">
+
+    <ToggleButton
+        android:id="@+id/video_toggle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:scaleType="fitXY"
+        android:textOn="@string/toggle_video_on"
+        android:textOff="@string/toggle_video_off"
+        android:checked="true"
+        android:background="@drawable/usecase_toggle_bg_selector"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="@+id/constraintLayout"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0" />
+
+    <ToggleButton
+        android:id="@+id/image_toggle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:scaleType="fitXY"
+        android:textOn="@string/toggle_photo_on"
+        android:textOff="@string/toggle_photo_off"
+        android:checked="true"
+        android:background="@drawable/usecase_toggle_bg_selector"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="@+id/constraintLayout"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0"
+        />
+
+    <ToggleButton
+        android:id="@+id/analysis_toggle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:scaleType="fitXY"
+        android:textOn="@string/toggle_analysis_on"
+        android:textOff="@string/toggle_analysis_off"
+        android:checked="false"
+        android:background="@drawable/usecase_toggle_bg_selector"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="1"
+        app:layout_constraintStart_toStartOf="@+id/constraintLayout"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0"
+        />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:maxLines="2"
+        android:text="@string/foreground_service_note"
+        android:gravity="center"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_analysis_widget.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_analysis_widget.xml
new file mode 100644
index 0000000..5e5435e
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_analysis_widget.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2023 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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <TextView
+        android:id="@+id/text_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="2dp"
+        android:layout_weight="1"
+        android:elevation="2dp"
+        android:maxLines="2"
+        android:padding="3dp"
+        android:scaleType="fitXY"
+        style="@style/TextAppearance.Compat.Notification"
+        />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_image_widget.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_image_widget.xml
new file mode 100644
index 0000000..ef8bdb7
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_image_widget.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2023 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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <ImageButton
+        android:id="@+id/picture"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="2dp"
+        android:background="@drawable/round_button"
+        android:contentDescription="Take Picture"
+        android:padding="3dp"
+        android:src="@android:drawable/ic_menu_camera" />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_service_collapsed.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_service_collapsed.xml
new file mode 100644
index 0000000..d8953b0
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_service_collapsed.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2023 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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <FrameLayout
+        android:id="@+id/video_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+    <FrameLayout
+        android:id="@+id/image_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+    <FrameLayout
+        android:id="@+id/analysis_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1" />
+
+    <ImageButton
+        android:id="@+id/exit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/round_button"
+        android:contentDescription="Exit"
+        android:padding="3dp"
+        android:src="@android:drawable/ic_menu_close_clear_cancel" />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_video_widget.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_video_widget.xml
new file mode 100644
index 0000000..7b64e8a
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_video_widget.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2023 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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <ImageButton
+        android:id="@+id/control"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="2dp"
+        android:background="@drawable/round_button"
+        android:scaleType="fitXY"
+        android:contentDescription="Start/Stop video recording"
+        android:padding="3dp"
+        android:src="@android:drawable/ic_media_play" />
+
+    <ImageView
+        android:id="@+id/state"
+        android:layout_width="25dp"
+        android:layout_height="25dp"
+        android:layout_marginLeft="2dp"
+        android:background="@android:color/transparent"
+        android:scaleType="fitXY"
+        android:src="@android:drawable/presence_video_busy"
+        android:visibility="gone" />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml b/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
index 65335ef..949bfd4 100644
--- a/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
+++ b/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
@@ -17,6 +17,7 @@
 
 <resources>
     <string name="camerax_service">CameraX Service</string>
+    <string name="foreground_service_note">Foreground Service control is in the notification.\nLeave this activity and play on notification.</string>
     <string name="fps_counter_template">%1$s fps</string>
     <string name="toggle_preview_on">preview\non</string>
     <string name="toggle_preview_off">preview\noff</string>
diff --git a/camera/integration-tests/viewtestapp/build.gradle b/camera/integration-tests/viewtestapp/build.gradle
index 1c44751..b2073c2 100644
--- a/camera/integration-tests/viewtestapp/build.gradle
+++ b/camera/integration-tests/viewtestapp/build.gradle
@@ -80,7 +80,7 @@
     implementation("androidx.appcompat:appcompat:1.3.0")
 
     // Compose UI
-    implementation(project(":compose:runtime:runtime"))
+    implementation("androidx.compose.runtime:runtime:1.4.0")
     implementation("androidx.compose.ui:ui:1.4.0")
     implementation("androidx.compose.material:material:1.4.0")
     implementation("androidx.compose.ui:ui-tooling:1.4.0")
diff --git a/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt b/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt
index 47cb642..85cdc2a 100644
--- a/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt
+++ b/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt
@@ -50,6 +50,11 @@
         benchmark.runCollectionBenchmark(ScatterMapForEachBenchmark(sourceSet))
     }
 
+    @Test
+    fun compute() {
+        benchmark.runCollectionBenchmark(ScatterMapComputeBenchmark(sourceSet))
+    }
+
     companion object {
         @JvmStatic
         @Parameters(name = "size={0}")
diff --git a/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt b/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt
index 8e38d63..4820ca1 100644
--- a/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt
+++ b/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt
@@ -84,6 +84,24 @@
     }
 }
 
+internal class ScatterMapComputeBenchmark(
+    private val dataSet: Array<String>
+) : CollectionBenchmark {
+    private val map = MutableScatterMap<String, String>()
+
+    init {
+        for (testValue in dataSet) {
+            map[testValue] = testValue
+        }
+    }
+
+    override fun measuredBlock() {
+        for (testValue in dataSet) {
+            map.compute(testValue) { _, v -> v ?: testValue }
+        }
+    }
+}
+
 internal fun createDataSet(
     size: Int
 ): Array<String> = Array(size) { index ->
diff --git a/collection/collection/api/current.txt b/collection/collection/api/current.txt
index 53cd0b5..cabdbf3 100644
--- a/collection/collection/api/current.txt
+++ b/collection/collection/api/current.txt
@@ -1618,6 +1618,7 @@
     ctor public MutableScatterMap(optional int initialCapacity);
     method public java.util.Map<K,V> asMutableMap();
     method public void clear();
+    method public inline V compute(K key, kotlin.jvm.functions.Function2<? super K,? super V,? extends V> computeBlock);
     method public inline V getOrPut(K key, kotlin.jvm.functions.Function0<? extends V> defaultValue);
     method public inline operator void minusAssign(androidx.collection.ObjectList<K> keys);
     method public inline operator void minusAssign(androidx.collection.ScatterSet<K> keys);
@@ -1639,7 +1640,7 @@
     method public void putAll(kotlin.sequences.Sequence<? extends kotlin.Pair<? extends K,? extends V>> pairs);
     method public V? remove(K key);
     method public boolean remove(K key, V value);
-    method public void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
+    method public inline void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
     method public operator void set(K key, V value);
     method public int trim();
   }
diff --git a/collection/collection/api/restricted_current.txt b/collection/collection/api/restricted_current.txt
index b1ab5c9..931cbcb 100644
--- a/collection/collection/api/restricted_current.txt
+++ b/collection/collection/api/restricted_current.txt
@@ -1690,6 +1690,8 @@
     ctor public MutableScatterMap(optional int initialCapacity);
     method public java.util.Map<K,V> asMutableMap();
     method public void clear();
+    method public inline V compute(K key, kotlin.jvm.functions.Function2<? super K,? super V,? extends V> computeBlock);
+    method @kotlin.PublishedApi internal int findInsertIndex(K key);
     method public inline V getOrPut(K key, kotlin.jvm.functions.Function0<? extends V> defaultValue);
     method public inline operator void minusAssign(androidx.collection.ObjectList<K> keys);
     method public inline operator void minusAssign(androidx.collection.ScatterSet<K> keys);
@@ -1711,7 +1713,8 @@
     method public void putAll(kotlin.sequences.Sequence<? extends kotlin.Pair<? extends K,? extends V>> pairs);
     method public V? remove(K key);
     method public boolean remove(K key, V value);
-    method public void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
+    method public inline void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
+    method @kotlin.PublishedApi internal V? removeValueAt(int index);
     method public operator void set(K key, V value);
     method public int trim();
   }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
index 547f6a3..217093a 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
@@ -840,6 +840,34 @@
     }
 
     /**
+     * Retrieves a value for [key] and computes a new value based on the existing value (or
+     * `null` if the key is not in the map). The computed value is then stored in the map for the
+     * given [key].
+     *
+     * @return value computed by `computeBlock`.
+     */
+    public inline fun compute(key: K, computeBlock: (key: K, value: V?) -> V): V {
+        val index = findInsertIndex(key)
+        val inserting = index < 0
+
+        @Suppress("UNCHECKED_CAST")
+        val computedValue = computeBlock(
+            key,
+            if (inserting) null else values[index] as V
+        )
+
+        // Skip Array.set() if key is already there
+        if (inserting) {
+            val insertionIndex = index.inv()
+            keys[insertionIndex] = key
+            values[insertionIndex] = computedValue
+        } else {
+            values[index] = computedValue
+        }
+        return computedValue
+    }
+
+    /**
      * Creates a new mapping from [key] to [value] in this map. If [key] is
      * already present in the map, the association is modified and the previously
      * associated value is replaced with [value]. If [key] is not present, a new
@@ -847,7 +875,9 @@
      * and cause allocations.
      */
     public operator fun set(key: K, value: V) {
-        val index = findAbsoluteInsertIndex(key)
+        val index = findInsertIndex(key).let { index ->
+            if (index < 0) index.inv() else index
+        }
         keys[index] = key
         values[index] = value
     }
@@ -861,7 +891,9 @@
      * or `null` if the key was not present in the map.
      */
     public fun put(key: K, value: V): V? {
-        val index = findAbsoluteInsertIndex(key)
+        val index = findInsertIndex(key).let { index ->
+            if (index < 0) index.inv() else index
+        }
         val oldValue = values[index]
         keys[index] = key
         values[index] = value
@@ -987,7 +1019,7 @@
     /**
      * Removes any mapping for which the specified [predicate] returns true.
      */
-    public fun removeIf(predicate: (K, V) -> Boolean) {
+    public inline fun removeIf(predicate: (K, V) -> Boolean) {
         forEachIndexed { index ->
             @Suppress("UNCHECKED_CAST")
             if (predicate(keys[index] as K, values[index] as V)) {
@@ -1048,7 +1080,8 @@
         }
     }
 
-    private fun removeValueAt(index: Int): V? {
+    @PublishedApi
+    internal fun removeValueAt(index: Int): V? {
         _size -= 1
 
         // TODO: We could just mark the entry as empty if there's a group
@@ -1079,11 +1112,12 @@
     /**
      * Scans the hash table to find the index at which we can store a value
      * for the give [key]. If the key already exists in the table, its index
-     * will be returned, otherwise the index of an empty slot will be returned.
+     * will be returned, otherwise the `index.inv()` of an empty slot will be returned.
      * Calling this function may cause the internal storage to be reallocated
      * if the table is full.
      */
-    private fun findAbsoluteInsertIndex(key: K): Int {
+    @PublishedApi
+    internal fun findInsertIndex(key: K): Int {
         val hash = hash(key)
         val hash1 = h1(hash)
         val hash2 = h2(hash)
@@ -1121,7 +1155,7 @@
         growthLimit -= if (isEmpty(metadata, index)) 1 else 0
         writeMetadata(index, hash2.toLong())
 
-        return index
+        return index.inv()
     }
 
     /**
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt
index ec03f0d..fab395c 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt
@@ -333,6 +333,39 @@
     }
 
     @Test
+    fun compute() {
+        val map = MutableScatterMap<String, String?>()
+        map["Hello"] = "World"
+
+        var computed = map.compute("Hello") { _, _ ->
+            "New World"
+        }
+        assertEquals("New World", map["Hello"])
+        assertEquals("New World", computed)
+
+        computed = map.compute("Bonjour") { _, _ ->
+            "Monde"
+        }
+        assertEquals("Monde", map["Bonjour"])
+        assertEquals("Monde", computed)
+
+        map.compute("Bonjour") { _, v ->
+            v ?: "Welt"
+        }
+        assertEquals("Monde", map["Bonjour"])
+
+        map.compute("Hallo") { _, _ ->
+            null
+        }
+        assertNull(map["Hallo"])
+
+        map.compute("Hallo") { _, v ->
+            v ?: "Welt"
+        }
+        assertEquals("Welt", map["Hallo"])
+    }
+
+    @Test
     fun remove() {
         val map = MutableScatterMap<String?, String?>()
         assertNull(map.remove("Hello"))
diff --git a/collection/collection/template/ValueClassList.kt.template b/collection/collection/template/ValueClassList.kt.template
index 34d2ea2..3da978b 100644
--- a/collection/collection/template/ValueClassList.kt.template
+++ b/collection/collection/template/ValueClassList.kt.template
@@ -13,9 +13,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@file:Suppress("NOTHING_TO_INLINE", "RedundantVisibilityModifier", "UnusedImport")
-/* ktlint-disable max-line-length */
-/* ktlint-disable import-ordering */
+
+@file:Suppress(
+    "RedundantVisibilityModifier",
+    "KotlinRedundantDiagnosticSuppress",
+    "KotlinConstantConditions",
+    "PropertyName",
+    "ConstPropertyName",
+    "PrivatePropertyName",
+    "NOTHING_TO_INLINE",
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
+)
 
 package PACKAGE
 
@@ -28,22 +39,14 @@
 import kotlin.contracts.contract
 import kotlin.jvm.JvmInline
 
-// To use this template, you must substitute several strings. You can copy this and search/replace
-// or use a sed command. These properties must be changed:
-// * PACKAGE - target package (e.g. androidx.compose.ui.ui.collection)
-// * VALUE_PKG - package in which the value class resides
-// * VALUE_CLASS - the value class contained in the list (e.g. Color or Offset)
-// * vALUE_CLASS - the value class, with the first letter lower case (e.g. color or offset)
-// * BACKING_PROPERTY - the field in VALUE_CLASS containing the backing primitive (e.g. packedValue)
-// * PRIMITIVE - the primitive type of the backing list (e.g. Long or Float)
-// * TO_PARAM - an operation done on the primitive to convert to the value class parameter
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
 //
-// For example, to create a ColorList:
-// sed -e "s/PACKAGE/androidx.compose.ui.graphics/" -e "s/VALUE_CLASS/Color/g" \
-//     -e "s/vALUE_CLASS/color/g" -e "s/BACKING_PROPERTY/value.toLong()/g" -e "s/PRIMITIVE/Long/g" \
-//     -e "s/TO_PARAM/.toULong()/g" -e "s/VALUE_PKG/androidx.compose.ui.graphics/g" \
-//     collection/collection/template/ValueClassList.kt.template \
-//     > compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt
+// This file was generated from a template:
+//   collection/collection/template/ValueClassList.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the list.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 /**
  * [VALUE_CLASSList] is a [List]-like collection for [VALUE_CLASS] values. It allows retrieving
@@ -58,7 +61,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class VALUE_CLASSList(val list: PRIMITIVEList) {
+VISIBILITY value class VALUE_CLASSList(val list: PRIMITIVEList) {
     /**
      * The number of elements in the [VALUE_CLASSList].
      */
@@ -378,7 +381,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class MutableVALUE_CLASSList(val list: MutablePRIMITIVEList) {
+VISIBILITY value class MutableVALUE_CLASSList(val list: MutablePRIMITIVEList) {
     public constructor(initialCapacity: Int = 16) : this(MutablePRIMITIVEList(initialCapacity))
 
     /**
@@ -853,23 +856,23 @@
 /**
  * @return a read-only [VALUE_CLASSList] with nothing in it.
  */
-internal inline fun emptyVALUE_CLASSList(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
+VISIBILITY inline fun emptyVALUE_CLASSList(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
 
 /**
  * @return a read-only [VALUE_CLASSList] with nothing in it.
  */
-internal inline fun vALUE_CLASSListOf(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
+VISIBILITY inline fun vALUE_CLASSListOf(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
 
 /**
  * @return a new read-only [VALUE_CLASSList] with [element1] as the only item in the list.
  */
-internal inline fun vALUE_CLASSListOf(element1: VALUE_CLASS): VALUE_CLASSList =
+VISIBILITY inline fun vALUE_CLASSListOf(element1: VALUE_CLASS): VALUE_CLASSList =
     VALUE_CLASSList(mutablePRIMITIVEListOf(element1.BACKING_PROPERTY))
 
 /**
  * @return a new read-only [VALUE_CLASSList] with 2 elements, [element1] and [element2], in order.
  */
-internal inline fun vALUE_CLASSListOf(element1: VALUE_CLASS, element2: VALUE_CLASS): VALUE_CLASSList =
+VISIBILITY inline fun vALUE_CLASSListOf(element1: VALUE_CLASS, element2: VALUE_CLASS): VALUE_CLASSList =
     VALUE_CLASSList(
         mutablePRIMITIVEListOf(
             element1.BACKING_PROPERTY,
@@ -881,7 +884,7 @@
  * @return a new read-only [VALUE_CLASSList] with 3 elements, [element1], [element2], and [element3],
  * in order.
  */
-internal inline fun vALUE_CLASSListOf(
+VISIBILITY inline fun vALUE_CLASSListOf(
         element1: VALUE_CLASS,
         element2: VALUE_CLASS,
         element3: VALUE_CLASS
@@ -896,19 +899,19 @@
 /**
  * @return a new empty [MutableVALUE_CLASSList] with the default capacity.
  */
-internal inline fun mutableVALUE_CLASSListOf(): MutableVALUE_CLASSList =
+VISIBILITY inline fun mutableVALUE_CLASSListOf(): MutableVALUE_CLASSList =
     MutableVALUE_CLASSList(MutablePRIMITIVEList())
 
 /**
  * @return a new [MutableVALUE_CLASSList] with [element1] as the only item in the list.
  */
-internal inline fun mutableVALUE_CLASSListOf(element1: VALUE_CLASS): MutableVALUE_CLASSList =
+VISIBILITY inline fun mutableVALUE_CLASSListOf(element1: VALUE_CLASS): MutableVALUE_CLASSList =
     MutableVALUE_CLASSList(mutablePRIMITIVEListOf(element1.BACKING_PROPERTY))
 
 /**
  * @return a new [MutableVALUE_CLASSList] with 2 elements, [element1] and [element2], in order.
  */
-internal inline fun mutableVALUE_CLASSListOf(
+VISIBILITY inline fun mutableVALUE_CLASSListOf(
         element1: VALUE_CLASS,
         element2: VALUE_CLASS
     ): MutableVALUE_CLASSList = MutableVALUE_CLASSList(
@@ -922,7 +925,7 @@
  * @return a new [MutableVALUE_CLASSList] with 3 elements, [element1], [element2], and [element3],
  * in order.
  */
-internal inline fun mutableVALUE_CLASSListOf(
+VISIBILITY inline fun mutableVALUE_CLASSListOf(
         element1: VALUE_CLASS,
         element2: VALUE_CLASS,
         element3: VALUE_CLASS
diff --git a/collection/collection/template/ValueClassSet.kt.template b/collection/collection/template/ValueClassSet.kt.template
index 33d7af4..8cfdf3c 100644
--- a/collection/collection/template/ValueClassSet.kt.template
+++ b/collection/collection/template/ValueClassSet.kt.template
@@ -22,14 +22,14 @@
     "ConstPropertyName",
     "PrivatePropertyName",
     "NOTHING_TO_INLINE",
-    "UnusedImport"
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
 )
 
 package PACKAGE
 
-/* ktlint-disable max-line-length */
-/* ktlint-disable import-ordering */
-
 import androidx.collection.PRIMITIVESet
 import androidx.collection.MutablePRIMITIVESet
 import androidx.collection.emptyPRIMITIVESet
@@ -39,45 +39,36 @@
 import kotlin.contracts.contract
 import kotlin.jvm.JvmInline
 
-/* ktlint-disable max-line-length */
-// To use this template, you must substitute several strings. You can copy this and search/replace
-// or use a sed command. These properties must be changed:
-// * PACKAGE - target package (e.g. androidx.compose.ui.ui.collection)
-// * VALUE_PKG - package in which the value class resides
-// * VALUE_CLASS - the value class contained in the set (e.g. Color or Offset)
-// * vALUE_CLASS - the value class, with the first letter lower case (e.g. color or offset)
-// * BACKING_PROPERTY - the field in VALUE_CLASS containing the backing primitive (e.g. packedValue)
-// * PRIMITIVE - the primitive type of the backing set (e.g. Long or Float)
-// * TO_PARAM - an operation done on the primitive to convert to the value class parameter
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
 //
-// For example, to create a ColorSet:
-// sed -e "s/PACKAGE/androidx.compose.ui.graphics/" -e "s/VALUE_CLASS/Color/g" \
-//     -e "s/vALUE_CLASS/color/g" -e "s/BACKING_PROPERTY/value.toLong()/g" -e "s/PRIMITIVE/Long/g" \
-//     -e "s/TO_PARAM/.toULong()/g" -e "s/VALUE_PKG/androidx.collection/g" \
-//     collection/collection/template/ValueClassSet.kt.template \
-//     > compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt
+// This file was generated from a template:
+//   collection/collection/template/ValueClassSet.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the set.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 /**
  * Returns an empty, read-only [VALUE_CLASSSet].
  */
-internal inline fun emptyVALUE_CLASSSet(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
+VISIBILITY inline fun emptyVALUE_CLASSSet(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
 
 /**
  * Returns an empty, read-only [VALUE_CLASSSet].
  */
-internal inline fun vALUE_CLASSSetOf(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
+VISIBILITY inline fun vALUE_CLASSSetOf(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
 
 /**
  * Returns a new read-only [VALUE_CLASSSet] with only [element1] in it.
  */
-internal inline fun vALUE_CLASSSetOf(element1: VALUE_CLASS): VALUE_CLASSSet =
+VISIBILITY inline fun vALUE_CLASSSetOf(element1: VALUE_CLASS): VALUE_CLASSSet =
     VALUE_CLASSSet(mutablePRIMITIVESetOf(element1.BACKING_PROPERTY))
 
 /**
  * Returns a new read-only [VALUE_CLASSSet] with only [element1] and [element2] in it.
  */
 @Suppress("UNCHECKED_CAST")
-internal fun vALUE_CLASSSetOf(
+VISIBILITY fun vALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS
 ): VALUE_CLASSSet =
@@ -92,7 +83,7 @@
  * Returns a new read-only [VALUE_CLASSSet] with only [element1], [element2], and [element3] in it.
  */
 @Suppress("UNCHECKED_CAST")
-internal fun vALUE_CLASSSetOf(
+VISIBILITY fun vALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS,
     element3: VALUE_CLASS
@@ -107,20 +98,20 @@
 /**
  * Returns a new [MutableVALUE_CLASSSet].
  */
-internal fun mutableVALUE_CLASSSetOf(): MutableVALUE_CLASSSet = MutableVALUE_CLASSSet(
+VISIBILITY fun mutableVALUE_CLASSSetOf(): MutableVALUE_CLASSSet = MutableVALUE_CLASSSet(
     MutablePRIMITIVESet()
 )
 
 /**
  * Returns a new [MutableVALUE_CLASSSet] with only [element1] in it.
  */
-internal fun mutableVALUE_CLASSSetOf(element1: VALUE_CLASS): MutableVALUE_CLASSSet =
+VISIBILITY fun mutableVALUE_CLASSSetOf(element1: VALUE_CLASS): MutableVALUE_CLASSSet =
     MutableVALUE_CLASSSet(mutablePRIMITIVESetOf(element1.BACKING_PROPERTY))
 
 /**
  * Returns a new [MutableVALUE_CLASSSet] with only [element1] and [element2] in it.
  */
-internal fun mutableVALUE_CLASSSetOf(
+VISIBILITY fun mutableVALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS
 ): MutableVALUE_CLASSSet =
@@ -134,7 +125,7 @@
 /**
  * Returns a new [MutableVALUE_CLASSSet] with only [element1], [element2], and [element3] in it.
  */
-internal fun mutableVALUE_CLASSSetOf(
+VISIBILITY fun mutableVALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS,
     element3: VALUE_CLASS
@@ -164,7 +155,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class VALUE_CLASSSet(val set: PRIMITIVESet) {
+VISIBILITY value class VALUE_CLASSSet(val set: PRIMITIVESet) {
     /**
      * Returns the number of elements that can be stored in this set
      * without requiring internal storage reallocation.
@@ -315,7 +306,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class MutableVALUE_CLASSSet(val set: MutablePRIMITIVESet) {
+VISIBILITY value class MutableVALUE_CLASSSet(val set: MutablePRIMITIVESet) {
     /**
      * Returns the number of elements that can be stored in this set
      * without requiring internal storage reallocation.
diff --git a/collection/collection/template/generateValueClassCollections.sh b/collection/collection/template/generateValueClassCollections.sh
new file mode 100755
index 0000000..0ee3cd9
--- /dev/null
+++ b/collection/collection/template/generateValueClassCollections.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+
+# To add another value class to generate, add a new value to the end of each of these lists.
+
+# The value class to generate collections for (e.g. Color or Offset).
+valueClasses=(
+  "Color"
+)
+
+# The destination package for the collection classes.
+targetPackages=(
+  "androidx.compose.ui.graphics"
+)
+
+# The backing field in the value class that converts it to a primitive (e.g. packedValue).
+backingProperties=(
+  "value.toLong()"
+)
+
+# The primitive type of the backing list (e.g. Long or Float)
+backingPrimitives=(
+  "Long"
+)
+
+# An operation done on the primitive to convert to the value class parameter
+toParams=(
+  ".toULong()"
+)
+
+# The visibility of the top-level classes and functions (e.g. public or internal)
+visibilities=(
+  "public"
+)
+
+# The package in which the value class resides (e.g. androidx.compose.ui.ui.collection).
+valuePackages=(
+  "androidx.compose.ui.graphics"
+)
+
+# Where the resulting files are output, relative to the directory this script is in.
+outputDirectories=(
+  "../../../compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics"
+)
+
+scriptDir=$(dirname "${PWD}/${0}")
+
+for index in "${!valueClasses[@]}"
+do
+  class=${valueClasses[$index]}
+  targetPackage=${targetPackages[$index]}
+  backingProperty=${backingProperties[$index]}
+  backingPrimitive=${backingPrimitives[$index]}
+  toParam=${toParams[$index]}
+  visibility=${visibilities[$index]}
+  valuePackage=${valuePackages[$index]}
+  outputDirectory=${outputDirectories[$index]}
+
+  firstLower=$(echo "${class:0:1}" | tr '[:upper:]' '[:lower:]')
+  lowerCaseClass="${firstLower}${class:1}"
+
+  outputSetPath=$(realpath "${scriptDir}/${outputDirectory}/${class}Set.kt")
+  echo "generating ${outputSetPath}"
+  sed -e "s/PACKAGE/${targetPackage}/" -e "s/VALUE_CLASS/${class}/g" \
+    -e "s/vALUE_CLASS/${lowerCaseClass}/g" -e "s/BACKING_PROPERTY/${backingProperty}/g" \
+    -e "s/PRIMITIVE/${backingPrimitive}/g" -e "s/TO_PARAM/${toParam}/g" \
+    -e "s/VALUE_PKG/${valuePackage}/g" -e "s/VISIBILITY/${visibility}/g" \
+    "${scriptDir}/ValueClassSet.kt.template" \
+    > "${outputSetPath}"
+
+  outputListPath=$(realpath "${scriptDir}/${outputDirectory}/${class}List.kt")
+  echo "generating ${outputListPath}"
+  sed -e "s/PACKAGE/${targetPackage}/" -e "s/VALUE_CLASS/${class}/g" \
+    -e "s/vALUE_CLASS/${lowerCaseClass}/g" -e "s/BACKING_PROPERTY/${backingProperty}/g" \
+    -e "s/PRIMITIVE/${backingPrimitive}/g" -e "s/TO_PARAM/${toParam}/g" \
+    -e "s/VALUE_PKG/${valuePackage}/g" -e "s/VISIBILITY/${visibility}/g" \
+    "${scriptDir}/ValueClassList.kt.template" \
+    > "${outputListPath}"
+done
diff --git a/compose/animation/animation-core/build.gradle b/compose/animation/animation-core/build.gradle
index 9547fc0..09f7c49 100644
--- a/compose/animation/animation-core/build.gradle
+++ b/compose/animation/animation-core/build.gradle
@@ -99,10 +99,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/animation/animation-graphics/build.gradle b/compose/animation/animation-graphics/build.gradle
index 9126638..4eae2cb 100644
--- a/compose/animation/animation-graphics/build.gradle
+++ b/compose/animation/animation-graphics/build.gradle
@@ -104,10 +104,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/animation/animation/build.gradle b/compose/animation/animation/build.gradle
index 929927e..ba9d7f0 100644
--- a/compose/animation/animation/build.gradle
+++ b/compose/animation/animation/build.gradle
@@ -101,10 +101,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt b/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
index 67921dc..2f62fcb 100644
--- a/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
+++ b/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
@@ -36,8 +36,8 @@
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.material3.Scaffold
+import androidx.compose.material3.SecondaryTabRow
 import androidx.compose.material3.Surface
-import androidx.compose.material3.TabRow
 import androidx.compose.material3.Text
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.DisposableEffect
@@ -597,7 +597,7 @@
                         topBar = {},
                         floatingActionButton = {}
                     ) {
-                        TabRow(selectedTabIndex = 0) {
+                        SecondaryTabRow(selectedTabIndex = 0) {
                             repeat(15) {
                                 Text(it.toString(), Modifier.width(100.dp))
                             }
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
index 56f2f39..fe41bf6 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
@@ -387,8 +387,10 @@
                     return 123
                   }
               }
-              val g = object {
-                fun H() { }
+              val g = <block>{
+                object {
+                  fun H() { }
+                }
               }
             }
             fun I(block: Function0<Unit>) {
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
index 2eaec85..b7e808b 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
@@ -1710,28 +1710,30 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val y = val tmp0_subject = x
-              when {
-                tmp0_subject == 0 -> {
-                  %composer.startReplaceableGroup(<>)
-                  sourceInformation(%composer, "<R(a)>")
-                  val tmp0_group = R(a, %composer, 0)
-                  %composer.endReplaceableGroup()
-                  tmp0_group
-                }
-                tmp0_subject == 0b0001 -> {
-                  %composer.startReplaceableGroup(<>)
-                  sourceInformation(%composer, "<R(b)>")
-                  val tmp1_group = R(b, %composer, 0)
-                  %composer.endReplaceableGroup()
-                  tmp1_group
-                }
-                else -> {
-                  %composer.startReplaceableGroup(<>)
-                  sourceInformation(%composer, "<R(c)>")
-                  val tmp2_group = R(c, %composer, 0)
-                  %composer.endReplaceableGroup()
-                  tmp2_group
+              val y = <block>{
+                val tmp0_subject = x
+                when {
+                  tmp0_subject == 0 -> {
+                    %composer.startReplaceableGroup(<>)
+                    sourceInformation(%composer, "<R(a)>")
+                    val tmp0_group = R(a, %composer, 0)
+                    %composer.endReplaceableGroup()
+                    tmp0_group
+                  }
+                  tmp0_subject == 0b0001 -> {
+                    %composer.startReplaceableGroup(<>)
+                    sourceInformation(%composer, "<R(b)>")
+                    val tmp1_group = R(b, %composer, 0)
+                    %composer.endReplaceableGroup()
+                    tmp1_group
+                  }
+                  else -> {
+                    %composer.startReplaceableGroup(<>)
+                    sourceInformation(%composer, "<R(c)>")
+                    val tmp2_group = R(c, %composer, 0)
+                    %composer.endReplaceableGroup()
+                    tmp2_group
+                  }
                 }
               }
               if (isTraceInProgress()) {
@@ -2002,16 +2004,18 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val y = val <elvis> = x
-              val tmp0_group = when {
-                <elvis> == null -> {
-                  R(%composer, 0)
+              val y = <block>{
+                val <elvis> = x
+                val tmp0_group = when {
+                  <elvis> == null -> {
+                    R(%composer, 0)
+                  }
+                  else -> {
+                    <elvis>
+                  }
                 }
-                else -> {
-                  <elvis>
-                }
+                tmp0_group
               }
-              tmp0_group
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -3794,12 +3798,13 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val y =
-              %composer.startMovableGroup(<>, x)
-              sourceInformation(%composer, "<R()>")
-              val tmp0 = R(%composer, 0)
-              %composer.endMovableGroup()
-              tmp0
+              val y = <block>{
+                %composer.startMovableGroup(<>, x)
+                sourceInformation(%composer, "<R()>")
+                val tmp0 = R(%composer, 0)
+                %composer.endMovableGroup()
+                tmp0
+              }
               P(y, %composer, 0)
               if (isTraceInProgress()) {
                 traceEventEnd()
@@ -3830,22 +3835,23 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val tmp0 =
-              val tmp4_group = if (x > 0) {
-                val tmp3_group = if (%composer.startReplaceableGroup(<>)
-                sourceInformation(%composer, "<B()>")
-                val tmp1_group = B(%composer, 0)
-                %composer.endReplaceableGroup()
-                tmp1_group) 1 else if (%composer.startReplaceableGroup(<>)
-                sourceInformation(%composer, "<B()>")
-                val tmp2_group = B(%composer, 0)
-                %composer.endReplaceableGroup()
-                tmp2_group) 2 else 3
-                tmp3_group
-              } else {
-                4
+              val tmp0 = <block>{
+                val tmp4_group = if (x > 0) {
+                  val tmp3_group = if (%composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "<B()>")
+                  val tmp1_group = B(%composer, 0)
+                  %composer.endReplaceableGroup()
+                  tmp1_group) 1 else if (%composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "<B()>")
+                  val tmp2_group = B(%composer, 0)
+                  %composer.endReplaceableGroup()
+                  tmp2_group) 2 else 3
+                  tmp3_group
+                } else {
+                  4
+                }
+                tmp4_group
               }
-              tmp4_group
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -4151,13 +4157,14 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val tmp0 =
-              val tmp1_group = x.let { it: Int ->
-                A(%composer, 0)
-                val tmp0_return = 123
-                tmp0_return
+              val tmp0 = <block>{
+                val tmp1_group = x.let { it: Int ->
+                  A(%composer, 0)
+                  val tmp0_return = 123
+                  tmp0_return
+                }
+                tmp1_group
               }
-              tmp1_group
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -6195,17 +6202,19 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                Test(%composer.startReplaceableGroup(<>)
-                sourceInformation(%composer, "<rememb...>")
-                val tmp0_group = if (param == null) {
-                  remember({
-                    ""
-                  }, %composer, 0)
-                } else {
-                  null
-                }
-                %composer.endReplaceableGroup()
-                tmp0_group, %composer, 0)
+                Test(<block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "<rememb...>")
+                  val tmp0_group = if (param == null) {
+                    remember({
+                      ""
+                    }, %composer, 0)
+                  } else {
+                    null
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }, %composer, 0)
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -6249,25 +6258,29 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val tmp0 = Test(%composer.startReplaceableGroup(<>)
-              sourceInformation(%composer, "<Test(>")
-              val tmp2_group = if (param == null) {
-                Test(%composer.startReplaceableGroup(<>)
-                sourceInformation(%composer, "<rememb...>")
-                val tmp1_group = if (param == null) {
-                  remember({
-                    ""
+              val tmp0 = Test(<block>{
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "<Test(>")
+                val tmp2_group = if (param == null) {
+                  Test(<block>{
+                    %composer.startReplaceableGroup(<>)
+                    sourceInformation(%composer, "<rememb...>")
+                    val tmp1_group = if (param == null) {
+                      remember({
+                        ""
+                      }, %composer, 0)
+                    } else {
+                      null
+                    }
+                    %composer.endReplaceableGroup()
+                    tmp1_group
                   }, %composer, 0)
                 } else {
                   null
                 }
                 %composer.endReplaceableGroup()
-                tmp1_group, %composer, 0)
-              } else {
-                null
-              }
-              %composer.endReplaceableGroup()
-              tmp2_group, %composer, 0)
+                tmp2_group
+              }, %composer, 0)
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
index 7ae8e40..17edcd0 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -332,33 +332,35 @@
         """
             fun Example(a: A) {
               used(a)
-              Example(class <no name provided> : A {
-                @Composable
-                override fun compute(it: Int, %composer: Composer?, %changed: Int) {
-                  %composer = %composer.startRestartGroup(<>)
-                  sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
-                  val %dirty = %changed
-                  if (%changed and 0b1110 === 0) {
-                    %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
-                  }
-                  if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
-                    if (isTraceInProgress()) {
-                      traceEventStart(<>, %dirty, -1, <>)
+              Example(<block>{
+                class <no name provided> : A {
+                  @Composable
+                  override fun compute(it: Int, %composer: Composer?, %changed: Int) {
+                    %composer = %composer.startRestartGroup(<>)
+                    sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
+                    val %dirty = %changed
+                    if (%changed and 0b1110 === 0) {
+                      %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
                     }
-                    a.compute(it, %composer, 0b1110 and %dirty)
-                    if (isTraceInProgress()) {
-                      traceEventEnd()
+                    if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+                      if (isTraceInProgress()) {
+                        traceEventStart(<>, %dirty, -1, <>)
+                      }
+                      a.compute(it, %composer, 0b1110 and %dirty)
+                      if (isTraceInProgress()) {
+                        traceEventEnd()
+                      }
+                    } else {
+                      %composer.skipToGroupEnd()
                     }
-                  } else {
-                    %composer.skipToGroupEnd()
-                  }
-                  val tmp0_rcvr = <this>
-                  %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+                    val tmp0_rcvr = <this>
+                    %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                      tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+                    }
                   }
                 }
-              }
-              <no name provided>())
+                <no name provided>()
+              })
             }
         """
     )
@@ -423,27 +425,29 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
-                Button(class <no name provided> : ButtonColors {
-                  @Composable
-                  override fun getColor(%composer: Composer?, %changed: Int): Color {
-                    %composer.startReplaceableGroup(<>)
-                    sourceInformation(%composer, "C(getColor)<condit...>:Test.kt")
-                    if (isTraceInProgress()) {
-                      traceEventStart(<>, %changed, -1, <>)
+                Button(<block>{
+                  class <no name provided> : ButtonColors {
+                    @Composable
+                    override fun getColor(%composer: Composer?, %changed: Int): Color {
+                      %composer.startReplaceableGroup(<>)
+                      sourceInformation(%composer, "C(getColor)<condit...>:Test.kt")
+                      if (isTraceInProgress()) {
+                        traceEventStart(<>, %changed, -1, <>)
+                      }
+                      val tmp0 = if (condition(%composer, 0)) {
+                        Companion.Red
+                      } else {
+                        Companion.Blue
+                      }
+                      if (isTraceInProgress()) {
+                        traceEventEnd()
+                      }
+                      %composer.endReplaceableGroup()
+                      return tmp0
                     }
-                    val tmp0 = if (condition(%composer, 0)) {
-                      Companion.Red
-                    } else {
-                      Companion.Blue
-                    }
-                    if (isTraceInProgress()) {
-                      traceEventEnd()
-                    }
-                    %composer.endReplaceableGroup()
-                    return tmp0
                   }
-                }
-                <no name provided>(), %composer, 0)
+                  <no name provided>()
+                }, %composer, 0)
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -1147,7 +1151,9 @@
                   if (isTraceInProgress()) {
                     traceEventStart(<>, %changed, -1, <>)
                   }
-                  val id = object
+                  val id = <block>{
+                    object
+                  }
                   if (isTraceInProgress()) {
                     traceEventEnd()
                   }
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
index dc95588..e454cb2 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
@@ -81,33 +81,35 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
-                Test(class <no name provided> : TestContent {
-                  @Composable
-                  override fun Content(%this%Test: String, %composer: Composer?, %changed: Int) {
-                    %composer = %composer.startRestartGroup(<>)
-                    sourceInformation(%composer, "C(Content):Test.kt")
-                    val %dirty = %changed
-                    if (%changed and 0b1110 === 0) {
-                      %dirty = %dirty or if (%composer.changed(%this%Test)) 0b0100 else 0b0010
-                    }
-                    if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
-                      if (isTraceInProgress()) {
-                        traceEventStart(<>, %dirty, -1, <>)
+                Test(<block>{
+                  class <no name provided> : TestContent {
+                    @Composable
+                    override fun Content(%this%Test: String, %composer: Composer?, %changed: Int) {
+                      %composer = %composer.startRestartGroup(<>)
+                      sourceInformation(%composer, "C(Content):Test.kt")
+                      val %dirty = %changed
+                      if (%changed and 0b1110 === 0) {
+                        %dirty = %dirty or if (%composer.changed(%this%Test)) 0b0100 else 0b0010
                       }
-                      %this%Test.length
-                      if (isTraceInProgress()) {
-                        traceEventEnd()
+                      if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+                        if (isTraceInProgress()) {
+                          traceEventStart(<>, %dirty, -1, <>)
+                        }
+                        %this%Test.length
+                        if (isTraceInProgress()) {
+                          traceEventEnd()
+                        }
+                      } else {
+                        %composer.skipToGroupEnd()
                       }
-                    } else {
-                      %composer.skipToGroupEnd()
-                    }
-                    val tmp0_rcvr = <this>
-                    %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                      tmp0_rcvr.Content(%this%Test, %composer, updateChangedFlags(%changed or 0b0001))
+                      val tmp0_rcvr = <this>
+                      %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                        tmp0_rcvr.Content(%this%Test, %composer, updateChangedFlags(%changed or 0b0001))
+                      }
                     }
                   }
-                }
-                <no name provided>(), %composer, 0)
+                  <no name provided>()
+                }, %composer, 0)
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -186,33 +188,35 @@
               abstract fun compute(value: Int, %composer: Composer?, %changed: Int)
             }
             fun Example(a: A) {
-              Example(class <no name provided> : A {
-                @Composable
-                override fun compute(it: Int, %composer: Composer?, %changed: Int) {
-                  %composer = %composer.startRestartGroup(<>)
-                  sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
-                  val %dirty = %changed
-                  if (%changed and 0b1110 === 0) {
-                    %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
-                  }
-                  if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
-                    if (isTraceInProgress()) {
-                      traceEventStart(<>, %dirty, -1, <>)
+              Example(<block>{
+                class <no name provided> : A {
+                  @Composable
+                  override fun compute(it: Int, %composer: Composer?, %changed: Int) {
+                    %composer = %composer.startRestartGroup(<>)
+                    sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
+                    val %dirty = %changed
+                    if (%changed and 0b1110 === 0) {
+                      %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
                     }
-                    a.compute(it, %composer, 0b1110 and %dirty)
-                    if (isTraceInProgress()) {
-                      traceEventEnd()
+                    if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+                      if (isTraceInProgress()) {
+                        traceEventStart(<>, %dirty, -1, <>)
+                      }
+                      a.compute(it, %composer, 0b1110 and %dirty)
+                      if (isTraceInProgress()) {
+                        traceEventEnd()
+                      }
+                    } else {
+                      %composer.skipToGroupEnd()
                     }
-                  } else {
-                    %composer.skipToGroupEnd()
-                  }
-                  val tmp0_rcvr = <this>
-                  %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+                    val tmp0_rcvr = <this>
+                    %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                      tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+                    }
                   }
                 }
-              }
-              <no name provided>())
+                <no name provided>()
+              })
             }
         """
     )
@@ -247,33 +251,35 @@
               static val %stable: Int = 0
             }
             fun test() {
-              Repro().test(class <no name provided> : Consumer<Any?> {
-                @Composable
-                override fun consume(string: String, %composer: Composer?, %changed: Int) {
-                  %composer = %composer.startRestartGroup(<>)
-                  sourceInformation(%composer, "C(consume):Test.kt")
-                  val %dirty = %changed
-                  if (%changed and 0b1110 === 0) {
-                    %dirty = %dirty or if (%composer.changed(string)) 0b0100 else 0b0010
-                  }
-                  if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
-                    if (isTraceInProgress()) {
-                      traceEventStart(<>, %dirty, -1, <>)
+              Repro().test(<block>{
+                class <no name provided> : Consumer<Any?> {
+                  @Composable
+                  override fun consume(string: String, %composer: Composer?, %changed: Int) {
+                    %composer = %composer.startRestartGroup(<>)
+                    sourceInformation(%composer, "C(consume):Test.kt")
+                    val %dirty = %changed
+                    if (%changed and 0b1110 === 0) {
+                      %dirty = %dirty or if (%composer.changed(string)) 0b0100 else 0b0010
                     }
-                    println(string)
-                    if (isTraceInProgress()) {
-                      traceEventEnd()
+                    if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+                      if (isTraceInProgress()) {
+                        traceEventStart(<>, %dirty, -1, <>)
+                      }
+                      println(string)
+                      if (isTraceInProgress()) {
+                        traceEventEnd()
+                      }
+                    } else {
+                      %composer.skipToGroupEnd()
                     }
-                  } else {
-                    %composer.skipToGroupEnd()
-                  }
-                  val tmp0_rcvr = <this>
-                  %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    tmp0_rcvr.consume(string, %composer, updateChangedFlags(%changed or 0b0001))
+                    val tmp0_rcvr = <this>
+                    %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                      tmp0_rcvr.consume(string, %composer, updateChangedFlags(%changed or 0b0001))
+                    }
                   }
                 }
-              }
-              <no name provided>())
+                <no name provided>()
+              })
             }
         """
     )
@@ -418,29 +424,31 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
-                Example(class <no name provided> : Consumer {
-                  @Composable
-                  override fun invoke(<unused var>: Int, %composer: Composer?, %changed: Int) {
-                    %composer = %composer.startRestartGroup(<>)
-                    sourceInformation(%composer, "C(invoke):Test.kt")
-                    if (%changed and 0b0001 !== 0 || !%composer.skipping) {
-                      if (isTraceInProgress()) {
-                        traceEventStart(<>, %changed, -1, <>)
+                Example(<block>{
+                  class <no name provided> : Consumer {
+                    @Composable
+                    override fun invoke(<unused var>: Int, %composer: Composer?, %changed: Int) {
+                      %composer = %composer.startRestartGroup(<>)
+                      sourceInformation(%composer, "C(invoke):Test.kt")
+                      if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+                        if (isTraceInProgress()) {
+                          traceEventStart(<>, %changed, -1, <>)
+                        }
+                        Unit
+                        if (isTraceInProgress()) {
+                          traceEventEnd()
+                        }
+                      } else {
+                        %composer.skipToGroupEnd()
                       }
-                      Unit
-                      if (isTraceInProgress()) {
-                        traceEventEnd()
+                      val tmp0_rcvr = <this>
+                      %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                        tmp0_rcvr.invoke(<unused var>, %composer, updateChangedFlags(%changed or 0b0001))
                       }
-                    } else {
-                      %composer.skipToGroupEnd()
-                    }
-                    val tmp0_rcvr = <this>
-                    %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                      tmp0_rcvr.invoke(<unused var>, %composer, updateChangedFlags(%changed or 0b0001))
                     }
                   }
-                }
-                <no name provided>(), %composer, 0)
+                  <no name provided>()
+                }, %composer, 0)
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
index 606659a..7088bdb 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
@@ -82,24 +82,35 @@
             @NonRestartableComposable
             fun app(x: Boolean, %composer: Composer?, %changed: Int) {
               %composer.startReplaceableGroup(<>)
-              sourceInformation(%composer, "C(app)<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(app):Test.kt")
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val a = %composer.startReplaceableGroup(<>)
-              sourceInformation(%composer, "<rememb...>")
-              val tmp0_group = if (x) {
-                remember({
-                  1
-                }, %composer, 0)
-              } else {
-                2
+              val a = <block>{
+                %composer.startReplaceableGroup(<>)
+                val tmp1_group = if (x) {
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(app):Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    1
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                } else {
+                  2
+                }
+                %composer.endReplaceableGroup()
+                tmp1_group
               }
-              %composer.endReplaceableGroup()
-              tmp0_group
-              val b = remember({
-                2
-              }, %composer, 0)
+              val b = <block>{
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "C(app):Test.kt")
+                val tmp2_group = %composer.cache(false) {
+                  2
+                }
+                %composer.endReplaceableGroup()
+                tmp2_group
+              }
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -139,8 +150,14 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val deferred = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(key) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(pendingResource) || %changed and 0b00110000 === 0b00100000 or %changed and 0b001110000000 xor 0b000110000000 > 256 && %composer.changed(failedResource) || %changed and 0b000110000000 === 0b000100000000) {
-                123
+              val deferred = <block>{
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "C(loadResourceInternal)P(1,2):Test.kt")
+                val tmp1_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(key) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(pendingResource) || %changed and 0b00110000 === 0b00100000 or %changed and 0b001110000000 xor 0b000110000000 > 256 && %composer.changed(failedResource) || %changed and 0b000110000000 === 0b000100000000) {
+                  123
+                }
+                %composer.endReplaceableGroup()
+                tmp1_group
               }
               val tmp0 = deferred > 10
               if (isTraceInProgress()) {
@@ -186,9 +203,13 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                %composer.cache(%dirty and 0b1110 === 0b0100) {
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "C(test1):Test.kt")
+                val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
                   1
                 }
+                %composer.endReplaceableGroup()
+                tmp0_group
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -206,9 +227,13 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              %composer.cache(%composer.changed(x)) {
+              %composer.startReplaceableGroup(<>)
+              sourceInformation(%composer, "C(test2):Test.kt")
+              val tmp0_group = %composer.cache(%composer.changed(x)) {
                 1
               }
+              %composer.endReplaceableGroup()
+              tmp0_group
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -228,9 +253,13 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                %composer.cache(%dirty and 0b1110 === 0b0100 || %dirty and 0b1000 !== 0 && %composer.changed(x)) {
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "C(test3):Test.kt")
+                val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 || %dirty and 0b1000 !== 0 && %composer.changed(x)) {
                   1
                 }
+                %composer.endReplaceableGroup()
+                tmp0_group
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -279,9 +308,13 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
+              %composer.startReplaceableGroup(<>)
+              sourceInformation(%composer, "C(test1):Test.kt")
+              val tmp0_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
                 1
               }
+              %composer.endReplaceableGroup()
+              tmp0_group
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -295,9 +328,13 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              %composer.cache(%composer.changed(x)) {
+              %composer.startReplaceableGroup(<>)
+              sourceInformation(%composer, "C(test2):Test.kt")
+              val tmp0_group = %composer.cache(%composer.changed(x)) {
                 1
               }
+              %composer.endReplaceableGroup()
+              tmp0_group
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -311,9 +348,13 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
+              %composer.startReplaceableGroup(<>)
+              sourceInformation(%composer, "C(test3):Test.kt")
+              val tmp0_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
                 1
               }
+              %composer.endReplaceableGroup()
+              tmp0_group
               if (isTraceInProgress()) {
                 traceEventEnd()
               }
@@ -339,8 +380,14 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val tmp0 = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(b) || %changed and 0b00110000 === 0b00100000) {
-                Foo(a, b)
+              val tmp0 = <block>{
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "C(rememberFoo):Test.kt")
+                val tmp1_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(b) || %changed and 0b00110000 === 0b00100000) {
+                  Foo(a, b)
+                }
+                %composer.endReplaceableGroup()
+                tmp1_group
               }
               if (isTraceInProgress()) {
                 traceEventEnd()
@@ -370,21 +417,39 @@
             @Composable
             fun Test(%composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               if (%changed !== 0 || !%composer.skipping) {
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
-                val foo = %composer.cache(false) {
-                  Foo()
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
-                val bar = %composer.cache(false) {
-                  Foo()
+                val bar = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp1_group = %composer.cache(false) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp1_group
                 }
                 A(%composer, 0)
-                val bam = remember({
-                  Foo()
-                }, %composer, 0)
+                val bam = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp2_group = %composer.cache(false) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp2_group
+                }
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -423,8 +488,14 @@
                 }
                 val a = someInt()
                 val b = someInt()
-                val foo = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
-                  Foo(a, b)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
+                    Foo(a, b)
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -455,14 +526,20 @@
             @Composable
             fun Test(%composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<CInt()...>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               if (%changed !== 0 || !%composer.skipping) {
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
-                val foo = remember(CInt(%composer, 0), {
-                  Foo()
-                }, %composer, 0)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<CInt()...>:Test.kt")
+                  val tmp0_group = %composer.cache(%composer.changed(CInt(%composer, 0))) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -496,15 +573,21 @@
             @Composable
             fun Test(%composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<curren...>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               if (%changed !== 0 || !%composer.skipping) {
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
                 val bar = compositionLocalBar.<get-current>(%composer, 0b0110)
-                val foo = remember(bar, {
-                  Foo()
-                }, %composer, 0)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<curren...>:Test.kt")
+                  val tmp0_group = %composer.cache(%composer.changed(bar)) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -537,14 +620,20 @@
             @Composable
             fun Test(%composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<curren...>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               if (%changed !== 0 || !%composer.skipping) {
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
-                val foo = remember(compositionLocalBar.<get-current>(%composer, 0b0110), {
-                  Foo()
-                }, %composer, 0)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<curren...>:Test.kt")
+                  val tmp0_group = %composer.cache(%composer.changed(compositionLocalBar.<get-current>(%composer, 0b0110))) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -575,15 +664,21 @@
             @Composable
             fun Test(%composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               if (%changed !== 0 || !%composer.skipping) {
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
                 A(%composer, 0)
-                val foo = remember({
-                  Foo()
-                }, %composer, 0)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -616,7 +711,7 @@
             @Composable
             fun Test(condition: Boolean, %composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
               if (%changed and 0b1110 === 0) {
                 %dirty = %dirty or if (%composer.changed(condition)) 0b0100 else 0b0010
@@ -627,9 +722,15 @@
                 }
                 A(%composer, 0)
                 if (condition) {
-                  val foo = remember({
-                    Foo()
-                  }, %composer, 0)
+                  val foo = <block>{
+                    %composer.startReplaceableGroup(<>)
+                    sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+                    val tmp0_group = %composer.cache(false) {
+                      Foo()
+                    }
+                    %composer.endReplaceableGroup()
+                    tmp0_group
+                  }
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -663,7 +764,7 @@
             @Composable
             fun Test(condition: Boolean, %composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
               if (%changed and 0b1110 === 0) {
                 %dirty = %dirty or if (%composer.changed(condition)) 0b0100 else 0b0010
@@ -674,9 +775,15 @@
                 }
                 if (condition) {
                   A(%composer, 0)
-                  val foo = remember({
-                    Foo()
-                  }, %composer, 0)
+                  val foo = <block>{
+                    %composer.startReplaceableGroup(<>)
+                    sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+                    val tmp0_group = %composer.cache(false) {
+                      Foo()
+                    }
+                    %composer.endReplaceableGroup()
+                    tmp0_group
+                  }
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -710,16 +817,22 @@
             @Composable
             fun Test(items: List<Int>, %composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)*<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
               val <iterator> = items.iterator()
               while (<iterator>.hasNext()) {
                 val item = <iterator>.next()
-                val foo = remember({
-                  Foo()
-                }, %composer, 0)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 print(foo)
                 print(item)
               }
@@ -754,16 +867,22 @@
             @Composable
             fun Test(items: List<Int>, %composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)*<rememb...>,<A()>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
               val <iterator> = items.iterator()
               while (<iterator>.hasNext()) {
                 val item = <iterator>.next()
-                val foo = remember({
-                  Foo()
-                }, %composer, 0)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)*<A()>:Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 A(%composer, 0)
                 print(foo)
                 print(item)
@@ -798,8 +917,14 @@
               if (isTraceInProgress()) {
                 traceEventStart(<>, %changed, -1, <>)
               }
-              val foo = %composer.cache(false) {
-                Foo()
+              val foo = <block>{
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "C(Test):Test.kt")
+                val tmp0_group = %composer.cache(false) {
+                  Foo()
+                }
+                %composer.endReplaceableGroup()
+                tmp0_group
               }
               used(items)
               if (isTraceInProgress()) {
@@ -846,8 +971,14 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                val foo = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000 or %dirty and 0b0001110000000000 === 0b100000000000) {
-                  Foo()
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000 or %dirty and 0b0001110000000000 === 0b100000000000) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -922,8 +1053,14 @@
                   traceEventStart(<>, %dirty, -1, <>)
                 }
                 val a = InlineInt(123)
-                val foo = %composer.cache(%dirty and 0b1110 === 0b0100) {
-                  Foo()
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)P(0:InlineInt):Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -966,13 +1103,25 @@
                 }
                 val a = someInt()
                 val b = someInt()
-                val foo = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
-                  Foo(a, b)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
+                    Foo(a, b)
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
                 val c = someInt()
                 val d = someInt()
-                val bar = %composer.cache(%composer.changed(c) or %composer.changed(d)) {
-                  Foo(c, d)
+                val bar = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp1_group = %composer.cache(%composer.changed(c) or %composer.changed(d)) {
+                    Foo(c, d)
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp1_group
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -1014,8 +1163,14 @@
                   traceEventStart(<>, %dirty, -1, <>)
                 }
                 val b = someInt()
-                val foo = %composer.cache(%dirty and 0b1110 === 0b0100 or %composer.changed(b)) {
-                  Foo(a, b)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %composer.changed(b)) {
+                    Foo(a, b)
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -1052,8 +1207,14 @@
                 traceEventStart(<>, %changed, -1, <>)
               }
               val b = someInt()
-              val tmp0 = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %composer.changed(b)) {
-                Foo(a, b)
+              val tmp0 = <block>{
+                %composer.startReplaceableGroup(<>)
+                sourceInformation(%composer, "C(Test):Test.kt")
+                val tmp1_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %composer.changed(b)) {
+                  Foo(a, b)
+                }
+                %composer.endReplaceableGroup()
+                tmp1_group
               }
               if (isTraceInProgress()) {
                 traceEventEnd()
@@ -1086,12 +1247,17 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                used(%composer.cache(%dirty and 0b1110 === 0b0100) {
-                  {
-                    a
+                used(<block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
+                    {
+                      a
+                    }
                   }
-                }
-                )
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                })
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -1129,7 +1295,13 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                used(%composer.cache(%dirty and 0b1110 === 0b0100, effect))
+                used(<block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100, effect)
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                })
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -1167,10 +1339,15 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                used(%composer.cache(%dirty and 0b1110 === 0b0100) {
-                  effect()
-                }
-                )
+                used(<block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
+                    effect()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                })
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -1207,7 +1384,13 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                used(%composer.cache(%dirty and 0b1110 === 0b0100, a::value))
+                used(<block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100, a::value)
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                })
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
@@ -1239,7 +1422,7 @@
             @Composable
             fun Test(a: Int, %composer: Composer?, %changed: Int, %default: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
               if (%changed and 0b1110 === 0) {
                 %dirty = %dirty or if (%default and 0b0001 === 0 && %composer.changed(a)) 0b0100 else 0b0010
@@ -1261,9 +1444,15 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                val foo = remember({
-                  Foo()
-                }, %composer, 0)
+                val foo = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    Foo()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 used(foo)
                 used(a)
                 if (isTraceInProgress()) {
@@ -1294,17 +1483,31 @@
               %composer = %composer.startRestartGroup(<>)
               sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
-              if (%default and 0b0001 !== 0) {
-                %dirty = %dirty or 0b0110
-              } else if (%changed and 0b1110 === 0) {
-                %dirty = %dirty or if (%composer.changed(a)) 0b0100 else 0b0010
+              if (%changed and 0b1110 === 0) {
+                %dirty = %dirty or if (%default and 0b0001 === 0 && %composer.changed(a)) 0b0100 else 0b0010
               }
               if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
-                if (%default and 0b0001 !== 0) {
-                  a = %composer.cache(false) {
-                    0
+                %composer.startDefaults()
+                if (%changed and 0b0001 === 0 || %composer.defaultsInvalid) {
+                  if (%default and 0b0001 !== 0) {
+                    a = <block>{
+                      %composer.startReplaceableGroup(<>)
+                      sourceInformation(%composer, "C(Test):Test.kt")
+                      val tmp0_group = %composer.cache(false) {
+                        0
+                      }
+                      %composer.endReplaceableGroup()
+                      tmp0_group
+                    }
+                    %dirty = %dirty and 0b1110.inv()
+                  }
+                } else {
+                  %composer.skipToGroupEnd()
+                  if (%default and 0b0001 !== 0) {
+                    %dirty = %dirty and 0b1110.inv()
                   }
                 }
+                %composer.endDefaults()
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
@@ -1340,43 +1543,59 @@
             @Composable
             fun Test(a: Int, b: Int, c: Int, %composer: Composer?, %changed: Int, %default: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<SomeCo...>,<rememb...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
-              if (%default and 0b0001 !== 0) {
-                %dirty = %dirty or 0b0110
-              } else if (%changed and 0b1110 === 0) {
-                %dirty = %dirty or if (%composer.changed(a)) 0b0100 else 0b0010
+              if (%changed and 0b1110 === 0) {
+                %dirty = %dirty or if (%default and 0b0001 === 0 && %composer.changed(a)) 0b0100 else 0b0010
               }
               if (%changed and 0b01110000 === 0) {
                 %dirty = %dirty or if (%default and 0b0010 === 0 && %composer.changed(b)) 0b00100000 else 0b00010000
               }
-              if (%default and 0b0100 !== 0) {
-                %dirty = %dirty or 0b000110000000
-              } else if (%changed and 0b001110000000 === 0) {
-                %dirty = %dirty or if (%composer.changed(c)) 0b000100000000 else 0b10000000
+              if (%changed and 0b001110000000 === 0) {
+                %dirty = %dirty or if (%default and 0b0100 === 0 && %composer.changed(c)) 0b000100000000 else 0b10000000
               }
               if (%dirty and 0b001011011011 !== 0b10010010 || !%composer.skipping) {
                 %composer.startDefaults()
                 if (%changed and 0b0001 === 0 || %composer.defaultsInvalid) {
                   if (%default and 0b0001 !== 0) {
-                    a = %composer.cache(false) {
-                      0
+                    a = <block>{
+                      %composer.startReplaceableGroup(<>)
+                      sourceInformation(%composer, "C(Test)<SomeCo...>:Test.kt")
+                      val tmp0_group = %composer.cache(false) {
+                        0
+                      }
+                      %composer.endReplaceableGroup()
+                      tmp0_group
                     }
+                    %dirty = %dirty and 0b1110.inv()
                   }
                   if (%default and 0b0010 !== 0) {
                     b = SomeComposable(%composer, 0)
                     %dirty = %dirty and 0b01110000.inv()
                   }
                   if (%default and 0b0100 !== 0) {
-                    c = remember({
-                      0
-                    }, %composer, 0)
+                    c = <block>{
+                      %composer.startReplaceableGroup(<>)
+                      sourceInformation(%composer, "C(Test):Test.kt")
+                      val tmp1_group = %composer.cache(false) {
+                        0
+                      }
+                      %composer.endReplaceableGroup()
+                      tmp1_group
+                    }
+                    %dirty = %dirty and 0b001110000000.inv()
                   }
                 } else {
                   %composer.skipToGroupEnd()
+                  if (%default and 0b0001 !== 0) {
+                    %dirty = %dirty and 0b1110.inv()
+                  }
                   if (%default and 0b0010 !== 0) {
                     %dirty = %dirty and 0b01110000.inv()
                   }
+                  if (%default and 0b0100 !== 0) {
+                    %dirty = %dirty and 0b001110000000.inv()
+                  }
                 }
                 %composer.endDefaults()
                 if (isTraceInProgress()) {
@@ -1427,7 +1646,7 @@
             @Composable
             fun Test(a: Boolean, visible: Boolean, onDismiss: Function0<Unit>, %composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)P(!1,2)<someCo...>,<{>:Test.kt")
+              sourceInformation(%composer, "C(Test)P(!1,2):Test.kt")
               val %dirty = %changed
               if (%changed and 0b1110 === 0) {
                 %dirty = %dirty or if (%composer.changed(a)) 0b0100 else 0b0010
@@ -1446,19 +1665,26 @@
                   val a = someComposableValue(%composer, 0)
                   used(a)
                   val m = Modifier()
-                  val dismissModifier =
-                  val tmp0_group = if (visible) {
-                    m.pointerInput(Unit, remember(onDismiss, {
-                      {
-                        detectTapGestures {
-                          onDismiss()
+                  val dismissModifier = <block>{
+                    val tmp1_group = if (visible) {
+                      m.pointerInput(Unit, <block>{
+                        %composer.startReplaceableGroup(<>)
+                        sourceInformation(%composer, "C(Test)P(!1,2)<someCo...>:Test.kt")
+                        val tmp0_group = %composer.cache(%dirty and 0b001110000000 === 0b000100000000) {
+                          {
+                            detectTapGestures {
+                              onDismiss()
+                            }
+                          }
                         }
-                      }
-                    }, %composer, 0b1110 and %dirty shr 0b0110))
-                  } else {
-                    m
+                        %composer.endReplaceableGroup()
+                        tmp0_group
+                      })
+                    } else {
+                      m
+                    }
+                    tmp1_group
                   }
-                  tmp0_group
                   used(dismissModifier)
                 }
                 if (isTraceInProgress()) {
@@ -1470,7 +1696,8 @@
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
                 Test(a, visible, onDismiss, %composer, updateChangedFlags(%changed or 0b0001))
               }
-            }        """
+            }
+        """
     )
 
     @Test
@@ -1501,7 +1728,7 @@
             @Composable
             fun Test(a: Int, b: Foo?, c: Int, %composer: Composer?, %changed: Int, %default: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<used(s...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
               if (%default and 0b0001 !== 0) {
                 %dirty = %dirty or 0b0110
@@ -1531,8 +1758,14 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                val s = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000) {
-                  Any()
+                val s = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<used(s...>:Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000) {
+                    Any()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
                 used(s, %composer, 0b1000)
                 if (isTraceInProgress()) {
@@ -1575,7 +1808,7 @@
             @Composable
             fun Test(a: Int, b: Foo?, c: Int, %composer: Composer?, %changed: Int, %default: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<rememb...>,<used(s...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
               if (%default and 0b0001 !== 0) {
                 %dirty = %dirty or 0b0110
@@ -1613,9 +1846,15 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                val s = remember(a, b, c, {
-                  Any()
-                }, %composer, 0b1110 and %dirty or 0b01110000 and %dirty or 0b001110000000 and %dirty)
+                val s = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<used(s...>:Test.kt")
+                  val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000) {
+                    Any()
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 used(s, %composer, 0b1000)
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -1647,7 +1886,7 @@
             @Composable
             fun Test(condition: Boolean, %composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<rememb...>,<Text("...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
               if (%changed and 0b1110 === 0) {
                 %dirty = %dirty or if (%composer.changed(condition)) 0b0100 else 0b0010
@@ -1656,10 +1895,16 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                val value = %composer.cache(false) {
-                  mutableStateOf(
-                    value = false
-                  )
+                val value = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<Text("...>:Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    mutableStateOf(
+                      value = false
+                    )
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
                 }
                 if (!value.value && !condition) {
                   if (isTraceInProgress()) {
@@ -1670,11 +1915,17 @@
                   }
                   return
                 }
-                val value2 = remember({
-                  mutableStateOf(
-                    value = false
-                  )
-                }, %composer, 0)
+                val value2 = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test):Test.kt")
+                  val tmp1_group = %composer.cache(false) {
+                    mutableStateOf(
+                      value = false
+                    )
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp1_group
+                }
                 Text("Text %{value.value}, %{value2.value}", %composer, 0)
                 if (isTraceInProgress()) {
                   traceEventEnd()
@@ -1718,7 +1969,7 @@
             @Composable
             fun Test(strings: Array<out String>, %composer: Composer?, %changed: Int) {
               %composer = %composer.startRestartGroup(<>)
-              sourceInformation(%composer, "C(Test)<rememb...>,<Text("...>:Test.kt")
+              sourceInformation(%composer, "C(Test):Test.kt")
               val %dirty = %changed
               %composer.startMovableGroup(<>, strings.size)
               val <iterator> = strings.iterator()
@@ -1734,11 +1985,17 @@
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %dirty, -1, <>)
                 }
-                val show = remember({
-                  mutableStateOf(
-                    value = false
-                  )
-                }, %composer, 0)
+                val show = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  sourceInformation(%composer, "C(Test)<Text("...>:Test.kt")
+                  val tmp0_group = %composer.cache(false) {
+                    mutableStateOf(
+                      value = false
+                    )
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp0_group
+                }
                 if (show.value) {
                   Text("Showing", %composer, 0b0110)
                 }
@@ -1777,29 +2034,37 @@
             val content: Function3<@[ParameterName(name = 'a')] SomeUnstableClass, Composer, Int, Unit> = ComposableSingletons%TestKt.lambda-1
             internal object ComposableSingletons%TestKt {
               val lambda-1: Function3<${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, Composer, Int, Unit> = composableLambdaInstance(<>, false) { it: ${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, %composer: Composer?, %changed: Int ->
-                sourceInformation(%composer, "C<rememb...>:Test.kt")
+                sourceInformation(%composer, "C:Test.kt")
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
                 %composer.startReplaceableGroup(<>)
-                sourceInformation(%composer, "*<rememb...>")
                 val <iterator> = 0 until count.iterator()
                 while (<iterator>.hasNext()) {
                   val index = <iterator>.next()
-                  val i = remember({
-                    index
-                  }, %composer, 0)
+                  val i = <block>{
+                    %composer.startReplaceableGroup(<>)
+                    val tmp0_group = %composer.cache(false) {
+                      index
+                    }
+                    %composer.endReplaceableGroup()
+                    tmp0_group
+                  }
                 }
                 %composer.endReplaceableGroup()
-                val a = remember({
-                  1
-                }, %composer, 0)
+                val a = <block>{
+                  %composer.startReplaceableGroup(<>)
+                  val tmp1_group = %composer.cache(false) {
+                    1
+                  }
+                  %composer.endReplaceableGroup()
+                  tmp1_group
+                }
                 if (isTraceInProgress()) {
                   traceEventEnd()
                 }
               }
             }
-
         """
     )
 
@@ -1824,16 +2089,21 @@
             val content: Function3<@[ParameterName(name = 'a')] SomeUnstableClass, Composer, Int, Unit> = ComposableSingletons%TestKt.lambda-1
             internal object ComposableSingletons%TestKt {
               val lambda-1: Function3<${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, Composer, Int, Unit> = composableLambdaInstance(<>, false) { it: ${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, %composer: Composer?, %changed: Int ->
-                sourceInformation(%composer, "C*<rememb...>:Test.kt")
+                sourceInformation(%composer, "C:Test.kt")
                 if (isTraceInProgress()) {
                   traceEventStart(<>, %changed, -1, <>)
                 }
                 val <iterator> = 0 until count.iterator()
                 while (<iterator>.hasNext()) {
                   val index = <iterator>.next()
-                  val i = remember({
-                    index
-                  }, %composer, 0)
+                  val i = <block>{
+                    %composer.startReplaceableGroup(<>)
+                    val tmp0_group = %composer.cache(false) {
+                      index
+                    }
+                    %composer.endReplaceableGroup()
+                    tmp0_group
+                  }
                 }
                 if (isTraceInProgress()) {
                   traceEventEnd()
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
index 702c1f3..b898d94 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
@@ -452,54 +452,58 @@
             if (isTraceInProgress()) {
               traceEventStart(<>, %changed, -1, <>)
             }
-            OpenCustom(class <no name provided> : CustomComposable {
-              @Composable
-              @ComposableTarget(applier = "UI")
-              override fun call(%composer: Composer?, %changed: Int) {
-                %composer = %composer.startRestartGroup(<>)
-                sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
-                if (%changed and 0b0001 !== 0 || !%composer.skipping) {
-                  if (isTraceInProgress()) {
-                    traceEventStart(<>, %changed, -1, <>)
+            OpenCustom(<block>{
+              class <no name provided> : CustomComposable {
+                @Composable
+                @ComposableTarget(applier = "UI")
+                override fun call(%composer: Composer?, %changed: Int) {
+                  %composer = %composer.startRestartGroup(<>)
+                  sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
+                  if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+                    if (isTraceInProgress()) {
+                      traceEventStart(<>, %changed, -1, <>)
+                    }
+                    Text("Test", %composer, 0b0110)
+                    if (isTraceInProgress()) {
+                      traceEventEnd()
+                    }
+                  } else {
+                    %composer.skipToGroupEnd()
                   }
-                  Text("Test", %composer, 0b0110)
-                  if (isTraceInProgress()) {
-                    traceEventEnd()
+                  val tmp0_rcvr = <this>
+                  %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                    tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
                   }
-                } else {
-                  %composer.skipToGroupEnd()
-                }
-                val tmp0_rcvr = <this>
-                %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
-            }
-            <no name provided>(), %composer, 0)
-            ClosedCustom(class <no name provided> : CustomComposable {
-              @Composable
-              @ComposableTarget(applier = "UI")
-              override fun call(%composer: Composer?, %changed: Int) {
-                %composer = %composer.startRestartGroup(<>)
-                sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
-                if (%changed and 0b0001 !== 0 || !%composer.skipping) {
-                  if (isTraceInProgress()) {
-                    traceEventStart(<>, %changed, -1, <>)
+              <no name provided>()
+            }, %composer, 0)
+            ClosedCustom(<block>{
+              class <no name provided> : CustomComposable {
+                @Composable
+                @ComposableTarget(applier = "UI")
+                override fun call(%composer: Composer?, %changed: Int) {
+                  %composer = %composer.startRestartGroup(<>)
+                  sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
+                  if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+                    if (isTraceInProgress()) {
+                      traceEventStart(<>, %changed, -1, <>)
+                    }
+                    Text("Test", %composer, 0b0110)
+                    if (isTraceInProgress()) {
+                      traceEventEnd()
+                    }
+                  } else {
+                    %composer.skipToGroupEnd()
                   }
-                  Text("Test", %composer, 0b0110)
-                  if (isTraceInProgress()) {
-                    traceEventEnd()
+                  val tmp0_rcvr = <this>
+                  %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                    tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
                   }
-                } else {
-                  %composer.skipToGroupEnd()
-                }
-                val tmp0_rcvr = <this>
-                %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
-            }
-            <no name provided>(), %composer, 0)
+              <no name provided>()
+            }, %composer, 0)
             if (isTraceInProgress()) {
               traceEventEnd()
             }
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index 1b4c6c2f..6eba0bd 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -865,11 +865,6 @@
 
         val emitTraceMarkers = traceEventMarkersEnabled && !scope.function.isInline
 
-        scope.updateIntrinsiceRememberSafety(
-            !mightUseDefaultGroup(false, scope, defaultParam) &&
-                !mightUseVarArgsGroup(false, scope)
-        )
-
         transformed = transformed.apply {
             transformChildrenVoid()
         }
@@ -1012,11 +1007,6 @@
 
         val emitTraceMarkers = traceEventMarkersEnabled && !scope.isInlinedLambda
 
-        scope.updateIntrinsiceRememberSafety(
-            !mightUseDefaultGroup(canSkipExecution, scope, null) &&
-                !mightUseVarArgsGroup(canSkipExecution, scope)
-        )
-
         // we must transform the body first, since that will allow us to see whether or not we
         // are using the dispatchReceiverParameter or the extensionReceiverParameter
         val transformed = nonReturningBody.apply {
@@ -1176,11 +1166,6 @@
 
         val defaultScope = transformDefaults(scope)
 
-        scope.updateIntrinsiceRememberSafety(
-            !mightUseDefaultGroup(true, scope, defaultParam) &&
-                !mightUseVarArgsGroup(true, scope)
-        )
-
         // we must transform the body first, since that will allow us to see whether or not we
         // are using the dispatchReceiverParameter or the extensionReceiverParameter
         val transformed = nonReturningBody.apply {
@@ -2509,7 +2494,7 @@
 
     private fun mutableStatementContainer() = mutableStatementContainer(context)
 
-    private fun encounteredComposableCall(withGroups: Boolean, isCached: Boolean) {
+    private fun encounteredComposableCall(withGroups: Boolean) {
         var scope: Scope? = currentScope
         // it is important that we only report "withGroups: false" for the _nearest_ scope, and
         // every scope above that it effectively means there was a group even if it is false
@@ -2517,14 +2502,14 @@
         loop@ while (scope != null) {
             when (scope) {
                 is Scope.FunctionScope -> {
-                    scope.recordComposableCall(groups, isCached)
+                    scope.recordComposableCall(groups)
                     groups = true
                     if (!scope.isInlinedLambda) {
                         break@loop
                     }
                 }
                 is Scope.BlockScope -> {
-                    scope.recordComposableCall(groups, isCached)
+                    scope.recordComposableCall(groups)
                     groups = true
                 }
                 is Scope.ClassScope -> {
@@ -2637,7 +2622,6 @@
                                 }
                             }
                         }
-                        scope.updateIntrinsiceRememberSafety(false)
                         break@loop
                     }
                     if (scope.isInlinedLambda && scope.inComposableCall) {
@@ -2902,7 +2886,6 @@
 
         encounteredComposableCall(
             withGroups = !expression.symbol.owner.hasReadOnlyAnnotation,
-            isCached = false
         )
 
         val ownerFn = expression.symbol.owner
@@ -3031,36 +3014,7 @@
         } ?: expression
     }
 
-    private fun canElideRememberGroup(): Boolean {
-        var scope: Scope? = currentScope
-        loop@ while (scope != null) {
-            when (scope) {
-                is Scope.FunctionScope -> {
-                    return if (
-                        !scope.isIntrinsiceRememberSafe
-                    ) {
-                        false
-                    } else !scope.isInlinedLambda
-                }
-                is Scope.ParametersScope -> {
-                    return scope.isIntrinsiceRememberSafe
-                }
-                is Scope.CaptureScope -> {
-                    scope = scope.parent
-                    continue
-                }
-                else -> {
-                    // Any other scope type the behavior is undefined and we cannot rely on
-                    // intrinsic behavior
-                    return false
-                }
-            }
-        }
-        return false
-    }
-
     private fun visitRememberCall(expression: IrCall): IrExpression {
-        if (!canElideRememberGroup()) return visitNormalComposableCall(expression)
         val inputArgs = mutableListOf<IrExpression>()
         var hasSpreadArgs = false
         var calculationArg: IrExpression? = null
@@ -3077,6 +3031,7 @@
                 param.name.identifier == "calculation" -> {
                     calculationArg = arg
                 }
+
                 arg is IrVararg -> {
                     inputArgs.addAll(
                         arg.elements.mapNotNull {
@@ -3089,6 +3044,7 @@
                         }
                     )
                 }
+
                 else -> {
                     inputArgs.add(arg)
                 }
@@ -3099,20 +3055,18 @@
             inputArgs[i] = inputArgs[i].transform(this, null)
         }
 
+        encounteredComposableCall(withGroups = true)
+
         if (calculationArg == null) {
-            encounteredComposableCall(withGroups = true, isCached = false)
             recordCallInSource(call = expression)
             return expression
         }
-        if (hasSpreadArgs || !canElideRememberGroup()) {
-            encounteredComposableCall(withGroups = true, isCached = false)
+        if (hasSpreadArgs) {
             recordCallInSource(call = expression)
             calculationArg.transform(this, null)
             return expression
         }
 
-        encounteredComposableCall(withGroups = false, isCached = true)
-
         // Build the change parameters as if this was a call to remember to ensure the
         // use of the $dirty flags are calculated correctly.
         inputArgs.map { paramMetaOf(it, isProvided = true) }.also {
@@ -3127,20 +3081,28 @@
         // We can only rely on the $changed or $dirty if the flags are correctly updated in
         // the restart function or the result of replacing remember with cached will be
         // different.
-        val changedTestFunction = if (updateChangedFlagsFunction == null) ::irChanged
-            else ::irChangedOrInferredChanged
+        val changedTestFunction =
+            if (updateChangedFlagsFunction == null) {
+                ::irChanged
+            } else {
+                ::irChangedOrInferredChanged
+            }
 
         val invalidExpr = inputArgs
             .mapNotNull(changedTestFunction)
             .reduceOrNull { acc, changed -> irBooleanOr(acc, changed) }
             ?: irConst(false)
 
+        val blockScope = currentFunctionScope
         return irCache(
             expression.startOffset,
             expression.endOffset,
             expression.type,
             invalidExpr,
             calculationArg.transform(this, null)
+        ).wrap(
+            before = listOf(irStartReplaceableGroup(expression, blockScope)),
+            after = listOf(irEndReplaceableGroup(scope = blockScope))
         )
     }
 
@@ -3220,7 +3182,7 @@
     }
 
     private fun visitKeyCall(expression: IrCall): IrExpression {
-        encounteredComposableCall(withGroups = true, isCached = false)
+        encounteredComposableCall(withGroups = true)
         val keyArgs = mutableListOf<IrExpression>()
         var blockArg: IrExpression? = null
         for (i in 0 until expression.valueArgumentsCount) {
@@ -4048,14 +4010,11 @@
                 makeEnd?.let { realizeEndCalls(it) }
             }
 
-            fun recordComposableCall(withGroups: Boolean, isCached: Boolean) {
+            fun recordComposableCall(withGroups: Boolean) {
                 hasComposableCalls = true
                 if (withGroups) {
                     hasComposableCallsWithGroups = true
                 }
-                if (isIntrinsiceRememberSafe && (withGroups || !isCached)) {
-                    isIntrinsiceRememberSafe = false
-                }
                 if (coalescableChilds.isNotEmpty()) {
                     // if a call happens after the coalescable child group, then we should
                     // realize the group of the coalescable child
@@ -4153,8 +4112,6 @@
             var hasDefaultsGroup = false
             var hasComposableCallsWithGroups = false
                 private set
-            var isIntrinsiceRememberSafe = true
-                private set
             var hasComposableCalls = false
                 private set
             var hasReturn = false
@@ -4163,11 +4120,6 @@
                 protected set
             private var coalescableChilds = mutableListOf<CoalescableGroupInfo>()
 
-            fun updateIntrinsiceRememberSafety(stillSafe: Boolean) {
-                if (isIntrinsiceRememberSafe && !stillSafe)
-                    isIntrinsiceRememberSafe = false
-            }
-
             class CoalescableGroupInfo(
                 private val scope: BlockScope,
                 private val realizeGroup: () -> Unit,
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
index 841ab83a..23f989c 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
@@ -571,7 +571,7 @@
                             }
                         }
                         else -> {
-                            arg.print()
+                            arg.printWithExplicitBlock()
                         }
                     }
                     if (i < arguments.size - 1) print(", ")
@@ -585,6 +585,18 @@
         }
     }
 
+    fun IrElement.printWithExplicitBlock() {
+        when (this) {
+            is IrBlock -> {
+                println("<block>{")
+                indented { print() }
+                println()
+                print("}")
+            }
+            else -> print()
+        }
+    }
+
     override fun visitFunctionExpression(expression: IrFunctionExpression) {
         expression.function.printAsLambda()
     }
@@ -925,7 +937,7 @@
         print(declaration.normalizedName)
         declaration.initializer?.let {
             print(" = ")
-            it.print()
+            it.printWithExplicitBlock()
         }
     }
 
@@ -968,7 +980,7 @@
         print(type.renderSrc())
         declaration.initializer?.let {
             print(" = ")
-            it.print()
+            it.printWithExplicitBlock()
         }
     }
 
@@ -989,7 +1001,7 @@
         print(".")
         print(expression.symbol.owner.name)
         print(" = ")
-        expression.value.print()
+        expression.value.printWithExplicitBlock()
     }
 
     override fun visitGetEnumValue(expression: IrGetEnumValue) {
@@ -1002,7 +1014,7 @@
     override fun visitSetValue(expression: IrSetValue) {
         print(expression.symbol.owner.normalizedName)
         print(" = ")
-        expression.value.print()
+        expression.value.printWithExplicitBlock()
     }
 
     override fun visitExpressionBody(body: IrExpressionBody) {
diff --git a/compose/compiler/compiler/integration-tests/build.gradle b/compose/compiler/compiler/integration-tests/build.gradle
index 0104b25..1e465c3 100644
--- a/compose/compiler/compiler/integration-tests/build.gradle
+++ b/compose/compiler/compiler/integration-tests/build.gradle
@@ -35,4 +35,6 @@
 testTask.dependsOn(tasks.findByPath(":compose:compiler:compiler:publish"))
 if (!isPlayground(project)) {
     testTask.dependsOn(tasks.findByPath(":compose:runtime:runtime:publish"))
+    testTask.dependsOn(tasks.findByPath(":collection:collection:publish"))
+    testTask.dependsOn(tasks.findByPath(":annotation:annotation:publish"))
 }
diff --git a/compose/foundation/foundation-layout/build.gradle b/compose/foundation/foundation-layout/build.gradle
index 320eead..6fd8ce2 100644
--- a/compose/foundation/foundation-layout/build.gradle
+++ b/compose/foundation/foundation-layout/build.gradle
@@ -96,10 +96,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index f124f8e..88ae47f 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -1,6 +1,30 @@
 // Signature format: 4.0
 package androidx.compose.foundation {
 
+  public final class AndroidExternalSurfaceKt {
+    method @androidx.compose.runtime.Composable public static void AndroidEmbeddedExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+    method @androidx.compose.runtime.Composable public static void AndroidExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+  }
+
+  public interface AndroidExternalSurfaceScope {
+    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
+  }
+
+  @kotlin.jvm.JvmInline public final value class AndroidExternalSurfaceZOrder {
+    method public int getZOrder();
+    property public final int zOrder;
+    field public static final androidx.compose.foundation.AndroidExternalSurfaceZOrder.Companion Companion;
+  }
+
+  public static final class AndroidExternalSurfaceZOrder.Companion {
+    method public int getBehind();
+    method public int getMediaOverlay();
+    method public int getOnTop();
+    property public final int Behind;
+    property public final int MediaOverlay;
+    property public final int OnTop;
+  }
+
   public final class BackgroundKt {
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional @FloatRange(from=0.0, to=1.0) float alpha);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
@@ -111,30 +135,6 @@
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier onFocusedBoundsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPositioned);
   }
 
-  public final class GraphicsSurfaceKt {
-    method @androidx.compose.runtime.Composable public static void EmbeddedGraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-    method @androidx.compose.runtime.Composable public static void GraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-  }
-
-  public interface GraphicsSurfaceScope {
-    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
-  }
-
-  @kotlin.jvm.JvmInline public final value class GraphicsSurfaceZOrder {
-    method public int getZOrder();
-    property public final int zOrder;
-    field public static final androidx.compose.foundation.GraphicsSurfaceZOrder.Companion Companion;
-  }
-
-  public static final class GraphicsSurfaceZOrder.Companion {
-    method public int getBehind();
-    method public int getMediaOverlay();
-    method public int getOnTop();
-    property public final int Behind;
-    property public final int MediaOverlay;
-    property public final int OnTop;
-  }
-
   public final class HoverableKt {
     method public static androidx.compose.ui.Modifier hoverable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional boolean enabled);
   }
@@ -285,6 +285,26 @@
 
 }
 
+package androidx.compose.foundation.draganddrop {
+
+  public final class AndroidDragAndDropSource_androidKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  public final class DragAndDropSourceKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDrawDragShadow, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface DragAndDropSourceScope extends androidx.compose.ui.input.pointer.PointerInputScope {
+    method public void startTransfer(androidx.compose.ui.draganddrop.DragAndDropTransfer transfer);
+  }
+
+  public final class DragAndDropTargetKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropTarget(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onStarted, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onDropped, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEntered, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onMoved, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onChanged, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onExited, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEnded);
+  }
+
+}
+
 package androidx.compose.foundation.gestures {
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface AnchoredDragScope {
@@ -512,7 +532,8 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class SnapFlingBehavior implements androidx.compose.foundation.gestures.FlingBehavior {
-    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
+    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec);
+    ctor @Deprecated public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onSettlingDistanceUpdated, kotlin.coroutines.Continuation<? super java.lang.Float>);
   }
@@ -1131,8 +1152,11 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class PagerDefaults {
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional @FloatRange(from=0.0, to=1.0) float snapPositionalThreshold);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method public androidx.compose.animation.core.AnimationSpec<java.lang.Float> getLowVelocityAnimationSpec();
     method public androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection(androidx.compose.foundation.pager.PagerState state, androidx.compose.foundation.gestures.Orientation orientation);
+    property public final androidx.compose.animation.core.AnimationSpec<java.lang.Float> LowVelocityAnimationSpec;
     field public static final int BeyondBoundsPageCount = 0; // 0x0
     field public static final androidx.compose.foundation.pager.PagerDefaults INSTANCE;
   }
@@ -1526,6 +1550,7 @@
   }
 
   public static final class InputTransformation.Companion {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public androidx.compose.foundation.text2.input.InputTransformation byValue(kotlin.jvm.functions.Function2<? super java.lang.CharSequence,? super java.lang.CharSequence,? extends java.lang.CharSequence> transformation);
   }
 
   public final class InputTransformationKt {
@@ -1554,7 +1579,7 @@
     method public void placeCursorAfterCodepointAt(int index);
     method public void placeCursorBeforeCharAt(int index);
     method public void placeCursorBeforeCodepointAt(int index);
-    method public void replace(int start, int end, String text);
+    method public void replace(int start, int end, CharSequence text);
     method public void revertAllChanges();
     method public void selectCharsIn(long range);
     method public void selectCodepointsIn(long range);
@@ -1635,7 +1660,7 @@
   public final class TextFieldStateKt {
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void clearText(androidx.compose.foundation.text2.input.TextFieldState);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static suspend Object? forEachTextValue(androidx.compose.foundation.text2.input.TextFieldState, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.text2.input.TextFieldCharSequence,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<?>);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState();
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState(optional String initialText, optional long initialSelectionInChars);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndPlaceCursorAtEnd(androidx.compose.foundation.text2.input.TextFieldState, String text);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndSelectAll(androidx.compose.foundation.text2.input.TextFieldState, String text);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static kotlinx.coroutines.flow.Flow<androidx.compose.foundation.text2.input.TextFieldCharSequence> textAsFlow(androidx.compose.foundation.text2.input.TextFieldState);
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 87ac2e20..e0862a2 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -1,6 +1,30 @@
 // Signature format: 4.0
 package androidx.compose.foundation {
 
+  public final class AndroidExternalSurfaceKt {
+    method @androidx.compose.runtime.Composable public static void AndroidEmbeddedExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+    method @androidx.compose.runtime.Composable public static void AndroidExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+  }
+
+  public interface AndroidExternalSurfaceScope {
+    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
+  }
+
+  @kotlin.jvm.JvmInline public final value class AndroidExternalSurfaceZOrder {
+    method public int getZOrder();
+    property public final int zOrder;
+    field public static final androidx.compose.foundation.AndroidExternalSurfaceZOrder.Companion Companion;
+  }
+
+  public static final class AndroidExternalSurfaceZOrder.Companion {
+    method public int getBehind();
+    method public int getMediaOverlay();
+    method public int getOnTop();
+    property public final int Behind;
+    property public final int MediaOverlay;
+    property public final int OnTop;
+  }
+
   public final class BackgroundKt {
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional @FloatRange(from=0.0, to=1.0) float alpha);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
@@ -111,30 +135,6 @@
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier onFocusedBoundsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPositioned);
   }
 
-  public final class GraphicsSurfaceKt {
-    method @androidx.compose.runtime.Composable public static void EmbeddedGraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-    method @androidx.compose.runtime.Composable public static void GraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-  }
-
-  public interface GraphicsSurfaceScope {
-    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
-  }
-
-  @kotlin.jvm.JvmInline public final value class GraphicsSurfaceZOrder {
-    method public int getZOrder();
-    property public final int zOrder;
-    field public static final androidx.compose.foundation.GraphicsSurfaceZOrder.Companion Companion;
-  }
-
-  public static final class GraphicsSurfaceZOrder.Companion {
-    method public int getBehind();
-    method public int getMediaOverlay();
-    method public int getOnTop();
-    property public final int Behind;
-    property public final int MediaOverlay;
-    property public final int OnTop;
-  }
-
   public final class HoverableKt {
     method public static androidx.compose.ui.Modifier hoverable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional boolean enabled);
   }
@@ -287,6 +287,26 @@
 
 }
 
+package androidx.compose.foundation.draganddrop {
+
+  public final class AndroidDragAndDropSource_androidKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  public final class DragAndDropSourceKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDrawDragShadow, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface DragAndDropSourceScope extends androidx.compose.ui.input.pointer.PointerInputScope {
+    method public void startTransfer(androidx.compose.ui.draganddrop.DragAndDropTransfer transfer);
+  }
+
+  public final class DragAndDropTargetKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropTarget(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onStarted, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onDropped, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEntered, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onMoved, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onChanged, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onExited, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEnded);
+  }
+
+}
+
 package androidx.compose.foundation.gestures {
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface AnchoredDragScope {
@@ -514,7 +534,8 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class SnapFlingBehavior implements androidx.compose.foundation.gestures.FlingBehavior {
-    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
+    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec);
+    ctor @Deprecated public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onSettlingDistanceUpdated, kotlin.coroutines.Continuation<? super java.lang.Float>);
   }
@@ -1133,8 +1154,11 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class PagerDefaults {
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional @FloatRange(from=0.0, to=1.0) float snapPositionalThreshold);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method public androidx.compose.animation.core.AnimationSpec<java.lang.Float> getLowVelocityAnimationSpec();
     method public androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection(androidx.compose.foundation.pager.PagerState state, androidx.compose.foundation.gestures.Orientation orientation);
+    property public final androidx.compose.animation.core.AnimationSpec<java.lang.Float> LowVelocityAnimationSpec;
     field public static final int BeyondBoundsPageCount = 0; // 0x0
     field public static final androidx.compose.foundation.pager.PagerDefaults INSTANCE;
   }
@@ -1528,6 +1552,7 @@
   }
 
   public static final class InputTransformation.Companion {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public androidx.compose.foundation.text2.input.InputTransformation byValue(kotlin.jvm.functions.Function2<? super java.lang.CharSequence,? super java.lang.CharSequence,? extends java.lang.CharSequence> transformation);
   }
 
   public final class InputTransformationKt {
@@ -1556,7 +1581,7 @@
     method public void placeCursorAfterCodepointAt(int index);
     method public void placeCursorBeforeCharAt(int index);
     method public void placeCursorBeforeCodepointAt(int index);
-    method public void replace(int start, int end, String text);
+    method public void replace(int start, int end, CharSequence text);
     method public void revertAllChanges();
     method public void selectCharsIn(long range);
     method public void selectCodepointsIn(long range);
@@ -1639,7 +1664,7 @@
   public final class TextFieldStateKt {
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void clearText(androidx.compose.foundation.text2.input.TextFieldState);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static suspend Object? forEachTextValue(androidx.compose.foundation.text2.input.TextFieldState, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.text2.input.TextFieldCharSequence,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<?>);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState();
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState(optional String initialText, optional long initialSelectionInChars);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndPlaceCursorAtEnd(androidx.compose.foundation.text2.input.TextFieldState, String text);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndSelectAll(androidx.compose.foundation.text2.input.TextFieldState, String text);
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static kotlinx.coroutines.flow.Flow<androidx.compose.foundation.text2.input.TextFieldCharSequence> textAsFlow(androidx.compose.foundation.text2.input.TextFieldState);
diff --git a/compose/foundation/foundation/benchmark/build.gradle b/compose/foundation/foundation/benchmark/build.gradle
index 4bc25b5..5eb1d5b 100644
--- a/compose/foundation/foundation/benchmark/build.gradle
+++ b/compose/foundation/foundation/benchmark/build.gradle
@@ -53,10 +53,6 @@
 
 android {
     namespace "androidx.compose.foundation.benchmark"
-    defaultConfig {
-        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
-        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'None'
-    }
 }
 
 androidx {
diff --git a/compose/foundation/foundation/build.gradle b/compose/foundation/foundation/build.gradle
index a6d0d8f..6f236f4 100644
--- a/compose/foundation/foundation/build.gradle
+++ b/compose/foundation/foundation/build.gradle
@@ -112,10 +112,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle b/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
index 4382106..589736d 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
@@ -40,6 +40,7 @@
     implementation(project(":compose:ui:ui-tooling-preview"))
     debugImplementation(project(":compose:ui:ui-tooling"))
     implementation(project(":internal-testutils-fonts"))
+    implementation(project(":collection:collection"))
 }
 
 android {
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/GraphicsSurfaceDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AndroidExternalSurfaceDemo.kt
similarity index 77%
rename from compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/GraphicsSurfaceDemo.kt
rename to compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AndroidExternalSurfaceDemo.kt
index 4cc8c77..632770c 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/GraphicsSurfaceDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AndroidExternalSurfaceDemo.kt
@@ -20,8 +20,8 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.samples.EmbeddedGraphicsSurfaceColors
-import androidx.compose.foundation.samples.GraphicsSurfaceColors
+import androidx.compose.foundation.samples.AndroidEmbeddedExternalSurfaceColors
+import androidx.compose.foundation.samples.AndroidExternalSurfaceColors
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
@@ -29,12 +29,12 @@
 import androidx.compose.ui.unit.dp
 
 @Composable
-fun GraphicsSurfaceDemo() {
+fun AndroidExternalSurfaceDemo() {
     Column(Modifier.verticalScroll(rememberScrollState())) {
-        Text("GraphicsSurface:")
-        GraphicsSurfaceColors()
+        Text("ExternalSurface:")
+        AndroidExternalSurfaceColors()
         Spacer(Modifier.height(50.dp))
-        Text("EmbeddedGraphicsSurface:")
-        EmbeddedGraphicsSurfaceColors()
+        Text("EmbeddedExternalSurface:")
+        AndroidEmbeddedExternalSurfaceColors()
     }
 }
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt
index 4a07721..06dbb83 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt
@@ -16,6 +16,8 @@
 
 package androidx.compose.foundation.demos
 
+import androidx.compose.foundation.demos.draganddrop.DragAndDropMultiAppDemo
+import androidx.compose.foundation.demos.draganddrop.DragAndDropNestedDemo
 import androidx.compose.foundation.demos.pager.PagerDemos
 import androidx.compose.foundation.demos.relocation.BringIntoViewAndroidInteropDemo
 import androidx.compose.foundation.demos.relocation.BringIntoViewDemo
@@ -57,16 +59,22 @@
     ComposableDemo("Nested Scroll Simple Column") { SimpleColumnNestedScrollSample() },
 )
 
+private val DragAndDropDemos = listOf(
+    ComposableDemo("Multi app drag and drop") { DragAndDropMultiAppDemo() },
+    ComposableDemo("Nested Drag and drop") { DragAndDropNestedDemo() }
+)
+
 val FoundationDemos = DemoCategory(
     "Foundation",
     listOf(
         DemoCategory("High-level Gesures", GestureDemos),
+        DemoCategory("Drag and drop", DragAndDropDemos),
         ComposableDemo("Overscroll") { OverscrollDemo() },
         ComposableDemo("Can scroll forward / backward") { CanScrollSample() },
         ComposableDemo("Vertical scroll") { VerticalScrollExample() },
         ComposableDemo("Controlled Scrollable Row") { ControlledScrollableRowSample() },
         ComposableDemo("Draw Modifiers") { DrawModifiersDemo() },
-        ComposableDemo("Graphics Surfaces") { GraphicsSurfaceDemo() },
+        ComposableDemo("Graphics Surfaces") { AndroidExternalSurfaceDemo() },
         DemoCategory("Lazy lists", LazyListDemos),
         DemoCategory("Snapping", SnappingDemos),
         DemoCategory("Pagers", PagerDemos),
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/draganddrop/DragAndDropDemos.kt
similarity index 60%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/draganddrop/DragAndDropDemos.kt
index 40b8f5b..661f6c0 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/draganddrop/DragAndDropDemos.kt
@@ -14,7 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+package androidx.compose.foundation.demos.draganddrop
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+import androidx.compose.foundation.samples.DragAndDropMultiAppSample
+import androidx.compose.foundation.samples.DragAndDropNestedSample
+import androidx.compose.runtime.Composable
+
+@Composable
+fun DragAndDropMultiAppDemo() {
+    DragAndDropMultiAppSample()
+}
+
+@Composable
+fun DragAndDropNestedDemo() {
+    DragAndDropNestedSample()
+}
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeMinTouchTargetTextSelectionDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeMinTouchTargetTextSelectionDemo.kt
new file mode 100644
index 0000000..fb8c403
--- /dev/null
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeMinTouchTargetTextSelectionDemo.kt
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2023 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 androidx.compose.foundation.demos.text
+
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.text.selection.SelectionContainer
+import androidx.compose.material.LocalTextStyle
+import androidx.compose.material.Slider
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.drawBehind
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.MutableColorList
+import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.platform.LocalViewConfiguration
+import androidx.compose.ui.platform.ViewConfiguration
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.withStyle
+import androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
+
+private const val alpha = 0.4f
+
+private val Red = Color(0xffE13C56)
+private val Orange = Color(0xffE16D3C)
+private val Yellow = Color(0xffE0AE04)
+private val Green = Color(0xff78AA04)
+private val Blue = Color(0xff4A7DCF)
+private val Indigo = Color(0xff3F0FB7)
+private val Purple = Color(0xff7B4397)
+
+// red is used for the selection container color
+private val Rainbow = MutableColorList(initialCapacity = 6).apply {
+    add(Orange)
+    add(Yellow)
+    add(Green)
+    add(Blue)
+    add(Indigo)
+    add(Purple)
+}.asColorList()
+
+@Composable
+fun MinTouchTargetTextSelection() {
+    Column(
+        Modifier
+            .fillMaxSize()
+            .padding(horizontal = 32.dp, vertical = 8.dp)
+    ) {
+        Text(
+            buildAnnotatedString {
+                append("The ")
+                appendWithColor(Red, "solid red")
+                append(" rectangle borders the ")
+                appendCode("SelectionContainer")
+                append(". The inner ")
+                appendRainbowText("solid rainbow")
+                append(" border is the bounds of each individual ")
+                appendCode("Text")
+                append(" with the matching text color. The outer ")
+                appendRainbowText("faded rainbow", alpha)
+                append(" and ")
+                appendWithColor(Red.copy(alpha), "faded red")
+                append(" borders are the minimum touch target space for the associated ")
+                appendCode("Text")
+                append(" or ")
+                appendCode("SelectionContainer")
+                append(
+                    """
+                    |. We expect that touch selection gestures in the touch target space,
+                    | but not directly on the
+                    | """.trimMargin().replace("\n", "")
+                )
+                appendCode("Text")
+                append(
+                    """
+                    |, will still start a selection and not crash. The below slider adjusts
+                    | the minimum touch target size between 0 and 100 dp.
+                    |""".trimMargin().replace("\n", "")
+                )
+            },
+        )
+        var minTouchSideLength by remember { mutableFloatStateOf(48f) }
+        Slider(
+            value = minTouchSideLength,
+            onValueChange = { minTouchSideLength = it },
+            valueRange = 0f..100f
+        )
+        Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
+            val length = minTouchSideLength.dp
+            OverrideMinimumTouchTarget(DpSize(length, length)) {
+                MinTouchTargetInTextSelection()
+            }
+        }
+    }
+}
+
+@Composable
+private fun OverrideMinimumTouchTarget(size: DpSize, content: @Composable () -> Unit) {
+    val viewConfiguration = LocalViewConfiguration.current
+    val viewConfigurationOverride = DelegatedViewConfiguration(viewConfiguration, size)
+    CompositionLocalProvider(LocalViewConfiguration provides viewConfigurationOverride, content)
+}
+
+@Composable
+private fun MinTouchTargetInTextSelection() {
+    val minimumTouchTarget = LocalViewConfiguration.current.minimumTouchTargetSize
+    SelectionContainer(
+        Modifier
+            .border(1.dp, Red)
+            .padding(1.dp)
+            .drawMinTouchTargetBorderBehind(Red.copy(alpha), minimumTouchTarget)
+    ) {
+        Column(
+            verticalArrangement = Arrangement.spacedBy(4.dp)
+        ) {
+            Rainbow.forEachIndexed { index, color ->
+                val fadedColor = color.copy(alpha)
+                Text(
+                    text = "Text",
+                    style = LocalTextStyle.current.merge(color = color),
+                    modifier = Modifier
+                        // offset the texts horizontally, else the borders will heavily overlap
+                        .padding(start = (index * 6).dp)
+                        .border(1.dp, color)
+                        // Padding between text and border so they aren't touching
+                        .padding(1.dp)
+                        .drawMinTouchTargetBorderBehind(fadedColor, minimumTouchTarget)
+                )
+            }
+        }
+    }
+}
+
+/**
+ * Draw a 1 dp unfilled rect around the minimum touch target.
+ */
+private fun Modifier.drawMinTouchTargetBorderBehind(
+    color: Color,
+    minimumTouchTarget: DpSize
+): Modifier = drawBehind {
+    val minTouchTargetCoercedSize = Size(
+        width = size.width.coerceAtLeast(minimumTouchTarget.width.toPx()),
+        height = size.height.coerceAtLeast(minimumTouchTarget.height.toPx())
+    )
+    val topLeft = Offset(
+        x = (size.width - minTouchTargetCoercedSize.width) / 2,
+        y = (size.height - minTouchTargetCoercedSize.height) / 2
+    )
+    drawRect(color, topLeft, minTouchTargetCoercedSize, style = Stroke(1.dp.toPx()))
+}
+
+private fun AnnotatedString.Builder.appendRainbowText(text: String, alpha: Float = 1f) {
+    val size = Rainbow.size
+    text.forEachIndexed { index, char ->
+        val color = Rainbow[index % size].copy(alpha)
+        withStyle(SpanStyle(color = color)) {
+            append(char)
+        }
+    }
+}
+
+private class DelegatedViewConfiguration(
+    delegate: ViewConfiguration,
+    minimumTouchTargetSizeOverride: DpSize,
+) : ViewConfiguration by delegate {
+    override val minimumTouchTargetSize: DpSize = minimumTouchTargetSizeOverride
+}
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
index f6f0295..5a6bb7f 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
@@ -33,6 +33,7 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.buildAnnotatedString
@@ -58,18 +59,6 @@
             Text(
                 modifier = textBorderModifier,
                 text = buildAnnotatedString {
-                    fun appendWithColor(color: Color, text: String) {
-                        withStyle(SpanStyle(color = color)) {
-                            append(text)
-                        }
-                    }
-
-                    fun appendCode(text: String) {
-                        withStyle(SpanStyle(fontFamily = FontFamily.Monospace)) {
-                            append(text)
-                        }
-                    }
-
                     appendWithColor(Color.Green, "Green")
                     append(" borders represent a ")
                     appendCode("SelectionContainer")
@@ -318,3 +307,15 @@
         DisableSelection(content)
     }
 }
+
+internal fun AnnotatedString.Builder.appendWithColor(color: Color, text: String) {
+    withStyle(SpanStyle(color = color)) {
+        append(text)
+    }
+}
+
+internal fun AnnotatedString.Builder.appendCode(text: String) {
+    withStyle(SpanStyle(fontFamily = FontFamily.Monospace)) {
+        append(text)
+    }
+}
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/FocusTextFieldImmediatelyDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/FocusTextFieldImmediatelyDemo.kt
index ad82db8..ba81b02 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/FocusTextFieldImmediatelyDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/FocusTextFieldImmediatelyDemo.kt
@@ -16,33 +16,69 @@
 
 package androidx.compose.foundation.demos.text
 
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.material.Switch
+import androidx.compose.material.Text
 import androidx.compose.material.TextField
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
 
 @Composable
 fun FocusTextFieldImmediatelyDemo() {
-    val focusRequester = remember { FocusRequester() }
     var value by remember { mutableStateOf("") }
+    var launchedEffect by remember { mutableStateOf(false) }
 
-    DisposableEffect(focusRequester) {
-        focusRequester.requestFocus()
-        onDispose {}
+    Column {
+        Row(
+            horizontalArrangement = Arrangement.SpaceBetween,
+            verticalAlignment = Alignment.CenterVertically,
+            modifier = Modifier.fillMaxWidth(),
+        ) {
+            Text("Disposable effect")
+            Switch(checked = launchedEffect, onCheckedChange = { launchedEffect = it })
+            Text("Launched effect")
+        }
+
+        if (launchedEffect) {
+            val focusRequester = remember { FocusRequester() }
+            LaunchedEffect(focusRequester) {
+                focusRequester.requestFocus()
+            }
+
+            TextField(
+                value,
+                onValueChange = { value = it },
+                modifier = Modifier
+                    .wrapContentSize()
+                    .focusRequester(focusRequester)
+            )
+        } else {
+            val focusRequester = remember { FocusRequester() }
+            DisposableEffect(focusRequester) {
+                focusRequester.requestFocus()
+                onDispose {}
+            }
+
+            TextField(
+                value,
+                onValueChange = { value = it },
+                modifier = Modifier
+                    .wrapContentSize()
+                    .focusRequester(focusRequester)
+            )
+        }
     }
-
-    TextField(
-        value,
-        onValueChange = { value = it },
-        modifier = Modifier
-            .wrapContentSize()
-            .focusRequester(focusRequester)
-    )
 }
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt
index ac9670c..42511ed 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt
@@ -28,7 +28,14 @@
     language: Language = Language.Latin,
     wordCount: Int = language.words.size
 ): String =
-    language.words.joinToString(separator = " ", limit = wordCount, truncated = "")
+    loremIpsumWords(language).joinToString(separator = " ", limit = wordCount, truncated = "")
+
+/**
+ * An infinite [Sequence] of words of Lorem Ipsum text.
+ */
+fun loremIpsumWords(
+    language: Language = Language.Latin
+): Sequence<String> = generateSequence { language.words.asSequence() }.flatten()
 
 private val LatinLipsum = """
     Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a egestas nisi. Aenean
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
index a67bc75..f7bfe30 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
@@ -20,6 +20,7 @@
 import androidx.compose.foundation.demos.text2.BasicTextField2CustomPinFieldDemo
 import androidx.compose.foundation.demos.text2.BasicTextField2Demos
 import androidx.compose.foundation.demos.text2.BasicTextField2FilterDemos
+import androidx.compose.foundation.demos.text2.BasicTextField2LongTextDemo
 import androidx.compose.foundation.demos.text2.BasicTextField2ValueCallbackDemo
 import androidx.compose.foundation.demos.text2.DecorationBoxDemos
 import androidx.compose.foundation.demos.text2.KeyboardOptionsDemos
@@ -112,6 +113,8 @@
                         ComposableDemo("Focus keyboard interaction") {
                             TextFieldFocusKeyboardInteraction()
                         },
+                        ComposableDemo("Focus immediately") { FocusTextFieldImmediatelyDemo() },
+                        ComposableDemo("TextField focus") { TextFieldFocusDemo() },
                     )
                 ),
                 ComposableDemo("Full-screen field") { FullScreenTextFieldDemo() },
@@ -126,9 +129,7 @@
                 ComposableDemo("Visual Transformation") { VisualTransformationDemo() },
                 ComposableDemo("TextFieldValue") { TextFieldValueDemo() },
                 ComposableDemo("Tail Following Text Field") { TailFollowingTextFieldDemo() },
-                ComposableDemo("Focus immediately") { FocusTextFieldImmediatelyDemo() },
                 ComposableDemo("Secondary input system") { PlatformTextInputAdapterDemo() },
-                ComposableDemo("TextField focus") { TextFieldFocusDemo() },
                 ComposableDemo("Read-only field") { ReadOnlyTextFieldDemo() },
             )
         ),
@@ -146,6 +147,7 @@
                 ComposableDemo("Swap the field but reuse the state") { SwapFieldSameStateDemo() },
                 ComposableDemo("Custom PIN field") { BasicTextField2CustomPinFieldDemo() },
                 ComposableDemo("Undo/Redo") { BasicTextField2UndoSample() },
+                ComposableDemo("Long text") { BasicTextField2LongTextDemo() },
             )
         ),
         DemoCategory(
@@ -157,6 +159,9 @@
                 ComposableDemo("Scrollable Column Text Selection") {
                     TextScrollableColumnSelectionDemo()
                 },
+                ComposableDemo("Selection Minimum Touch Target") {
+                    MinTouchTargetTextSelection()
+                },
             )
         ),
         DemoCategory(
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
index 749c2d79..fc5d40d2 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
@@ -28,7 +28,9 @@
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.samples.BasicTextField2ChangeIterationSample
 import androidx.compose.foundation.samples.BasicTextField2ChangeReverseIterationSample
-import androidx.compose.foundation.samples.BasicTextField2CustomFilterSample
+import androidx.compose.foundation.samples.BasicTextField2CustomInputTransformationSample
+import androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueChooseSample
+import androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueReplaceSample
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text2.BasicTextField2
 import androidx.compose.foundation.text2.input.InputTransformation
@@ -71,7 +73,17 @@
 
         TagLine(tag = "Custom (type backwards with prompt)")
         Box(demoTextFieldModifiers, propagateMinConstraints = true) {
-            BasicTextField2CustomFilterSample()
+            BasicTextField2CustomInputTransformationSample()
+        }
+
+        TagLine(tag = "Custom (string,string->string with replacement)")
+        Box(demoTextFieldModifiers, propagateMinConstraints = true) {
+            BasicTextField2InputTransformationByValueReplaceSample()
+        }
+
+        TagLine(tag = "Custom (string,string->string with choice)")
+        Box(demoTextFieldModifiers, propagateMinConstraints = true) {
+            BasicTextField2InputTransformationByValueChooseSample()
         }
 
         TagLine(tag = "Change tracking (change logging sample)")
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2LongTextDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2LongTextDemo.kt
new file mode 100644
index 0000000..5541557
--- /dev/null
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2LongTextDemo.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2023 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 androidx.compose.foundation.demos.text2
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.demos.text.loremIpsumWords
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.imePadding
+import androidx.compose.foundation.text2.BasicTextField2
+import androidx.compose.foundation.text2.input.TextFieldLineLimits.MultiLine
+import androidx.compose.foundation.text2.input.TextFieldState
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+
+@OptIn(ExperimentalFoundationApi::class)
+@Composable
+fun BasicTextField2LongTextDemo() {
+    val text = remember { TextFieldState(generateString(charCount = 100_000)) }
+
+    Column(Modifier.imePadding()) {
+        BasicTextField2(
+            state = text,
+            modifier = Modifier
+                .weight(1f)
+                .then(demoTextFieldModifiers),
+            lineLimits = MultiLine(maxHeightInLines = 20)
+        )
+        Text("Char count: ${text.text.length}")
+    }
+}
+
+private fun generateString(charCount: Int): String = buildString(capacity = charCount) {
+    val wordIterator = loremIpsumWords().iterator()
+    while (length < charCount) {
+        append(wordIterator.next().take(charCount - length - 1))
+        append(' ')
+    }
+}
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/GraphicsSurfaceSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AndroidExternalSurfaceSamples.kt
similarity index 88%
rename from compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/GraphicsSurfaceSamples.kt
rename to compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AndroidExternalSurfaceSamples.kt
index dc63c5f..0e1d13e 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/GraphicsSurfaceSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AndroidExternalSurfaceSamples.kt
@@ -18,8 +18,8 @@
 
 import android.graphics.Rect
 import androidx.annotation.Sampled
-import androidx.compose.foundation.EmbeddedGraphicsSurface
-import androidx.compose.foundation.GraphicsSurface
+import androidx.compose.foundation.AndroidEmbeddedExternalSurface
+import androidx.compose.foundation.AndroidExternalSurface
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.runtime.Composable
@@ -33,8 +33,8 @@
 
 @Sampled
 @Composable
-fun GraphicsSurfaceColors() {
-    GraphicsSurface(
+fun AndroidExternalSurfaceColors() {
+    AndroidExternalSurface(
         modifier = Modifier.fillMaxWidth().height(400.dp)
     ) {
         // Resources can be initialized/cached here
@@ -60,8 +60,7 @@
             surface.onDestroyed {
             }
 
-            // Render loop, automatically cancelled by GraphicsSurface
-            // on surface destruction
+            // Render loop, automatically cancelled on surface destruction
             while (true) {
                 withFrameNanos { time ->
                     surface.lockCanvas(Rect(0, 0, w, h)).apply {
@@ -78,8 +77,8 @@
 
 @Sampled
 @Composable
-fun EmbeddedGraphicsSurfaceColors() {
-    EmbeddedGraphicsSurface(
+fun AndroidEmbeddedExternalSurfaceColors() {
+    AndroidEmbeddedExternalSurface(
         modifier = Modifier.fillMaxWidth().height(400.dp)
     ) {
         // Resources can be initialized/cached here
@@ -105,8 +104,7 @@
             surface.onDestroyed {
             }
 
-            // Render loop, automatically cancelled by EmbeddedGraphicsSurface
-            // on surface destruction
+            // Render loop, automatically cancelled on surface destruction
             while (true) {
                 withFrameNanos { time ->
                     surface.lockCanvas(Rect(0, 0, w, h)).apply {
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
index b0ffb63..9c1b77b 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
@@ -171,10 +171,9 @@
     }
 }
 
-// TODO convert to InputTransformation
 @Sampled
 @Composable
-fun BasicTextField2CustomFilterSample() {
+fun BasicTextField2CustomInputTransformationSample() {
     val state = remember { TextFieldState() }
     BasicTextField2(state, inputTransformation = { _, new ->
         // A filter that always places newly-input text at the start of the string, after a
@@ -213,7 +212,33 @@
 }
 
 @Sampled
-fun BasicTextField2FilterChainingSample() {
+@Composable
+fun BasicTextField2InputTransformationByValueReplaceSample() {
+    val state = remember { TextFieldState() }
+    BasicTextField2(
+        state,
+        // Convert tabs to spaces.
+        inputTransformation = InputTransformation.byValue { _, proposed ->
+            proposed.replace("""\t""".toRegex(), "  ")
+        }
+    )
+}
+
+@Sampled
+@Composable
+fun BasicTextField2InputTransformationByValueChooseSample() {
+    val state = remember { TextFieldState() }
+    BasicTextField2(
+        state,
+        // Reject whitespace.
+        inputTransformation = InputTransformation.byValue { current, proposed ->
+            if ("""\s""".toRegex() in proposed) current else proposed
+        }
+    )
+}
+
+@Sampled
+fun BasicTextField2InputTransformationChainingSample() {
     val removeFirstEFilter = InputTransformation { _, new ->
         val index = new.asCharSequence().indexOf('e')
         if (index != -1) {
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragAndDropSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragAndDropSamples.kt
new file mode 100644
index 0000000..2073b9c
--- /dev/null
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragAndDropSamples.kt
@@ -0,0 +1,569 @@
+/*
+ * Copyright 2023 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 androidx.compose.foundation.samples
+
+import android.content.ClipData
+import android.content.ClipDescription
+import android.content.Intent
+import androidx.annotation.Sampled
+import androidx.compose.animation.animateColor
+import androidx.compose.animation.core.DurationBasedAnimationSpec
+import androidx.compose.animation.core.RepeatMode
+import androidx.compose.animation.core.animateFloat
+import androidx.compose.animation.core.infiniteRepeatable
+import androidx.compose.animation.core.rememberInfiniteTransition
+import androidx.compose.animation.core.tween
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.draganddrop.dragAndDropSource
+import androidx.compose.foundation.draganddrop.dragAndDropTarget
+import androidx.compose.foundation.gestures.detectTapGestures
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.RowScope
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.material.Text
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Clear
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draganddrop.DragAndDropEvent
+import androidx.compose.ui.draganddrop.DragAndDropTransfer
+import androidx.compose.ui.draganddrop.dragEvent
+import androidx.compose.ui.draganddrop.mimeTypes
+import androidx.compose.ui.draw.rotate
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import kotlin.random.Random
+
+@Composable
+fun DragAndDropMultiAppSample() {
+    var dragAndDropEventSummary by remember { mutableStateOf<String?>(null) }
+
+    Column(
+        modifier = Modifier
+            .padding(16.dp)
+            .fillMaxSize(),
+        horizontalAlignment = Alignment.CenterHorizontally
+    ) {
+
+        TextDragAndDropSourceSample(
+            modifier = Modifier
+                .fillMaxWidth()
+        )
+
+        Spacer(
+            modifier = Modifier.height(24.dp),
+        )
+
+        Box(
+            modifier = Modifier
+                .fillMaxWidth()
+                .weight(1f)
+        ) {
+            TextDragAndDropTargetSample(
+                eventSummary = dragAndDropEventSummary,
+                onDragAndDropEventDropped = { event ->
+                    dragAndDropEventSummary = event.summary()
+                }
+            )
+            if (dragAndDropEventSummary != null) {
+                Box(
+                    modifier = Modifier
+                        .align(Alignment.TopEnd)
+                        .padding(16.dp)
+                ) {
+                    IconButton(
+                        onClick = {
+                            dragAndDropEventSummary = null
+                        },
+                        content = {
+                            Icon(
+                                imageVector = Icons.Default.Clear,
+                                contentDescription = "Clear"
+                            )
+                        }
+                    )
+                }
+            }
+        }
+    }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@Sampled
+@Composable
+fun TextDragAndDropSourceSample(
+    modifier: Modifier
+) {
+    val label = remember { "Drag me" }
+    Box(
+        modifier = modifier
+            .dragAndDropSource {
+                detectTapGestures(
+                    onLongPress = {
+                        startTransfer(
+                            DragAndDropTransfer(
+                                clipData = ClipData.newPlainText(label, label)
+                            )
+                        )
+                    }
+                )
+            }
+            .border(
+                border = BorderStroke(
+                    width = 4.dp,
+                    brush = Brush.linearGradient(listOf(Color.Magenta, Color.Magenta))
+                ),
+                shape = RoundedCornerShape(16.dp)
+            )
+            .padding(24.dp),
+    ) {
+        Text(
+            modifier = Modifier.align(Alignment.Center),
+            text = label
+        )
+    }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@Sampled
+@Composable
+fun TextDragAndDropTargetSample(
+    eventSummary: String?,
+    onDragAndDropEventDropped: (DragAndDropEvent) -> Unit,
+) {
+    var backgroundColor by remember { mutableStateOf(Color.Transparent) }
+    Box(
+        modifier = Modifier
+            .fillMaxSize()
+            .dragAndDropTarget(
+                onStarted = {
+                    backgroundColor = Color.DarkGray.copy(alpha = 0.2f)
+                    true
+                },
+                onDropped = { event ->
+                    onDragAndDropEventDropped(event)
+                    true
+                },
+                onEnded = {
+                    backgroundColor = Color.Transparent
+                }
+            )
+            .background(backgroundColor)
+            .border(
+                width = 4.dp,
+                color = Color.Magenta,
+                shape = RoundedCornerShape(16.dp)
+            ),
+    ) {
+        when (eventSummary) {
+            null -> Text(
+                modifier = Modifier
+                    .align(Alignment.Center),
+                text = "Drop anything here"
+            )
+
+            else -> Text(
+                modifier = Modifier
+                    .padding(
+                        horizontal = 16.dp,
+                        vertical = 24.dp
+                    )
+                    .verticalScroll(rememberScrollState()),
+                text = eventSummary
+            )
+        }
+    }
+}
+
+private fun DragAndDropEvent.summary() =
+    (0 until dragEvent.clipData.itemCount)
+        .map(dragEvent.clipData::getItemAt)
+        .withIndex()
+        .joinToString(separator = "\n\n") { (index, clipItem) ->
+            val mimeTypes = (0 until dragEvent.clipData.description.mimeTypeCount)
+                .joinToString(
+                    separator = ", ",
+                    transform = dragEvent.clipData.description::getMimeType
+                )
+            listOfNotNull(
+                "index: $index",
+                "mimeTypes: $mimeTypes",
+                clipItem.text
+                    ?.takeIf(CharSequence::isNotEmpty)
+                    ?.let {
+                        "text: $it"
+                    },
+                clipItem.htmlText
+                    ?.takeIf(CharSequence::isNotEmpty)
+                    ?.let {
+                        "html text: $it"
+                    },
+                clipItem.uri?.toString()?.let {
+                    "uri: $it"
+                },
+                clipItem.intent?.let {
+                    "intent: action - ${it.action}; extras size: ${it.extras?.size()}"
+                },
+            ).joinToString(separator = "\n")
+        }
+
+@Composable
+fun DragAndDropNestedSample() {
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+    ) {
+        TwoByTwoGrid(
+            modifier = Modifier
+                .padding(16.dp)
+                .weight(1f)
+                .fillMaxWidth()
+                .animatedDragAndDrop(
+                    prefix = "Main",
+                    level = 0,
+                    rowAndColumn = RowAndColumn(
+                        row = 0,
+                        column = 0
+                    )
+                ),
+        ) { outerRowAndColumn ->
+            TwoByTwoGrid(
+                modifier = Modifier
+                    .padding(16.dp)
+                    .weight(1f)
+                    .fillMaxWidth()
+                    .animatedDragAndDrop(
+                        prefix = "Outer",
+                        level = 1,
+                        rowAndColumn = outerRowAndColumn,
+                    ),
+            ) { innerRowAndColumn ->
+                Box(
+                    modifier = Modifier
+                        .padding(16.dp)
+                        .weight(1f)
+                        .fillMaxSize()
+                        .animatedDragAndDrop(
+                            prefix = "Inner ",
+                            level = 2,
+                            rowAndColumn = innerRowAndColumn,
+                        ),
+                )
+            }
+        }
+        ColorSwatch()
+    }
+}
+
+@Composable
+private fun ColorSwatch() {
+    Row(
+        modifier = Modifier
+            .padding(16.dp)
+            .height(56.dp)
+            .fillMaxWidth()
+            .horizontalScroll(rememberScrollState()),
+        horizontalArrangement = Arrangement.SpaceEvenly,
+    ) {
+        Colors.forEach { color ->
+            DragAndDropSourceWithColoredDragShadowSample(color)
+        }
+    }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@Sampled
+@Composable
+fun DragAndDropSourceWithColoredDragShadowSample(
+    color: Color
+) {
+    Box(
+        modifier = Modifier
+            .size(56.dp)
+            .background(color = color)
+            .dragAndDropSource(
+                onDrawDragShadow = {
+                    drawRect(color)
+                },
+            ) {
+                detectTapGestures(
+                    onLongPress = { startTransfer(color.toDragAndDropTransfer()) }
+                )
+            }
+    )
+}
+
+@Composable
+private fun TwoByTwoGrid(
+    modifier: Modifier = Modifier,
+    child: @Composable (RowScope.(rowAndColumn: RowAndColumn) -> Unit)
+) {
+    Column(
+        modifier = modifier
+    ) {
+        repeat(2) { column ->
+            Row(
+                modifier = Modifier
+                    .weight(1f)
+                    .fillMaxSize()
+            ) {
+                repeat(2) { row ->
+                    child(RowAndColumn(row, column))
+                }
+            }
+        }
+    }
+}
+
+@Composable
+private fun Modifier.animatedDragAndDrop(
+    prefix: String,
+    level: Int,
+    rowAndColumn: RowAndColumn
+): Modifier {
+    val state = remember {
+        State(
+            prefix = prefix,
+            level = level,
+            rowAndColumn = rowAndColumn
+        )
+    }
+    return this
+        .stateDragSource(state)
+        .stateDropTarget(state)
+        .background(state.animatedColor)
+        .rotate(state.animatedRotation)
+        .offset(state.animatedTranslation, state.animatedTranslation)
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+private fun Modifier.stateDragSource(
+    state: State
+) = dragAndDropSource(
+    onDrawDragShadow = {
+        drawRoundRect(state.color)
+    },
+) {
+    detectTapGestures(
+        onLongPress = { startTransfer(state.color.toDragAndDropTransfer()) }
+    )
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+private fun Modifier.stateDropTarget(
+    state: State
+) = dragAndDropTarget(
+    onStarted = { event ->
+        val accepts = event.mimeTypes().contains(ClipDescription.MIMETYPE_TEXT_INTENT)
+        if (accepts) state.onStarted()
+        accepts
+    },
+    onEntered = {
+        println("Entered ${state.name}")
+        state.onEntered()
+    },
+    onMoved = {
+        println("Moved in ${state.name}")
+    },
+    onExited = {
+        println("Exited ${state.name}")
+        state.onExited()
+    },
+    onEnded = {
+        println("Ended in ${state.name}")
+        state.onEnded()
+    },
+    onDropped = { event ->
+        println("Dropped items in ${state.name}")
+        when (val transferredColor = event.dragEvent.clipData.color()) {
+            null -> false
+            else -> {
+                state.onDropped(transferredColor)
+                true
+            }
+        }
+    }
+)
+
+@Stable
+private class State(
+    val prefix: String,
+    val level: Int,
+    val rowAndColumn: RowAndColumn,
+) {
+    var color by mutableStateOf(startColor)
+        private set
+
+    var isInside by mutableStateOf(false)
+        private set
+
+    var isInDnD by mutableStateOf(false)
+        private set
+
+    fun onStarted() {
+        isInDnD = true
+    }
+
+    fun onEntered() {
+        isInside = true
+    }
+
+    fun onExited() {
+        isInside = false
+    }
+
+    fun onDropped(color: Color) {
+        this.color = color
+    }
+
+    fun onEnded() {
+        isInside = false
+        isInDnD = false
+    }
+}
+
+private val State.name
+    get() = with(rowAndColumn) {
+        "$prefix${Letters.circularGet(row)}, ${Numbers.circularGet(column)}"
+    }
+private val State.startColor
+    get() = when (level % 2) {
+        0 -> Colors.drop(Colors.size / 2)
+        else -> Colors.take(Colors.size / 2)
+    }.circularGet(colorIndex + level)
+
+private val State.colorIndex
+    get() = with(rowAndColumn) {
+        (row * 2) + column
+    }
+
+private val State.animatedColor: Color
+    @Composable
+    get() = rememberInfiniteTransition(
+        label = "color"
+    ).animateColor(
+        initialValue = color,
+        targetValue = if (isInside) Color.DarkGray else color,
+        animationSpec = infiniteRepeatable(
+            animation = tween(400),
+            repeatMode = RepeatMode.Reverse
+        ),
+        label = "background color"
+    ).value
+
+private val State.animatedRotation: Float
+    @Composable
+    get() = rememberInfiniteTransition(
+        label = "rotation"
+    ).animateFloat(
+        initialValue = if (isInDnD) -0.2f else 0f,
+        targetValue = if (isInDnD) 0.2f else 0f,
+        animationSpec = infiniteRepeatable(
+            animation = jiggleSpec(),
+            repeatMode = RepeatMode.Reverse
+        ),
+        label = "rotation"
+    ).value
+
+private val State.animatedTranslation: Dp
+    @Composable
+    get() = rememberInfiniteTransition(
+        label = "translation"
+    ).animateFloat(
+        initialValue = if (isInDnD) -0.02f else 0f,
+        targetValue = if (isInDnD) 0.02f else 0f,
+        animationSpec = infiniteRepeatable(
+            animation = jiggleSpec(),
+            repeatMode = RepeatMode.Reverse
+        ),
+        label = "translation"
+    ).value.dp
+
+private fun jiggleSpec(): DurationBasedAnimationSpec<Float> =
+    tween(durationMillis = 70 + (Random.nextInt(30)))
+
+private data class RowAndColumn(
+    val row: Int,
+    val column: Int
+)
+
+private fun Color.toDragAndDropTransfer() = DragAndDropTransfer(
+    clipData = ClipData.newIntent(
+        "color transfer",
+        colorDragAndDropTransferIntent(this)
+    )
+)
+
+private fun ClipData.color() =
+    (0 until itemCount)
+        .map(::getItemAt)
+        .firstNotNullOfOrNull { item ->
+            item?.intent
+                ?.getIntExtra(ColorTransferData, -1)
+                ?.takeIf { it != -1 }
+                ?.let(::Color)
+        }
+
+private fun colorDragAndDropTransferIntent(color: Color) = Intent(ColorTransferAction).apply {
+    putExtra(ColorTransferData, color.toArgb())
+}
+
+private const val ColorTransferAction = "action.color.transfer"
+private const val ColorTransferData = "data.color.transfer"
+
+private fun <T> List<T>.circularGet(index: Int) = get(index % size)
+private val Letters = ('A'..'Z').toList()
+private val Numbers = ('1'..'9').toList()
+
+private val Colors = listOf(
+    Color(0xFF2980b9), // Belize Hole
+    Color(0xFF2c3e50), // Midnight Blue
+    Color(0xFFc0392b), // Pomegranate
+    Color(0xFF16a085), // Green Sea
+    Color(0xFF7f8c8d), // Concrete
+    Color(0xFFC6973B), // Mustard
+    Color(0xFFF6CAB7), // Blush
+    Color(0xFF6D4336), // Brown
+    Color(0xFF814063), // Plum
+)
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/EmbeddedGraphicsSurfaceTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidEmbeddedExternalSurfaceTest.kt
similarity index 94%
rename from compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/EmbeddedGraphicsSurfaceTest.kt
rename to compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidEmbeddedExternalSurfaceTest.kt
index 6a10cd1..ba24609 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/EmbeddedGraphicsSurfaceTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidEmbeddedExternalSurfaceTest.kt
@@ -54,7 +54,7 @@
 @LargeTest
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
 @RunWith(AndroidJUnit4::class)
-class EmbeddedGraphicsSurfaceTest {
+class AndroidEmbeddedExternalSurfaceTest {
     @get:Rule
     val rule = createComposeRule()
 
@@ -72,7 +72,7 @@
                 size.toPx().roundToInt()
             }
 
-            EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, width, height ->
                     surfaceRef = surface
                     surfaceWidth = width
@@ -106,7 +106,7 @@
                 desiredSize.toPx().roundToInt()
             }
 
-            EmbeddedGraphicsSurface(modifier = Modifier.size(desiredSize)) {
+            AndroidEmbeddedExternalSurface(modifier = Modifier.size(desiredSize)) {
                 onSurface { surface, initWidth, initHeight ->
                     surfaceWidth = initWidth
                     surfaceHeight = initHeight
@@ -151,7 +151,7 @@
 
         rule.setContent {
             if (visible) {
-                EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+                AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                     onSurface { surface, _, _ ->
                         surfaceRef = surface
 
@@ -184,7 +184,7 @@
         // the window, and only creates when it gets attached to the window
         rule.setContent {
             if (visible) {
-                EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+                AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                     onSurface { surface, _, _ ->
                         surfaceCreatedCount++
                         surface.onDestroyed {
@@ -222,7 +222,7 @@
             expectedSize = with(LocalDensity.current) {
                 size.toPx().roundToInt()
             }
-            EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, _, _ ->
                     surfaceRef = surface
                     surface.lockHardwareCanvas().apply {
@@ -251,7 +251,7 @@
                 Canvas(modifier = Modifier.size(size)) {
                     drawRect(Color.White)
                 }
-                EmbeddedGraphicsSurface(
+                AndroidEmbeddedExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("EmbeddedGraphicSurface"),
@@ -283,7 +283,7 @@
                 Canvas(modifier = Modifier.size(size)) {
                     drawRect(Color.Green)
                 }
-                EmbeddedGraphicsSurface(
+                AndroidEmbeddedExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("EmbeddedGraphicSurface")
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/GraphicsSurfaceTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidExternalSurfaceTest.kt
similarity index 95%
rename from compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/GraphicsSurfaceTest.kt
rename to compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidExternalSurfaceTest.kt
index 6fc417c..59bb5f8 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/GraphicsSurfaceTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidExternalSurfaceTest.kt
@@ -74,7 +74,7 @@
 @LargeTest
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
 @RunWith(AndroidJUnit4::class)
-class GraphicsSurfaceTest {
+class AndroidExternalSurfaceTest {
     @get:Rule
     val rule = createComposeRule()
 
@@ -92,7 +92,7 @@
                 size.toPx().roundToInt()
             }
 
-            GraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, width, height ->
                     surfaceRef = surface
                     surfaceWidth = width
@@ -126,7 +126,7 @@
                 desiredSize.toPx().roundToInt()
             }
 
-            GraphicsSurface(modifier = Modifier.size(desiredSize)) {
+            AndroidExternalSurface(modifier = Modifier.size(desiredSize)) {
                 onSurface { surface, _, _ ->
                     surface.onChanged { newWidth, newHeight ->
                         surfaceWidth = newWidth
@@ -169,7 +169,7 @@
 
         rule.setContent {
             if (visible) {
-                GraphicsSurface(modifier = Modifier.size(size)) {
+                AndroidExternalSurface(modifier = Modifier.size(size)) {
                     onSurface { surface, _, _ ->
                         surfaceRef = surface
 
@@ -201,7 +201,7 @@
 
         rule.setContent {
             view = LocalView.current
-            GraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, _, _ ->
                     surfaceCreatedCount++
                     surface.onDestroyed {
@@ -242,7 +242,7 @@
             expectedSize = with(LocalDensity.current) {
                 size.toPx().roundToInt()
             }
-            GraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, _, _ ->
                     surfaceRef = surface
                     surface.lockHardwareCanvas().apply {
@@ -269,7 +269,7 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface")
@@ -311,9 +311,9 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier.size(size),
-                    zOrder = GraphicsSurfaceZOrder.Behind
+                    zOrder = AndroidExternalSurfaceZOrder.Behind
                 ) {
                     onSurface { surface, _, _ ->
                         // Draw > 3 frames to make sure the screenshot copy will pick up
@@ -329,11 +329,11 @@
                         }
                     }
                 }
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface"),
-                    zOrder = GraphicsSurfaceZOrder.MediaOverlay
+                    zOrder = AndroidExternalSurfaceZOrder.MediaOverlay
                 ) {
                     onSurface { surface, _, _ ->
                         surface.lockHardwareCanvas().apply {
@@ -363,11 +363,11 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface"),
-                    zOrder = GraphicsSurfaceZOrder.OnTop
+                    zOrder = AndroidExternalSurfaceZOrder.OnTop
                 ) {
                     onSurface { surface, _, _ ->
                         // Draw > 3 frames to make sure the screenshot copy will pick up
@@ -407,12 +407,12 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface"),
                     isOpaque = false,
-                    zOrder = GraphicsSurfaceZOrder.OnTop
+                    zOrder = AndroidExternalSurfaceZOrder.OnTop
                 ) {
                     onSurface { surface, _, _ ->
                         // Draw > 3 frames to make sure the screenshot copy will pick up
@@ -455,7 +455,7 @@
         val latch = CountDownLatch(frameCount)
 
         rule.setContent {
-            GraphicsSurface(
+            AndroidExternalSurface(
                 modifier = Modifier
                     .size(size)
                     .testTag("GraphicSurface"),
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
index 6d04823..0f51802 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
@@ -402,20 +402,14 @@
 
         // assert
         val initialTargetOffset = snapLayoutInfoProvider.calculateApproachOffset(velocity)
-        Truth.assertThat(scrollOffset[1]).isWithin(0.5f)
+        Truth.assertThat(scrollOffset.first()).isWithin(0.5f)
             .of(initialTargetOffset)
 
-        // act: wait for remaining offset to grow instead of decay, this indicates the last
-        // snap step will start
+        // act and assert: next calculated offset is the first value emitted by
+        // remainingScrollOffset this indicates the last snap step will start
         rule.mainClock.advanceTimeUntil {
-            scrollOffset.size > 2 &&
-                scrollOffset.last() > scrollOffset[scrollOffset.lastIndex - 1]
+            scrollOffset.last() == snapLayoutInfoProvider.calculateSnappingOffset(10000f)
         }
-
-        // assert: next calculated offset is the first value emitted by remainingScrollOffset
-        val finalRemainingOffset = snapLayoutInfoProvider.calculateSnappingOffset(10000f)
-        Truth.assertThat(scrollOffset.last()).isWithin(0.5f)
-            .of(finalRemainingOffset)
         rule.mainClock.autoAdvance = true
 
         // assert: value settles back to zero
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
index 4a1a839..d16e5c9 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
@@ -76,13 +76,13 @@
     @Test
     fun belowThresholdVelocity_lessThanAnItemScroll_shouldStayInSamePage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -94,7 +94,7 @@
 
         // act
         onMainList().performTouchInput {
-            swipeMainAxisWithVelocity(stepSize / 2, velocityThreshold / 2)
+            swipeMainAxisWithVelocity(itemSize / 2, velocityThreshold / 2)
         }
 
         // assert
@@ -107,14 +107,14 @@
     @Test
     fun belowThresholdVelocity_moreThanAnItemScroll_shouldGoToNextPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -127,7 +127,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                stepSize,
+                itemSize,
                 velocityThreshold / 2
             )
         }
@@ -142,14 +142,14 @@
     @Test
     fun aboveThresholdVelocityForward_notLargeEnoughScroll_shouldGoToNextPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -162,7 +162,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                stepSize / 2,
+                itemSize / 2,
                 velocityThreshold * 2
             )
         }
@@ -177,14 +177,14 @@
     @Test
     fun aboveThresholdVelocityBackward_notLargeEnoughScroll_shouldGoToPreviousPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -197,7 +197,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                stepSize / 2,
+                itemSize / 2,
                 velocityThreshold * 2,
                 true
             )
@@ -213,14 +213,14 @@
     @Test
     fun aboveThresholdVelocity_largeEnoughScroll_shouldGoToNextNextPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -233,7 +233,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 velocityThreshold * 3
             )
         }
@@ -247,7 +247,7 @@
 
     @Test
     fun performFling_shouldPropagateVelocityIfHitEdges() {
-        var stepSize = 0f
+        var itemSize = 0f
         var latestAvailableVelocity = Velocity.Zero
         lateinit var lazyListState: LazyListState
         val inspectingNestedScrollConnection = object : NestedScrollConnection {
@@ -261,7 +261,7 @@
         rule.setContent {
             val density = LocalDensity.current
             lazyListState = rememberLazyListState(180) // almost at the end
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             Box(
                 modifier = Modifier
                     .fillMaxSize()
@@ -274,7 +274,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 30000f
             )
         }
@@ -296,7 +296,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                -1.5f * stepSize,
+                -1.5f * itemSize,
                 30000f
             )
         }
@@ -309,7 +309,7 @@
 
     @Test
     fun performFling_shouldConsumeAllVelocityIfInTheMiddleOfTheList() {
-        var stepSize = 0f
+        var itemSize = 0f
         var latestAvailableVelocity = Velocity.Zero
         lateinit var lazyListState: LazyListState
         val inspectingNestedScrollConnection = object : NestedScrollConnection {
@@ -323,7 +323,7 @@
         rule.setContent {
             val density = LocalDensity.current
             lazyListState = rememberLazyListState(100) // middle of the list
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             Box(
                 modifier = Modifier
                     .fillMaxSize()
@@ -336,7 +336,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 10000f // use a not so high velocity
             )
         }
@@ -358,7 +358,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                -1.5f * stepSize,
+                -1.5f * itemSize,
                 10000f // use a not so high velocity
             )
         }
@@ -371,14 +371,14 @@
 
     @Test
     fun remainingScrollOffset_shouldFollowAnimationOffsets() {
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
         val scrollOffset = mutableListOf<Float>()
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState()
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state, scrollOffset)
         }
@@ -388,7 +388,7 @@
         val velocity = velocityThreshold * 3
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 velocity
             )
         }
@@ -397,20 +397,15 @@
         // assert
         val initialTargetOffset =
             snapLayoutInfoProvider.calculateApproachOffset(velocity)
-        Truth.assertThat(scrollOffset[1]).isWithin(0.5f)
+        Truth.assertThat(scrollOffset.first()).isWithin(0.5f)
             .of(initialTargetOffset)
 
-        // act: wait for remaining offset to grow instead of decay, this indicates the last
-        // snap step will start
+        // act and assert: next calculated offset is the first value emitted by
+        // remainingScrollOffset this indicates the last snap step will start
         rule.mainClock.advanceTimeUntil {
-            scrollOffset.size > 2 &&
-                scrollOffset.last() > scrollOffset[scrollOffset.lastIndex - 1]
+            scrollOffset.last() == snapLayoutInfoProvider.calculateSnappingOffset(10000f)
         }
 
-        // assert: next calculated offset is the first value emitted by remainingScrollOffset
-        val finalRemainingOffset = snapLayoutInfoProvider.calculateSnappingOffset(10000f)
-        Truth.assertThat(scrollOffset.last()).isWithin(0.5f)
-            .of(finalRemainingOffset)
         rule.mainClock.autoAdvance = true
 
         // assert: value settles back to zero
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt
index 38e7560..81abc8d 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt
@@ -24,6 +24,7 @@
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.TwoWayConverter
 import androidx.compose.animation.core.VectorizedAnimationSpec
+import androidx.compose.animation.core.calculateTargetValue
 import androidx.compose.animation.core.generateDecayAnimationSpec
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.tween
@@ -31,6 +32,7 @@
 import androidx.compose.foundation.TestScrollMotionDurationScale
 import androidx.compose.foundation.gestures.FlingBehavior
 import androidx.compose.foundation.gestures.rememberScrollableState
+import androidx.compose.foundation.gestures.snapping.FinalSnappingItem
 import androidx.compose.foundation.gestures.snapping.MinFlingVelocityDp
 import androidx.compose.foundation.gestures.snapping.NoVelocity
 import androidx.compose.foundation.gestures.snapping.SnapFlingBehavior
@@ -52,19 +54,19 @@
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performTouchInput
 import androidx.compose.ui.test.swipeWithVelocity
-import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth
+import kotlin.math.absoluteValue
 import kotlin.test.assertEquals
 import kotlin.test.assertNotEquals
+import kotlin.test.assertTrue
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
@@ -82,45 +84,17 @@
     private val inspectSpringAnimationSpec = InspectSpringAnimationSpec(spring())
     private val inspectTweenAnimationSpec = InspectSpringAnimationSpec(tween(easing = LinearEasing))
 
-    private val density: Density
-        get() = rule.density
-
     @Test
-    fun performFling_whenVelocityIsBelowThreshold_shouldShortSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
-        rule.setContent {
-            val testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() - 1)
-        }
-
-        rule.runOnIdle {
-            assertEquals(0, testLayoutInfoProvider.calculateApproachOffsetCount)
-        }
-    }
-
-    @Test
-    fun performFling_whenVelocityIsAboveThreshold_shouldLongSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
-        rule.setContent {
-            val testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() + 1)
-        }
-
-        rule.runOnIdle {
-            assertEquals(1, testLayoutInfoProvider.calculateApproachOffsetCount)
-        }
-    }
-
-    @Test
-    fun remainingScrollOffset_whenVelocityIsBelowThreshold_shouldRepresentShortSnapOffsets() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
+    fun remainingScrollOffset_cannotApproach_shouldRepresentJustSnappingOffsets() {
+        val approachOffset = 0.0f
+        val testLayoutInfoProvider = TestLayoutInfoProvider(approachOffset = approachOffset)
         lateinit var testFlingBehavior: SnapFlingBehavior
         val scrollOffset = mutableListOf<Float>()
         rule.setContent {
             testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
             VelocityEffect(
                 testFlingBehavior,
-                calculateVelocityThreshold() - 1
+                0.0f,
             ) { remainingScrollOffset ->
                 scrollOffset.add(remainingScrollOffset)
             }
@@ -128,37 +102,42 @@
 
         // Will Snap Back
         rule.runOnIdle {
-            assertEquals(scrollOffset.first(), testLayoutInfoProvider.minOffset)
+            assertEquals(scrollOffset.first(), approachOffset)
+            assertEquals(scrollOffset[1], testLayoutInfoProvider.minOffset)
             assertEquals(scrollOffset.last(), 0f)
         }
     }
 
     @Test
-    fun remainingScrollOffset_whenVelocityIsAboveThreshold_shouldRepresentLongSnapOffsets() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
+    fun remainingScrollOffset_canApproach_shouldRepresentApproachAndSnapOffsets() {
+        val approachOffset = 100f
+        val testLayoutInfoProvider =
+            TestLayoutInfoProvider(approachOffset = approachOffset)
         lateinit var testFlingBehavior: SnapFlingBehavior
         val scrollOffset = mutableListOf<Float>()
         rule.setContent {
             testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
             VelocityEffect(
                 testFlingBehavior,
-                calculateVelocityThreshold() + 1
+                TestVelocity
             ) { remainingScrollOffset ->
                 scrollOffset.add(remainingScrollOffset)
             }
         }
 
         rule.runOnIdle {
-            assertEquals(scrollOffset.first { it != 0f }, testLayoutInfoProvider.maxOffset)
+            assertEquals(scrollOffset.first(), approachOffset)
+            assertTrue(scrollOffset.contains(testLayoutInfoProvider.maxOffset))
             assertEquals(scrollOffset.last(), 0f)
         }
     }
 
     @Test
-    fun remainingScrollOffset_longSnap_targetShouldChangeInAccordanceWithAnimation() {
+    fun remainingScrollOffset_targetShouldChangeInAccordanceWithAnimation() {
         // Arrange
         val initialOffset = 250f
-        val testLayoutInfoProvider = TestLayoutInfoProvider(approachOffset = initialOffset)
+        val testLayoutInfoProvider =
+            TestLayoutInfoProvider(approachOffset = initialOffset)
         lateinit var testFlingBehavior: SnapFlingBehavior
         val scrollOffset = mutableListOf<Float>()
         rule.mainClock.autoAdvance = false
@@ -166,7 +145,7 @@
             testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
             VelocityEffect(
                 testFlingBehavior,
-                calculateVelocityThreshold() + 1
+                TestVelocity
             ) { remainingScrollOffset ->
                 scrollOffset.add(remainingScrollOffset)
             }
@@ -176,14 +155,11 @@
         // snap layout info provider
         assertEquals(scrollOffset.first(), initialOffset)
 
-        // Act: Advance until remainingScrollOffset grows again
+        // Act: Advance until we reach the maxOffset.
         rule.mainClock.advanceTimeUntil {
-            scrollOffset.size > 2 &&
-                scrollOffset.last() > scrollOffset[scrollOffset.lastIndex - 1]
+            scrollOffset.last() == testLayoutInfoProvider.maxOffset
         }
 
-        assertEquals(scrollOffset.last(), testLayoutInfoProvider.maxOffset)
-
         rule.mainClock.autoAdvance = true
         // Assert
         rule.runOnIdle {
@@ -246,55 +222,67 @@
     @Test
     fun findClosestOffset_flingDirection_shouldReturnCorrectBound() {
         val testLayoutInfoProvider = TestLayoutInfoProvider()
-        val forwardOffset = testLayoutInfoProvider.calculateSnappingOffset(1f)
-        val backwardOffset = testLayoutInfoProvider.calculateSnappingOffset(-1f)
+        val forwardOffset = testLayoutInfoProvider.calculateSnappingOffset(with(rule.density) {
+            MinFlingVelocityDp.toPx()
+        })
+        val backwardOffset = testLayoutInfoProvider.calculateSnappingOffset(-with(rule.density) {
+            MinFlingVelocityDp.toPx()
+        })
         assertEquals(forwardOffset, MaxOffset)
         assertEquals(backwardOffset, MinOffset)
     }
 
     @Test
     fun approach_cannotDecay_useLowVelocityApproachAndSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider(approachOffset = SnapStep * 5)
-        var inspectSplineAnimationSpec: InspectSplineAnimationSpec? = null
+        val splineAnimationSpec =
+            InspectSplineAnimationSpec(SplineBasedFloatDecayAnimationSpec(rule.density))
+        val decaySpec: DecayAnimationSpec<Float> = splineAnimationSpec.generateDecayAnimationSpec()
+        val canNotDecayApproach = decaySpec.calculateTargetValue(0.0f, TestVelocity) + 1
+        val testLayoutInfoProvider = TestLayoutInfoProvider(
+            maxOffset = 100f,
+            approachOffset = canNotDecayApproach
+        )
+
         rule.setContent {
-            val splineAnimationSpec = rememberInspectSplineAnimationSpec().also {
-                inspectSplineAnimationSpec = it
-            }
             val testFlingBehavior = rememberSnapFlingBehavior(
                 snapLayoutInfoProvider = testLayoutInfoProvider,
-                highVelocityApproachSpec = splineAnimationSpec.generateDecayAnimationSpec(),
+                highVelocityApproachSpec = decaySpec,
                 lowVelocityApproachSpec = inspectTweenAnimationSpec,
                 snapAnimationSpec = inspectSpringAnimationSpec
             )
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() * 2)
+            VelocityEffect(testFlingBehavior, TestVelocity)
         }
 
         rule.runOnIdle {
-            assertEquals(0, inspectSplineAnimationSpec?.animationWasExecutions)
+            assertEquals(0, splineAnimationSpec.animationWasExecutions)
             assertEquals(1, inspectTweenAnimationSpec.animationWasExecutions)
             assertEquals(1, inspectSpringAnimationSpec.animationWasExecutions)
         }
     }
 
     @Test
-    fun approach_canDecay_decayAndSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider(maxOffset = 100f)
-        var inspectSplineAnimationSpec: InspectSplineAnimationSpec? = null
+    fun approach_canDecay_useHighVelocityApproachAndSnap() {
+        val splineAnimationSpec =
+            InspectSplineAnimationSpec(SplineBasedFloatDecayAnimationSpec(rule.density))
+        val decaySpec: DecayAnimationSpec<Float> = splineAnimationSpec.generateDecayAnimationSpec()
+        val canDecayApproach = decaySpec.calculateTargetValue(0.0f, TestVelocity) - 1
+        val testLayoutInfoProvider = TestLayoutInfoProvider(
+            maxOffset = 100f,
+            approachOffset = canDecayApproach
+        )
+
         rule.setContent {
-            val splineAnimationSpec = rememberInspectSplineAnimationSpec().also {
-                inspectSplineAnimationSpec = it
-            }
             val testFlingBehavior = rememberSnapFlingBehavior(
                 snapLayoutInfoProvider = testLayoutInfoProvider,
-                highVelocityApproachSpec = splineAnimationSpec.generateDecayAnimationSpec(),
+                highVelocityApproachSpec = decaySpec,
                 lowVelocityApproachSpec = inspectTweenAnimationSpec,
                 snapAnimationSpec = inspectSpringAnimationSpec
             )
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() * 5)
+            VelocityEffect(testFlingBehavior, TestVelocity)
         }
 
         rule.runOnIdle {
-            assertEquals(1, inspectSplineAnimationSpec?.animationWasExecutions)
+            assertEquals(1, splineAnimationSpec.animationWasExecutions)
             assertEquals(1, inspectSpringAnimationSpec.animationWasExecutions)
             assertEquals(0, inspectTweenAnimationSpec.animationWasExecutions)
         }
@@ -438,6 +426,33 @@
             Truth.assertThat(state.firstVisibleItemIndex).isNotEqualTo(previousIndex)
         }
     }
+
+    inner class TestLayoutInfoProvider(
+        val minOffset: Float = MinOffset,
+        val maxOffset: Float = MaxOffset,
+        val approachOffset: Float = 0f
+    ) : SnapLayoutInfoProvider {
+
+        private fun calculateFinalSnappingItem(velocity: Float): FinalSnappingItem {
+            return if (velocity.absoluteValue == 0.0f) {
+                FinalSnappingItem.ClosestItem
+            } else {
+                if (velocity > 0) FinalSnappingItem.NextItem else FinalSnappingItem.PreviousItem
+            }
+        }
+
+        override fun calculateSnappingOffset(currentVelocity: Float): Float {
+            return calculateFinalOffset(
+                calculateFinalSnappingItem(currentVelocity),
+                minOffset,
+                maxOffset
+            )
+        }
+
+        override fun calculateApproachOffset(initialVelocity: Float): Float {
+            return approachOffset
+        }
+    }
 }
 
 @OptIn(ExperimentalFoundationApi::class)
@@ -497,47 +512,11 @@
     }
 }
 
-@Composable
-private fun rememberInspectSplineAnimationSpec(): InspectSplineAnimationSpec {
-    val density = LocalDensity.current
-    return remember {
-        InspectSplineAnimationSpec(
-            SplineBasedFloatDecayAnimationSpec(density)
-        )
-    }
-}
-
-@Composable
-private fun calculateVelocityThreshold(): Float {
-    val density = LocalDensity.current
-    return with(density) { MinFlingVelocityDp.toPx() }
-}
-
-private const val SnapStep = 250f
+private const val TestVelocity = 1000f
 private const val MinOffset = -200f
 private const val MaxOffset = 300f
 
 @OptIn(ExperimentalFoundationApi::class)
-
-private class TestLayoutInfoProvider(
-    val minOffset: Float = MinOffset,
-    val maxOffset: Float = MaxOffset,
-    val snapStep: Float = SnapStep,
-    val approachOffset: Float = 0f
-) : SnapLayoutInfoProvider {
-    var calculateApproachOffsetCount = 0
-
-    override fun calculateSnappingOffset(currentVelocity: Float): Float {
-        return calculateFinalOffset(currentVelocity, minOffset, maxOffset)
-    }
-
-    override fun calculateApproachOffset(initialVelocity: Float): Float {
-        calculateApproachOffsetCount++
-        return approachOffset
-    }
-}
-
-@OptIn(ExperimentalFoundationApi::class)
 @Composable
 private fun rememberSnapFlingBehavior(
     snapLayoutInfoProvider: SnapLayoutInfoProvider,
@@ -545,7 +524,7 @@
     lowVelocityApproachSpec: AnimationSpec<Float>,
     snapAnimationSpec: AnimationSpec<Float>
 ): FlingBehavior {
-    val density = LocalDensity.current
+
     return remember(
         snapLayoutInfoProvider,
         highVelocityApproachSpec
@@ -555,7 +534,6 @@
             lowVelocityAnimationSpec = lowVelocityApproachSpec,
             highVelocityAnimationSpec = highVelocityApproachSpec,
             snapAnimationSpec = snapAnimationSpec,
-            shortSnapVelocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
         )
     }
 }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt
index bd28466..98952e5 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt
@@ -147,6 +147,48 @@
     }
 
     @Test
+    fun moveFocusAmongVisibleItems_userScrollIsOff() {
+        // Arrange.
+        rule.setTestContent {
+            lazyList(50.dp, lazyListState, userScrollEnabled = false) {
+                item { FocusableBox(0) }
+                item { FocusableBox(1, initiallyFocused) }
+                item { FocusableBox(2) }
+            }
+        }
+        rule.runOnIdle { initiallyFocused.requestFocus() }
+
+        // Act.
+        val success = rule.runOnIdle {
+            focusManager.moveFocus(focusDirection)
+        }
+
+        // Assert.
+        rule.runOnIdle {
+            assertThat(success).apply { if (focusDirection == Enter) isFalse() else isTrue() }
+            when (focusDirection) {
+                Left -> when (layoutDirection) {
+                    Ltr -> assertThat(isFocused[if (reverseLayout) 2 else 0]).isTrue()
+                    Rtl -> assertThat(isFocused[if (reverseLayout) 0 else 2]).isTrue()
+                }
+
+                Right -> when (layoutDirection) {
+                    Ltr -> assertThat(isFocused[if (reverseLayout) 0 else 2]).isTrue()
+                    Rtl -> assertThat(isFocused[if (reverseLayout) 2 else 0]).isTrue()
+                }
+
+                Up -> assertThat(isFocused[if (reverseLayout) 2 else 0]).isTrue()
+                Down -> assertThat(isFocused[if (reverseLayout) 0 else 2]).isTrue()
+                Previous -> assertThat(isFocused[0]).isTrue()
+                Next -> assertThat(isFocused[2]).isTrue()
+                Enter -> assertThat(isFocused[1]).isTrue()
+                Exit -> assertThat(isLazyListFocused).isTrue()
+                else -> unsupportedDirection()
+            }
+        }
+    }
+
+    @Test
     fun moveFocusToItemThatIsJustBeyondBounds() {
         // Arrange.
         rule.setTestContent {
@@ -203,6 +245,43 @@
     }
 
     @Test
+    fun moveFocusToItemThatIsJustBeyondBounds_userScrollIsOff() {
+        // Arrange.
+        rule.setTestContent {
+            lazyList(30.dp, lazyListState, userScrollEnabled = false) {
+                items(5) { FocusableBox(it) }
+                item { FocusableBox(5, initiallyFocused) }
+                items(5) { FocusableBox(it + 6) }
+            }
+        }
+        rule.runOnIdle {
+            // Scroll so that the focused item is in the middle.
+            runBlocking { lazyListState.scrollToItem(4) }
+
+            // Move focus to the last visible item.
+            initiallyFocused.requestFocus()
+            when (focusDirection) {
+                Left, Right, Up, Down, Previous, Next -> focusManager.moveFocus(focusDirection)
+                Enter, Exit -> {
+                    // Do nothing
+                }
+
+                else -> unsupportedDirection()
+            }
+        }
+        val firstVisibleItemIndex = lazyListState.firstVisibleItemIndex
+        // Act.
+        rule.runOnIdle {
+            focusManager.moveFocus(focusDirection)
+        }
+
+        // Assert We Did Not Move
+        rule.runOnIdle {
+            assertThat(lazyListState.firstVisibleItemIndex).isEqualTo(firstVisibleItemIndex)
+        }
+    }
+
+    @Test
     fun moveFocusToItemThatIsFarBeyondBounds() {
         // Arrange.
         rule.setTestContent {
@@ -471,6 +550,7 @@
     private fun lazyList(
         size: Dp,
         state: LazyListState = rememberLazyListState(),
+        userScrollEnabled: Boolean = true,
         content: LazyListScope.() -> Unit
     ) {
         when (focusDirection) {
@@ -481,7 +561,8 @@
                     .focusable(),
                 state = state,
                 reverseLayout = reverseLayout,
-                content = content
+                content = content,
+                userScrollEnabled = userScrollEnabled
             )
 
             Up, Down -> LazyColumn(
@@ -491,7 +572,8 @@
                     .focusable(),
                 state = state,
                 reverseLayout = reverseLayout,
-                content = content
+                content = content,
+                userScrollEnabled = userScrollEnabled
             )
 
             else -> unsupportedDirection()
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
index b1ff435..bce771a 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
@@ -23,7 +23,6 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.focusable
 import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.gestures.snapping.MinFlingVelocityDp
 import androidx.compose.foundation.gestures.snapping.SnapFlingBehavior
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.PaddingValues
@@ -39,6 +38,7 @@
 import androidx.compose.ui.focus.FocusManager
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.focus.onFocusChanged
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
@@ -67,9 +67,10 @@
     lateinit var scope: CoroutineScope
     var pagerSize: Int = 0
     var placed = mutableSetOf<Int>()
+    var focused = mutableSetOf<Int>()
     var pageSize: Int = 0
     lateinit var focusManager: FocusManager
-    lateinit var firstItemFocusRequester: FocusRequester
+    lateinit var initialFocusedItem: FocusRequester
     var composeView: View? = null
     lateinit var pagerState: PagerState
 
@@ -123,7 +124,6 @@
         contentPadding: PaddingValues = config.mainAxisContentPadding,
         pageSpacing: Dp = config.pageSpacing,
         reverseLayout: Boolean = config.reverseLayout,
-        snapVelocityThreshold: Dp = MinFlingVelocityDp,
         snapPositionalThreshold: Float = 0.5f,
         key: ((index: Int) -> Any)? = null,
         pageContent: @Composable PagerScope.(page: Int) -> Unit = { Page(index = it) }
@@ -139,7 +139,6 @@
                 PagerDefaults.flingBehavior(
                     state = state,
                     pagerSnapDistance = snappingPage,
-                    snapVelocityThreshold = snapVelocityThreshold,
                     snapPositionalThreshold = snapPositionalThreshold
                 )
             CompositionLocalProvider(
@@ -174,9 +173,9 @@
     }
 
     @Composable
-    internal fun Page(index: Int) {
+    internal fun Page(index: Int, initialFocusedItemIndex: Int = 0) {
         val focusRequester = FocusRequester().also {
-            if (index == 0) firstItemFocusRequester = it
+            if (index == initialFocusedItemIndex) initialFocusedItem = it
         }
         Box(modifier = Modifier
             .focusRequester(focusRequester)
@@ -187,8 +186,16 @@
             .fillMaxSize()
             .background(Color.Blue)
             .testTag("$index")
+            .onFocusChanged {
+                if (it.isFocused) {
+                    focused.add(index)
+                } else {
+                    focused.remove(index)
+                }
+            }
             .focusable(),
-            contentAlignment = Alignment.Center) {
+            contentAlignment = Alignment.Center
+        ) {
             BasicText(text = index.toString())
         }
     }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt
index 696c7c2..e66c0b8 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt
@@ -19,6 +19,7 @@
 import android.view.accessibility.AccessibilityNodeProvider
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.focus.FocusDirection
 import androidx.compose.ui.semantics.SemanticsActions
@@ -28,8 +29,8 @@
 import androidx.compose.ui.test.assert
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performScrollTo
+import androidx.compose.ui.unit.dp
 import androidx.core.view.ViewCompat
-import androidx.test.filters.LargeTest
 import com.google.common.truth.Truth.assertThat
 import org.junit.Ignore
 import org.junit.Test
@@ -37,7 +38,6 @@
 import org.junit.runners.Parameterized
 
 @OptIn(ExperimentalFoundationApi::class)
-@LargeTest
 @RunWith(Parameterized::class)
 class PagerAccessibilityTest(config: ParamConfig) : BasePagerTest(config = config) {
 
@@ -55,13 +55,15 @@
     fun accessibilityScroll_scrollToPage() {
         createPager(beyondBoundsPageCount = 1)
 
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(0) }
+        assertThat(pagerState.currentPage).isEqualTo(0)
 
         rule.onNodeWithTag("1").assertExists()
         rule.onNodeWithTag("1").performScrollTo()
 
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(1) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(1)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
     }
 
     @Ignore
@@ -69,7 +71,7 @@
     fun accessibilityPaging_animateScrollToPage() {
         createPager(initialPage = 5, pageCount = { DefaultPageCount })
 
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(5) }
+        assertThat(pagerState.currentPage).isEqualTo(5)
 
         val actionBackward = if (vertical) {
             android.R.id.accessibilityActionPageUp
@@ -86,8 +88,10 @@
         }
 
         // Go to the previous page
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(4) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(4)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
 
         val actionForward = if (vertical) {
             android.R.id.accessibilityActionPageDown
@@ -104,8 +108,10 @@
         }
 
         // Go to the next page
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(5) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
     }
 
     @Ignore
@@ -130,21 +136,96 @@
     fun focusScroll_forwardAndBackward_shouldGoToPage_pageShouldBeCorrectlyPlaced() {
         // Arrange
         createPager(pageCount = { DefaultPageCount })
-        rule.runOnIdle { firstItemFocusRequester.requestFocus() }
+        rule.runOnUiThread { initialFocusedItem.requestFocus() }
+        rule.waitForIdle()
 
         // Act: move forward
-        rule.runOnIdle { focusManager.moveFocus(FocusDirection.Next) }
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Next) }
 
         // Assert
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(1) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(1)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
 
         // Act: move backward
-        rule.runOnIdle { focusManager.moveFocus(FocusDirection.Previous) }
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Previous) }
 
         // Assert
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(0) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(0)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
+    }
+
+    @Test
+    fun userScrollEnabledIsOff_fillPages_focusScroll_shouldNotMovePages() {
+        // Arrange
+        val initialPage = 5
+        createPager(
+            initialPage = initialPage,
+            pageCount = { DefaultPageCount },
+            userScrollEnabled = false
+        ) {
+            Page(index = it, initialFocusedItemIndex = initialPage)
+        }
+        rule.runOnUiThread { initialFocusedItem.requestFocus() }
+        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(initialPage) }
+
+        // Act: move forward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Next) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
+
+        // Act: move backward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Previous) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
+    }
+
+    @Test
+    fun userScrollEnabledIsOff_fixedPages_focusScroll_shouldNotMovePages() {
+        // Arrange
+        val initialPage = 5
+        createPager(
+            modifier = Modifier.size(100.dp),
+            initialPage = initialPage,
+            pageCount = { DefaultPageCount },
+            userScrollEnabled = false,
+            pageSize = { PageSize.Fixed(10.dp) }
+        ) {
+            Page(index = it, initialFocusedItemIndex = initialPage)
+        }
+        rule.runOnUiThread { initialFocusedItem.requestFocus() }
+        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(initialPage) }
+
+        // Act: move forward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Next) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+            assertThat(focused).containsExactly(6)
+        }
+
+        // Act: move backward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Previous) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+            assertThat(focused).containsExactly(5)
+        }
     }
 
     private fun <T> SemanticsNodeInteraction.withSemanticsNode(block: SemanticsNode.() -> T): T {
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
index e6321c8..61dae64 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
@@ -416,46 +416,6 @@
     }
 
     @Test
-    fun swipeWithLowVelocity_customVelocityThreshold_shouldBounceBack() {
-        // Arrange
-        val snapVelocityThreshold = 200.dp
-        createPager(
-            initialPage = 5,
-            modifier = Modifier.fillMaxSize(),
-            snapVelocityThreshold = snapVelocityThreshold
-        )
-        val delta = pagerSize * 0.4f * scrollForwardSign
-
-        // Act - forward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
-                    delta
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("5").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(5)
-
-        // Act - backward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
-                    delta * -1
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("5").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(5)
-    }
-
-    @Test
     fun swipeWithHighVelocity_defaultVelocityThreshold_shouldGoToNextPage() {
         // Arrange
         createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
@@ -492,47 +452,6 @@
     }
 
     @Test
-    fun swipeWithHighVelocity_customVelocityThreshold_shouldGoToNextPage() {
-        // Arrange
-        val snapVelocityThreshold = 200.dp
-        createPager(
-            initialPage = 5,
-            modifier = Modifier.fillMaxSize(),
-            snapVelocityThreshold = snapVelocityThreshold
-        )
-        // make sure the scroll distance is not enough to go to next page
-        val delta = pagerSize * 0.4f * scrollForwardSign
-
-        // Act - forward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
-                    delta
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("6").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(6)
-
-        // Act - backward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
-                    delta * -1
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("5").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(5)
-    }
-
-    @Test
     fun swipeWithHighVelocity_overHalfPage_shouldGoToNextPage() {
         // Arrange
         createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/MultiTextMinTouchBoundsSelectionGesturesTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/MultiTextMinTouchBoundsSelectionGesturesTest.kt
new file mode 100644
index 0000000..4fecf01
--- /dev/null
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/MultiTextMinTouchBoundsSelectionGesturesTest.kt
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2023 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 androidx.compose.foundation.text.selection.gestures
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.text.BasicText
+import androidx.compose.foundation.text.selection.Selection
+import androidx.compose.foundation.text.selection.SelectionContainer
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.ExpectedText.EITHER
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.ExpectedText.FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.ExpectedText.SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestHorizontal.CENTER
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestHorizontal.LEFT
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestHorizontal.RIGHT
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.ABOVE
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.BELOW
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.NO_OVERLAP_BELONGS_TO_FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.NO_OVERLAP_BELONGS_TO_SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.ON_FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.ON_SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.OVERLAP_BELONGS_TO_FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.OVERLAP_BELONGS_TO_SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.OVERLAP_EQUIDISTANT
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.testutils.TestViewConfiguration
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.platform.LocalViewConfiguration
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.longClick
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@MediumTest
+@RunWith(Parameterized::class)
+internal class MultiTextMinTouchBoundsSelectionGesturesTest(
+    private val horizontal: TestHorizontal,
+    private val vertical: TestVertical,
+    private val expectedText: ExpectedText,
+) : AbstractSelectionGesturesTest() {
+    // dp and sp is the same with our density
+    private val dpLen = 20.dp
+    private val spLen = 20.sp
+
+    /**
+     * When two 20x20 texts are stacked with 20 space between,
+     * we want the touch targets to overlap a little for this test,
+     * so we pick a minTouchTarget size of an additional 12 on each side.
+     *
+     * With this setup, on the y-axis:
+     *   * 0..20 is the first text
+     *   * 40..60 is the second text
+     *   * -12..32 is the first minTouchTarget
+     *   * 28..72 is the second minTouchTarget
+     *
+     * Given the above:
+     *   * 21..27 belongs solely to the first text
+     *   * 29 overlaps both, but is closer to the first text
+     *   * 30 overlaps both, and is equidistant to both
+     *   * 31 overlaps both, but is closer to the second text
+     *   * 32..39 belongs solely to the second text
+     */
+    private val touchTargetDpLen = dpLen + 12.dp * 2
+
+    enum class TestHorizontal(val x: Float) {
+        LEFT(-6f),
+        CENTER(10f),
+        RIGHT(26f)
+    }
+
+    enum class TestVertical(val y: Float) {
+        ABOVE(-6f),
+        ON_FIRST(10f),
+        NO_OVERLAP_BELONGS_TO_FIRST(25f),
+        OVERLAP_BELONGS_TO_FIRST(29f),
+        OVERLAP_EQUIDISTANT(30f),
+        OVERLAP_BELONGS_TO_SECOND(31f),
+        NO_OVERLAP_BELONGS_TO_SECOND(35f),
+        ON_SECOND(50f),
+        BELOW(66f),
+    }
+
+    enum class ExpectedText(val selectableId: Long?) {
+        FIRST(1L),
+        SECOND(2L),
+        EITHER(null),
+    }
+
+    override val pointerAreaTag = "selectionContainer"
+    private val text = "A"
+    private val textStyle = TextStyle(fontSize = spLen, fontFamily = fontFamily)
+    private val minTouchTargetSize = DpSize(touchTargetDpLen, touchTargetDpLen)
+    private val testViewConfiguration =
+        TestViewConfiguration(minimumTouchTargetSize = minTouchTargetSize)
+
+    private val selection = mutableStateOf<Selection?>(null)
+
+    @Composable
+    override fun Content() {
+        SelectionContainer(
+            selection = selection.value,
+            onSelectionChange = { selection.value = it },
+            modifier = Modifier.testTag(pointerAreaTag)
+        ) {
+            CompositionLocalProvider(LocalViewConfiguration provides testViewConfiguration) {
+                Column(verticalArrangement = Arrangement.spacedBy(dpLen)) {
+                    repeat(2) { BasicText(text = text, style = textStyle) }
+                }
+            }
+        }
+    }
+
+    companion object {
+        @JvmStatic
+        @Parameterized.Parameters(name = "horizontal={0}, vertical={1} expectedId={2}")
+        fun data(): Collection<Array<Any>> = listOf(
+            arrayOf(LEFT, ABOVE, FIRST),
+            arrayOf(LEFT, ON_FIRST, FIRST),
+            arrayOf(LEFT, NO_OVERLAP_BELONGS_TO_FIRST, FIRST),
+            arrayOf(LEFT, OVERLAP_BELONGS_TO_FIRST, FIRST),
+            arrayOf(LEFT, OVERLAP_EQUIDISTANT, EITHER),
+            arrayOf(LEFT, OVERLAP_BELONGS_TO_SECOND, SECOND),
+            arrayOf(LEFT, NO_OVERLAP_BELONGS_TO_SECOND, SECOND),
+            arrayOf(LEFT, ON_SECOND, SECOND),
+            arrayOf(LEFT, BELOW, SECOND),
+            arrayOf(CENTER, ABOVE, FIRST),
+            arrayOf(CENTER, ON_FIRST, FIRST),
+            arrayOf(CENTER, NO_OVERLAP_BELONGS_TO_FIRST, FIRST),
+            arrayOf(CENTER, OVERLAP_BELONGS_TO_FIRST, FIRST),
+            arrayOf(CENTER, OVERLAP_EQUIDISTANT, EITHER),
+            arrayOf(CENTER, OVERLAP_BELONGS_TO_SECOND, SECOND),
+            arrayOf(CENTER, NO_OVERLAP_BELONGS_TO_SECOND, SECOND),
+            arrayOf(CENTER, ON_SECOND, SECOND),
+            arrayOf(CENTER, BELOW, SECOND),
+            arrayOf(RIGHT, ABOVE, FIRST),
+            arrayOf(RIGHT, ON_FIRST, FIRST),
+            arrayOf(RIGHT, NO_OVERLAP_BELONGS_TO_FIRST, FIRST),
+            arrayOf(RIGHT, OVERLAP_BELONGS_TO_FIRST, FIRST),
+            arrayOf(RIGHT, OVERLAP_EQUIDISTANT, EITHER),
+            arrayOf(RIGHT, OVERLAP_BELONGS_TO_SECOND, SECOND),
+            arrayOf(RIGHT, NO_OVERLAP_BELONGS_TO_SECOND, SECOND),
+            arrayOf(RIGHT, ON_SECOND, SECOND),
+            arrayOf(RIGHT, BELOW, SECOND),
+        )
+    }
+
+    @Test
+    fun minTouchTargetSelectionGestureTest() {
+        performTouchGesture { longClick(Offset(horizontal.x, vertical.y)) }
+
+        val expectedSelectableId = expectedText.selectableId
+        if (expectedSelectableId == null) {
+            // verify something is selected
+            assertThat(selection).isNotNull()
+        } else {
+            assertSelectedSelectableIs(expectedSelectableId)
+        }
+    }
+
+    private fun assertSelectedSelectableIs(selectableId: Long) {
+        val expectedSelection = Selection(
+            start = Selection.AnchorInfo(ResolvedTextDirection.Ltr, 0, selectableId),
+            end = Selection.AnchorInfo(ResolvedTextDirection.Ltr, 1, selectableId),
+            handlesCrossed = false,
+        )
+        assertThat(selection.value).isEqualTo(expectedSelection)
+    }
+}
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
index 0cc7865..c9f0c93 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
@@ -325,7 +325,7 @@
 
     @Test
     fun selectionSemanticsAreSet_afterRecomposition() {
-        val state = TextFieldState("hello")
+        val state = TextFieldState("hello", initialSelectionInChars = TextRange.Zero)
         rule.setContent {
             BasicTextField2(
                 state = state,
@@ -425,8 +425,8 @@
 
     @Test
     fun semanticsAreSet_afterStateObjectChanges() {
-        val state1 = TextFieldState("hello")
-        val state2 = TextFieldState("world", TextRange(2))
+        val state1 = TextFieldState("hello", initialSelectionInChars = TextRange.Zero)
+        val state2 = TextFieldState("world", initialSelectionInChars = TextRange(2))
         var chosenState by mutableStateOf(true)
         rule.setContent {
             BasicTextField2(
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/RememberTextFieldStateTest.kt
similarity index 60%
rename from compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt
rename to compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/RememberTextFieldStateTest.kt
index 8e49735..3f7526e 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/RememberTextFieldStateTest.kt
@@ -34,7 +34,7 @@
 @OptIn(ExperimentalFoundationApi::class)
 @SmallTest
 @RunWith(AndroidJUnit4::class)
-class TextFieldStateRestorationTest {
+class RememberTextFieldStateTest {
 
     @get:Rule
     val rule = createComposeRule()
@@ -42,6 +42,22 @@
     private val restorationTester = StateRestorationTester(rule)
 
     @Test
+    fun rememberTextFieldState_withInitialTextAndSelection() {
+        lateinit var state: TextFieldState
+        rule.setContent {
+            state = rememberTextFieldState(
+                initialText = "hello",
+                initialSelectionInChars = TextRange(2)
+            )
+        }
+
+        rule.runOnIdle {
+            assertThat(state.text.toString()).isEqualTo("hello")
+            assertThat(state.text.selectionInChars).isEqualTo(TextRange(2))
+        }
+    }
+
+    @Test
     fun rememberTextFieldState_restoresTextAndSelection() {
         lateinit var originalState: TextFieldState
         lateinit var restoredState: TextFieldState
@@ -68,4 +84,35 @@
             assertThat(restoredState.text.selectionInChars).isEqualTo(TextRange(0, 12))
         }
     }
+
+    @Test
+    fun rememberTextFieldState_withInitialTextAndSelection_restoresTextAndSelection() {
+        lateinit var originalState: TextFieldState
+        lateinit var restoredState: TextFieldState
+        var rememberCount = 0
+        restorationTester.setContent {
+            val state = rememberTextFieldState(
+                initialText = "this should be ignored",
+                initialSelectionInChars = TextRange.Zero
+            )
+            if (remember { rememberCount++ } == 0) {
+                originalState = state
+            } else {
+                restoredState = state
+            }
+        }
+        rule.runOnIdle {
+            originalState.edit {
+                replace(0, length, "hello, world")
+                selectAll()
+            }
+        }
+
+        restorationTester.emulateSavedInstanceStateRestore()
+
+        rule.runOnIdle {
+            assertThat(restoredState.text.toString()).isEqualTo("hello, world")
+            assertThat(restoredState.text.selectionInChars).isEqualTo(TextRange(0, 12))
+        }
+    }
 }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
index 7c12b07..7d62418 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
@@ -373,7 +373,7 @@
 
     @Test
     fun cursorHandle_disappearsOnVerticalScroll() {
-        state = TextFieldState("hello hello hello hello")
+        state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
         val scrollState = ScrollState(0)
         lateinit var scope: CoroutineScope
         rule.setContent {
@@ -404,7 +404,7 @@
 
     @Test
     fun cursorHandle_disappearsOnHorizontalScroll() = with(rule.density) {
-        state = TextFieldState("hello hello hello hello")
+        state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
         val scrollState = ScrollState(0)
         lateinit var scope: CoroutineScope
         rule.setContent {
@@ -435,7 +435,7 @@
 
     @Test
     fun cursorHandle_reappearsOnVerticalScroll() {
-        state = TextFieldState("hello hello hello hello")
+        state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
         val scrollState = ScrollState(0)
         rule.setContent {
             BasicTextField2(
@@ -470,7 +470,7 @@
 
     @Test
     fun cursorHandle_reappearsOnHorizontalScroll() {
-        state = TextFieldState("hello hello hello hello")
+        state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
         val scrollState = ScrollState(0)
         rule.setContent {
             BasicTextField2(
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt
index 9ad8a84..bdc7203 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt
@@ -151,7 +151,10 @@
             "\u05D0\u05D1\u05D2\u05D3"
 
         val tag = "BasicTextField2"
-        val state = TextFieldState("$fillerWord $fillerWord $fillerWord ".repeat(10))
+        val state = TextFieldState(
+            "$fillerWord $fillerWord $fillerWord ".repeat(10),
+            initialSelectionInChars = TextRange.Zero
+        )
 
         rule.setContent {
             CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/GraphicsSurface.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidExternalSurface.kt
similarity index 72%
rename from compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/GraphicsSurface.kt
rename to compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidExternalSurface.kt
index 17a6823..5d51fef 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/GraphicsSurface.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidExternalSurface.kt
@@ -35,10 +35,10 @@
 import kotlinx.coroutines.launch
 
 /**
- * [SurfaceScope] is a scoped environment provided by [GraphicsSurface] and
- * [EmbeddedGraphicsSurface] to handle [Surface] lifecycle events.
+ * [SurfaceScope] is a scoped environment provided by [AndroidExternalSurface] and
+ * [AndroidEmbeddedExternalSurface] to handle [Surface] lifecycle events.
  *
- * @sample androidx.compose.foundation.samples.GraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidExternalSurfaceColors
  */
 interface SurfaceScope {
     /**
@@ -58,29 +58,30 @@
 
 /**
  * [SurfaceCoroutineScope] is a scoped environment provided by
- * [GraphicsSurface] and [EmbeddedGraphicsSurface] when a new [Surface] is
+ * [AndroidExternalSurface] and [AndroidEmbeddedExternalSurface] when a new [Surface] is
  * created. This environment is a coroutine scope that also provides access to
  * a [SurfaceScope] environment which can itself be used to handle other [Surface]
  * lifecycle events.
  *
  * @see SurfaceScope
- * @see GraphicsSurfaceScope
+ * @see AndroidExternalSurfaceScope
  *
- * @sample androidx.compose.foundation.samples.GraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidExternalSurfaceColors
  */
 interface SurfaceCoroutineScope : SurfaceScope, CoroutineScope
 
 /**
- * [GraphicsSurfaceScope] is a scoped environment provided when a [GraphicsSurface]
- * or [EmbeddedGraphicsSurface] is first initialized. This environment can be
- * used to register a lambda to invoke when a new [Surface] associated with the
- * [GraphicsSurface]/[EmbeddedGraphicsSurface] is created.
+ * [AndroidExternalSurfaceScope] is a scoped environment provided when an
+ * [AndroidExternalSurface] or [AndroidEmbeddedExternalSurface] is first initialized.
+ * This environment can be used to register a lambda to invoke when a new [Surface]
+ * associated with the [AndroidExternalSurface]/[AndroidEmbeddedExternalSurface]
+ * is created.
  */
-interface GraphicsSurfaceScope {
+interface AndroidExternalSurfaceScope {
     /**
      * Invokes [onSurface] when a new [Surface] is created. The [onSurface] lambda
      * is invoked on the main thread as part of a [SurfaceCoroutineScope] to provide
-     * a coroutine context.
+     * a coroutine context. Always invoked on the main thread.
      *
      * @param onSurface Callback invoked when a new [Surface] is created. The initial
      *                  dimensions of the surface are provided.
@@ -92,13 +93,13 @@
 }
 
 /**
- * Base class for [GraphicsSurface] and [EmbeddedGraphicsSurface] state. This class
+ * Base class for [AndroidExternalSurface] and [AndroidEmbeddedExternalSurface] state. This class
  * provides methods to properly dispatch lifecycle events on [Surface] creation,
  * change, and destruction. Surface creation is treated as a coroutine launch,
  * using the specified [scope] as the parent. This scope must be the main thread scope.
  */
-private abstract class BaseGraphicsSurfaceState(val scope: CoroutineScope) :
-    GraphicsSurfaceScope, SurfaceScope {
+private abstract class BaseAndroidExternalSurfaceState(val scope: CoroutineScope) :
+    AndroidExternalSurfaceScope, SurfaceScope {
 
     private var onSurface:
         (suspend SurfaceCoroutineScope.(surface: Surface, width: Int, height: Int) -> Unit)? = null
@@ -130,7 +131,8 @@
             job = scope.launch(start = CoroutineStart.UNDISPATCHED) {
                 job?.cancelAndJoin()
                 val receiver =
-                    object : SurfaceCoroutineScope, SurfaceScope by this@BaseGraphicsSurfaceState,
+                    object : SurfaceCoroutineScope,
+                        SurfaceScope by this@BaseAndroidExternalSurfaceState,
                         CoroutineScope by this {}
                 onSurface?.invoke(receiver, surface, width, height)
             }
@@ -156,8 +158,8 @@
     }
 }
 
-private class GraphicsSurfaceState(scope: CoroutineScope) : BaseGraphicsSurfaceState(scope),
-    SurfaceHolder.Callback {
+private class AndroidExternalSurfaceState(scope: CoroutineScope) :
+    BaseAndroidExternalSurfaceState(scope), SurfaceHolder.Callback {
 
     var lastWidth = -1
     var lastHeight = -1
@@ -185,34 +187,39 @@
 }
 
 @Composable
-private fun rememberGraphicsSurfaceState(): GraphicsSurfaceState {
+private fun rememberAndroidExternalSurfaceState(): AndroidExternalSurfaceState {
     val scope = rememberCoroutineScope()
-    return remember { GraphicsSurfaceState(scope) }
+    return remember { AndroidExternalSurfaceState(scope) }
 }
 
 @JvmInline
-value class GraphicsSurfaceZOrder private constructor(val zOrder: Int) {
+value class AndroidExternalSurfaceZOrder private constructor(val zOrder: Int) {
     companion object {
-        val Behind = GraphicsSurfaceZOrder(0)
-        val MediaOverlay = GraphicsSurfaceZOrder(1)
-        val OnTop = GraphicsSurfaceZOrder(2)
+        val Behind = AndroidExternalSurfaceZOrder(0)
+        val MediaOverlay = AndroidExternalSurfaceZOrder(1)
+        val OnTop = AndroidExternalSurfaceZOrder(2)
     }
 }
 
 /**
- * Provides a dedicated drawing [Surface] as a separate layer positioned by default behind
- * the window holding the [GraphicsSurface] composable. Because [GraphicsSurface] uses
- * a separate window layer, graphics composition is handled by the system compositor which
- * can bypass the GPU and provide better performance and power usage characteristics compared
- * to [EmbeddedGraphicsSurface]. It is therefore recommended to use [GraphicsSurface]
- * whenever possible.
+ * Provides a dedicated drawing [Surface] as a separate layer positioned by default
+ * behind the window holding the [AndroidExternalSurface] composable. Because
+ * [AndroidExternalSurface] uses a separate window layer, graphics composition is handled
+ * by the system compositor which can bypass the GPU and provide better performance and
+ * power usage characteristics compared to [AndroidEmbeddedExternalSurface]. It is therefore
+ * recommended to use [AndroidExternalSurface] over [AndroidEmbeddedExternalSurface] whenever
+ * possible.
+ *
+ * The [Surface] provided can be used to present content that's external to Compose, such as
+ * a video stream (from a camera or a media player), OpenGL, Vulkan...The provided [Surface]
+ * can be rendered into using a thread different from the main thread.
  *
  * The z-ordering of the surface can be controlled using the [zOrder] parameter:
  *
- * - [GraphicsSurfaceZOrder.Behind]: positions the surface behind the window
- * - [GraphicsSurfaceZOrder.MediaOverlay]: positions the surface behind the window but
- *   above other [GraphicsSurfaceZOrder.Behind] surfaces
- * - [GraphicsSurfaceZOrder.OnTop]: positions the surface above the window
+ * - [AndroidExternalSurfaceZOrder.Behind]: positions the surface behind the window
+ * - [AndroidExternalSurfaceZOrder.MediaOverlay]: positions the surface behind the window but
+ *   above other [AndroidExternalSurfaceZOrder.Behind] surfaces
+ * - [AndroidExternalSurfaceZOrder.OnTop]: positions the surface above the window
  *
  * The drawing surface is opaque by default, which can be controlled with the [isOpaque]
  * parameter. When the surface is transparent, you may need to change the z-order to
@@ -220,7 +227,7 @@
  *
  * To start rendering, the caller must first acquire the [Surface] when it's created.
  * This is achieved by providing the [onInit] lambda, which allows the caller to
- * register an appropriate [GraphicsSurfaceScope.onSurface] callback. The [onInit]
+ * register an appropriate [AndroidExternalSurfaceScope.onSurface] callback. The [onInit]
  * lambda can also be used to initialize/cache resources needed once a surface is
  * available.
  *
@@ -237,7 +244,7 @@
  * be stretched at render time to fit the layout size. This can be used for instance to
  * render at a lower resolution for performance reasons.
  *
- * @param modifier Modifier to be applied to the [GraphicsSurface]
+ * @param modifier Modifier to be applied to the [AndroidExternalSurface]
  * @param isOpaque Whether the managed surface should be opaque or transparent.
  * @param zOrder Sets the z-order of the surface relative to its parent window.
  * @param surfaceSize Sets the surface size independently of the layout size of
@@ -250,18 +257,18 @@
  *               declare a [GraphicsSurfaceScope.onSurface] callback that will be
  *               invoked when a surface is available.
  *
- * @sample androidx.compose.foundation.samples.GraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidExternalSurfaceColors
  */
 @Composable
-fun GraphicsSurface(
+fun AndroidExternalSurface(
     modifier: Modifier = Modifier,
     isOpaque: Boolean = true,
-    zOrder: GraphicsSurfaceZOrder = GraphicsSurfaceZOrder.Behind,
+    zOrder: AndroidExternalSurfaceZOrder = AndroidExternalSurfaceZOrder.Behind,
     surfaceSize: IntSize = IntSize.Zero,
     isSecure: Boolean = false,
-    onInit: GraphicsSurfaceScope.() -> Unit
+    onInit: AndroidExternalSurfaceScope.() -> Unit
 ) {
-    val state = rememberGraphicsSurfaceState()
+    val state = rememberAndroidExternalSurfaceState()
 
     AndroidView(
         factory = { context ->
@@ -288,9 +295,9 @@
             )
 
             when (zOrder) {
-                GraphicsSurfaceZOrder.Behind -> view.setZOrderOnTop(false)
-                GraphicsSurfaceZOrder.MediaOverlay -> view.setZOrderMediaOverlay(true)
-                GraphicsSurfaceZOrder.OnTop -> view.setZOrderOnTop(true)
+                AndroidExternalSurfaceZOrder.Behind -> view.setZOrderOnTop(false)
+                AndroidExternalSurfaceZOrder.MediaOverlay -> view.setZOrderMediaOverlay(true)
+                AndroidExternalSurfaceZOrder.OnTop -> view.setZOrderOnTop(true)
             }
 
             view.setSecure(isSecure)
@@ -298,8 +305,8 @@
     )
 }
 
-private class EmbeddedGraphicsSurfaceState(scope: CoroutineScope) : BaseGraphicsSurfaceState(scope),
-    TextureView.SurfaceTextureListener {
+private class AndroidEmbeddedExternalSurfaceState(scope: CoroutineScope) :
+    BaseAndroidExternalSurfaceState(scope), TextureView.SurfaceTextureListener {
 
     var surfaceSize = IntSize.Zero
 
@@ -355,30 +362,36 @@
 }
 
 @Composable
-private fun rememberEmbeddedGraphicsSurfaceState(): EmbeddedGraphicsSurfaceState {
+private fun rememberAndroidEmbeddedExternalSurfaceState(): AndroidEmbeddedExternalSurfaceState {
     val scope = rememberCoroutineScope()
-    return remember { EmbeddedGraphicsSurfaceState(scope) }
+    return remember { AndroidEmbeddedExternalSurfaceState(scope) }
 }
 
 /**
  * Provides a dedicated drawing [Surface] embedded directly in the UI hierarchy.
- * Unlike [GraphicsSurface], [EmbeddedGraphicsSurface] positions its surface as a
- * regular element inside the composable hierarchy. This means that graphics
+ * Unlike [AndroidExternalSurface], [AndroidEmbeddedExternalSurface] positions its
+ * surface as a regular element inside the composable hierarchy. This means that graphics
  * composition is handled like any other UI widget, using the GPU. This can lead
- * to increased power and memory bandwidth usage compared to [GraphicsSurface]. It
- * is therefore recommended to use [GraphicsSurface] when possible.
+ * to increased power and memory bandwidth usage compared to [AndroidExternalSurface].
+ * It is therefore recommended to use [AndroidExternalSurface] over
+ * [AndroidEmbeddedExternalSurface] whenever possible.
  *
- * [EmbeddedGraphicsSurface] can however be useful when interactions with other widgets
+ * [AndroidEmbeddedExternalSurface] can however be useful when interactions with other widgets
  * is necessary, for instance if the surface needs to be "sandwiched" between two
  * other widgets, or if it must participate in visual effects driven by
  * a `Modifier.graphicsLayer{}`.
  *
+ * The [Surface] provided can be used to present content that's external to Compose,
+ * such as a video stream (from a camera or a media player), OpenGL, Vulkan...
+ * The provided [Surface] can be rendered into using a thread different from the main
+ * thread.
+ *
  * The drawing surface is opaque by default, which can be controlled with the [isOpaque]
  * parameter.
  *
  * To start rendering, the caller must first acquire the [Surface] when it's created.
  * This is achieved by providing the [onInit] lambda, which allows the caller to
- * register an appropriate [GraphicsSurfaceScope.onSurface] callback. The [onInit]
+ * register an appropriate [AndroidExternalSurfaceScope.onSurface] callback. The [onInit]
  * lambda can also be used to initialize/cache resources needed once a surface is
  * available.
  *
@@ -395,7 +408,7 @@
  * be stretched at render time to fit the layout size. This can be used for instance to
  * render at a lower resolution for performance reasons.
  *
- * @param modifier Modifier to be applied to the [GraphicsSurface]
+ * @param modifier Modifier to be applied to the [AndroidExternalSurface]
  * @param isOpaque Whether the managed surface should be opaque or transparent. If
  *                 transparent and [isMediaOverlay] is `false`, the surface will
  *                 be positioned above the parent window.
@@ -406,16 +419,16 @@
  *               declare a [GraphicsSurfaceScope.onSurface] callback that will be
  *               invoked when a surface is available.
  *
- * @sample androidx.compose.foundation.samples.EmbeddedGraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidEmbeddedExternalSurfaceColors
  */
 @Composable
-fun EmbeddedGraphicsSurface(
+fun AndroidEmbeddedExternalSurface(
     modifier: Modifier = Modifier,
     isOpaque: Boolean = true,
     surfaceSize: IntSize = IntSize.Zero,
-    onInit: GraphicsSurfaceScope.() -> Unit
+    onInit: AndroidExternalSurfaceScope.() -> Unit
 ) {
-    val state = rememberEmbeddedGraphicsSurfaceState()
+    val state = rememberAndroidEmbeddedExternalSurfaceState()
 
     AndroidView(
         factory = { context ->
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/draganddrop/AndroidDragAndDropSource.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/draganddrop/AndroidDragAndDropSource.android.kt
new file mode 100644
index 0000000..a531236
--- /dev/null
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/draganddrop/AndroidDragAndDropSource.android.kt
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2023 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 androidx.compose.foundation.draganddrop
+
+import android.graphics.Picture
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.CacheDrawModifierNode
+import androidx.compose.ui.draw.CacheDrawScope
+import androidx.compose.ui.draw.DrawResult
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.draw
+import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
+import androidx.compose.ui.graphics.nativeCanvas
+import androidx.compose.ui.input.pointer.PointerInputScope
+import androidx.compose.ui.node.DelegatingNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
+
+/**
+ * A Modifier that allows an element it is applied to to be treated like a source for
+ * drag and drop operations. It displays the element dragged as a drag shadow.
+ *
+ * Learn how to use [Modifier.dragAndDropSource]:
+ * @sample androidx.compose.foundation.samples.TextDragAndDropSourceSample
+ *
+ * @param block A lambda with a [DragAndDropSourceScope] as a receiver
+ * which provides a [PointerInputScope] to detect the drag gesture, after which a drag and drop
+ * gesture can be started with [DragAndDropSourceScope.startTransfer].
+ *
+ */
+@ExperimentalFoundationApi
+fun Modifier.dragAndDropSource(
+    block: suspend DragAndDropSourceScope.() -> Unit
+): Modifier = this then DragAndDropSourceWithDefaultShadowElement(
+    dragAndDropSourceHandler = block,
+)
+
+@ExperimentalFoundationApi
+private class DragAndDropSourceWithDefaultShadowElement(
+    /**
+     * @see Modifier.dragAndDropSource
+     */
+    val dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : ModifierNodeElement<DragSourceNodeWithDefaultPainter>() {
+    override fun create() = DragSourceNodeWithDefaultPainter(
+        dragAndDropSourceHandler = dragAndDropSourceHandler,
+    )
+
+    override fun update(node: DragSourceNodeWithDefaultPainter) = with(node) {
+        dragAndDropSourceHandler =
+            this@DragAndDropSourceWithDefaultShadowElement.dragAndDropSourceHandler
+    }
+
+    override fun InspectorInfo.inspectableProperties() {
+        name = "dragSourceWithDefaultPainter"
+        properties["dragAndDropSourceHandler"] = dragAndDropSourceHandler
+    }
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is DragAndDropSourceWithDefaultShadowElement) return false
+
+        return dragAndDropSourceHandler == other.dragAndDropSourceHandler
+    }
+
+    override fun hashCode(): Int {
+        return dragAndDropSourceHandler.hashCode()
+    }
+}
+
+@ExperimentalFoundationApi
+private class DragSourceNodeWithDefaultPainter(
+    var dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : DelegatingNode() {
+
+    init {
+        val cacheDrawScopeDragShadowCallback = CacheDrawScopeDragShadowCallback().also {
+            delegate(CacheDrawModifierNode(it::cachePicture))
+        }
+        delegate(
+            DragAndDropSourceNode(
+                onDrawDragShadow = {
+                    cacheDrawScopeDragShadowCallback.drawDragShadow(this)
+                },
+                dragAndDropSourceHandler = {
+                    dragAndDropSourceHandler.invoke(this)
+                }
+            )
+        )
+    }
+}
+
+@ExperimentalFoundationApi
+private class CacheDrawScopeDragShadowCallback {
+    private var cachedPicture: Picture? = null
+
+    fun drawDragShadow(drawScope: DrawScope) = with(drawScope) {
+        when (val picture = cachedPicture) {
+            null -> throw IllegalArgumentException(
+                "No cached drag shadow. Check if Modifier.cacheDragShadow(painter) was called."
+            )
+
+            else -> drawIntoCanvas { canvas ->
+                canvas.nativeCanvas.drawPicture(picture)
+            }
+        }
+    }
+
+    fun cachePicture(scope: CacheDrawScope): DrawResult = with(scope) {
+        val picture = Picture()
+        cachedPicture = picture
+        val width = this.size.width.toInt()
+        val height = this.size.height.toInt()
+        onDrawWithContent {
+            val pictureCanvas =
+                androidx.compose.ui.graphics.Canvas(picture.beginRecording(width, height))
+            draw(
+                density = this,
+                layoutDirection = this.layoutDirection,
+                canvas = pictureCanvas,
+                size = this.size
+            ) {
+                [email protected]()
+            }
+            picture.endRecording()
+
+            drawIntoCanvas { canvas -> canvas.nativeCanvas.drawPicture(picture) }
+        }
+    }
+}
diff --git a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
index 6a7defe..d25548f 100644
--- a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
+++ b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
@@ -164,4 +164,56 @@
 
         assertThat(chain.keyboardOptions).isSameInstanceAs(options2)
     }
+
+    @Test
+    fun byValue_reverts_whenReturnsCurrent() {
+        val transformation = InputTransformation.byValue { current, _ -> current }
+        val current = TextFieldCharSequence("a")
+        val proposed = TextFieldCharSequence("ab")
+        val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+        transformation.transformInput(current, buffer)
+
+        assertThat(buffer.changes.changeCount).isEqualTo(0)
+        assertThat(buffer.toString()).isEqualTo(current.toString())
+    }
+
+    @Test
+    fun byValue_appliesChanges_whenReturnsSameContentAsCurrent() {
+        val transformation = InputTransformation.byValue { _, _ -> "a" }
+        val current = TextFieldCharSequence("a")
+        val proposed = TextFieldCharSequence("ab")
+        val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+        transformation.transformInput(current, buffer)
+
+        assertThat(buffer.changes.changeCount).isEqualTo(1)
+        assertThat(buffer.toString()).isEqualTo(current.toString())
+    }
+
+    @Test
+    fun byValue_noops_whenReturnsProposed() {
+        val transformation = InputTransformation.byValue { _, _ -> "ab" }
+        val current = TextFieldCharSequence("a")
+        val proposed = TextFieldCharSequence("ab")
+        val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+        transformation.transformInput(current, buffer)
+
+        assertThat(buffer.changes.changeCount).isEqualTo(0)
+        assertThat(buffer.toString()).isEqualTo(proposed.toString())
+    }
+
+    @Test
+    fun byValue_appliesChanges_whenDifferentCharSequenceReturned() {
+        val transformation = InputTransformation.byValue { _, _ -> "c" }
+        val current = TextFieldCharSequence("a")
+        val proposed = TextFieldCharSequence("ab")
+        val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+        transformation.transformInput(current, buffer)
+
+        assertThat(buffer.changes.changeCount).isEqualTo(1)
+        assertThat(buffer.toString()).isEqualTo("c")
+    }
 }
diff --git a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
index cc832fb..d46c060 100644
--- a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
+++ b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
@@ -43,8 +43,24 @@
     private val state = TextFieldState()
 
     @Test
-    fun initialValue() {
+    fun defaultInitialTextAndSelection() {
+        val state = TextFieldState()
         assertThat(state.text.toString()).isEqualTo("")
+        assertThat(state.text.selectionInChars).isEqualTo(TextRange.Zero)
+    }
+
+    @Test
+    fun customInitialTextAndDefaultSelection() {
+        val state = TextFieldState(initialText = "hello")
+        assertThat(state.text.toString()).isEqualTo("hello")
+        assertThat(state.text.selectionInChars).isEqualTo(TextRange(5))
+    }
+
+    @Test
+    fun customInitialTextAndSelection() {
+        val state = TextFieldState(initialText = "hello", initialSelectionInChars = TextRange(0, 1))
+        assertThat(state.text.toString()).isEqualTo("hello")
+        assertThat(state.text.selectionInChars).isEqualTo(TextRange(0, 1))
     }
 
     @Test
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropSource.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropSource.kt
new file mode 100644
index 0000000..7e9e47c
--- /dev/null
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropSource.kt
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2023 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
+ *
+ *     https://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 androidx.compose.foundation.draganddrop
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draganddrop.DragAndDropInfo
+import androidx.compose.ui.draganddrop.DragAndDropModifierNode
+import androidx.compose.ui.draganddrop.DragAndDropTransfer
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.input.pointer.PointerInputScope
+import androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode
+import androidx.compose.ui.node.DelegatingNode
+import androidx.compose.ui.node.LayoutAwareModifierNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.toSize
+
+/**
+ * A scope that allows for the detection of the start of a drag and drop gesture, and subsequently
+ * starting a drag and drop session.
+ */
+@ExperimentalFoundationApi
+interface DragAndDropSourceScope : PointerInputScope {
+    /**
+     * Starts a drag and drop session with [transfer] as the data to be transferred on gesture
+     * completion
+     */
+    fun startTransfer(transfer: DragAndDropTransfer)
+}
+
+/**
+ * A Modifier that allows an element it is applied to to be treated like a source for
+ * drag and drop operations.
+ *
+ * Learn how to use [Modifier.dragAndDropSource] while providing a custom drag shadow:
+ * @sample androidx.compose.foundation.samples.DragAndDropSourceWithColoredDragShadowSample
+ *
+ * @param onDrawDragShadow provides the visual representation of the item dragged during the
+ * drag and drop gesture.
+ * @param block A lambda with a [DragAndDropSourceScope] as a receiver
+ * which provides a [PointerInputScope] to detect the drag gesture, after which a drag and drop
+ * gesture can be started with [DragAndDropSourceScope.startTransfer].
+ *
+ */
+@ExperimentalFoundationApi
+fun Modifier.dragAndDropSource(
+    onDrawDragShadow: DrawScope.() -> Unit,
+    block: suspend DragAndDropSourceScope.() -> Unit
+): Modifier = this then DragAndDropSourceElement(
+    onDrawDragShadow = onDrawDragShadow,
+    dragAndDropSourceHandler = block,
+)
+
+@ExperimentalFoundationApi
+private data class DragAndDropSourceElement(
+    /**
+     * @see Modifier.dragAndDropSource
+     */
+    val onDrawDragShadow: DrawScope.() -> Unit,
+    /**
+     * @see Modifier.dragAndDropSource
+     */
+    val dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : ModifierNodeElement<DragAndDropSourceNode>() {
+    override fun create() = DragAndDropSourceNode(
+        onDrawDragShadow = onDrawDragShadow,
+        dragAndDropSourceHandler = dragAndDropSourceHandler,
+    )
+
+    override fun update(node: DragAndDropSourceNode) = with(node) {
+        onDrawDragShadow = [email protected]
+        dragAndDropSourceHandler = [email protected]
+    }
+
+    override fun InspectorInfo.inspectableProperties() {
+        name = "dragSource"
+        properties["onDrawDragShadow"] = onDrawDragShadow
+        properties["dragAndDropSourceHandler"] = dragAndDropSourceHandler
+    }
+}
+
+@ExperimentalFoundationApi
+internal class DragAndDropSourceNode(
+    var onDrawDragShadow: DrawScope.() -> Unit,
+    var dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : DelegatingNode(),
+    LayoutAwareModifierNode {
+
+    private var size: IntSize = IntSize.Zero
+
+    init {
+        val dragAndDropModifierNode = delegate(
+            DragAndDropModifierNode()
+        )
+
+        delegate(
+            SuspendingPointerInputModifierNode {
+                dragAndDropSourceHandler(
+                    object : DragAndDropSourceScope, PointerInputScope by this {
+                        override fun startTransfer(transfer: DragAndDropTransfer) =
+                            dragAndDropModifierNode.drag(
+                                DragAndDropInfo(
+                                    transfer = transfer,
+                                    size = size.toSize(),
+                                    onDrawDragShadow = onDrawDragShadow
+                                )
+                            )
+                    }
+                )
+            }
+        )
+    }
+
+    override fun onRemeasured(size: IntSize) {
+        this.size = size
+    }
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropTarget.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropTarget.kt
new file mode 100644
index 0000000..a579114
--- /dev/null
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropTarget.kt
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2023 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
+ *
+ *     https://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 androidx.compose.foundation.draganddrop
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draganddrop.DragAndDropEvent
+import androidx.compose.ui.draganddrop.DragAndDropEventType
+import androidx.compose.ui.draganddrop.DragAndDropModifierNode
+import androidx.compose.ui.draganddrop.DragAndDropTarget
+import androidx.compose.ui.node.DelegatingNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
+
+/**
+ * A modifier that allows for receiving from a drag and drop gesture.
+ *
+ * Learn how to use [Modifier.dragAndDropTarget] to receive drag and drop events from inside your
+ * app or from other apps:
+ *
+ * @sample androidx.compose.foundation.samples.TextDragAndDropTargetSample
+ *
+ * @param onStarted Allows the Composable to decide if it wants to receive the drop gesture.
+ * returning true indicates interest in a [DragAndDropEvent], false indicates no interest. If false
+ * is returned, this [Modifier] will not receive any events for this drag and drop session until the
+ * [onEnded] signal. All drag and drop target modifiers in the hierarchy will receive this event.
+ * @see [DragAndDropEventType.Started]
+ *
+ * @param onDropped The item has been dropped inside this Composable.
+ * returning true indicates that the [DragAndDropEvent] was consumed, false indicates it was
+ * rejected. Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Dropped]
+ *
+ * @param onEntered The item being dropped has entered into this Composable's bounds.
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Entered]
+ *
+ * @param onMoved The item being dropped has moved within this Composable's bounds.
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Moved]
+ *
+ * @param onChanged The event in the current drag and drop session has changed within
+ * this Composable's bounds.
+ * @see [DragAndDropEventType.Changed]
+ *
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @param onExited The item being dropped has moved outside this Composable's bounds.
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Exited]
+ *
+ * @param onEnded The drag and drop gesture is complete.
+ * All drag and drop target modifiers in the hierarchy will receive this event.
+ * @see [DragAndDropEventType.Ended]
+ */
+@ExperimentalFoundationApi
+fun Modifier.dragAndDropTarget(
+    onStarted: (event: DragAndDropEvent) -> Boolean,
+    onDropped: (event: DragAndDropEvent) -> Boolean,
+    onEntered: (event: DragAndDropEvent) -> Unit = {},
+    onMoved: (event: DragAndDropEvent) -> Unit = {},
+    onChanged: (event: DragAndDropEvent) -> Unit = {},
+    onExited: (event: DragAndDropEvent) -> Unit = {},
+    onEnded: (event: DragAndDropEvent) -> Unit = {},
+): Modifier = this then DropTargetElement(
+    onStarted = onStarted,
+    onDropped = onDropped,
+    onEntered = onEntered,
+    onMoved = onMoved,
+    onChanged = onChanged,
+    onExited = onExited,
+    onEnded = onEnded
+)
+
+@ExperimentalFoundationApi
+private class DropTargetElement(
+    val onStarted: (event: DragAndDropEvent) -> Boolean,
+    val onDropped: (event: DragAndDropEvent) -> Boolean,
+    val onEntered: (event: DragAndDropEvent) -> Unit = {},
+    val onMoved: (event: DragAndDropEvent) -> Unit = {},
+    val onChanged: (event: DragAndDropEvent) -> Unit = {},
+    val onExited: (event: DragAndDropEvent) -> Unit = {},
+    val onEnded: (event: DragAndDropEvent) -> Unit = {},
+) : ModifierNodeElement<DragAndDropTargetNode>() {
+    override fun create() = DragAndDropTargetNode(
+        onStarted = onStarted,
+        onDropped = onDropped,
+        onEntered = onEntered,
+        onMoved = onMoved,
+        onChanged = onChanged,
+        onExited = onExited,
+        onEnded = onEnded,
+    )
+
+    override fun update(node: DragAndDropTargetNode) = with(node) {
+        onStarted = [email protected]
+        onDropped = [email protected]
+        onEntered = [email protected]
+        onMoved = [email protected]
+        onChanged = [email protected]
+        onExited = [email protected]
+        onEnded = [email protected]
+    }
+
+    override fun InspectorInfo.inspectableProperties() {
+        name = "dropTarget"
+        properties["onDragStarted"] = onStarted
+        properties["onDropped"] = onDropped
+        properties["onEntered"] = onEntered
+        properties["onMoved"] = onMoved
+        properties["onChanged"] = onChanged
+        properties["onExited"] = onExited
+        properties["onEnded"] = onEnded
+    }
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is DropTargetElement) return false
+
+        if (onStarted != other.onStarted) return false
+        if (onDropped != other.onDropped) return false
+        if (onEntered != other.onEntered) return false
+        if (onMoved != other.onMoved) return false
+        if (onChanged != other.onChanged) return false
+        if (onExited != other.onExited) return false
+        return onEnded == other.onEnded
+    }
+
+    override fun hashCode(): Int {
+        var result = onStarted.hashCode()
+        result = 31 * result + onDropped.hashCode()
+        result = 31 * result + onEntered.hashCode()
+        result = 31 * result + onMoved.hashCode()
+        result = 31 * result + onChanged.hashCode()
+        result = 31 * result + onExited.hashCode()
+        result = 31 * result + onEnded.hashCode()
+        return result
+    }
+}
+
+@ExperimentalFoundationApi
+private class DragAndDropTargetNode(
+    var onStarted: (event: DragAndDropEvent) -> Boolean,
+    var onDropped: (event: DragAndDropEvent) -> Boolean,
+    var onEntered: (event: DragAndDropEvent) -> Unit,
+    var onMoved: (event: DragAndDropEvent) -> Unit,
+    var onChanged: (event: DragAndDropEvent) -> Unit,
+    var onExited: (event: DragAndDropEvent) -> Unit,
+    var onEnded: (event: DragAndDropEvent) -> Unit,
+) : DelegatingNode(), DragAndDropTarget {
+
+    init {
+        delegate(
+            DragAndDropModifierNode { event ->
+                when {
+                    onStarted(event) -> this@DragAndDropTargetNode
+                    else -> null
+                }
+            }
+        )
+    }
+
+    override fun onDragAndDropEvent(event: DragAndDropEvent, type: DragAndDropEventType): Boolean {
+        when (type) {
+            DragAndDropEventType.Started -> return onStarted.invoke(event)
+            DragAndDropEventType.Dropped -> return onDropped.invoke(event)
+            DragAndDropEventType.Entered -> onEntered.invoke(event)
+            DragAndDropEventType.Moved -> onMoved.invoke(event)
+            DragAndDropEventType.Exited -> onExited.invoke(event)
+            DragAndDropEventType.Changed -> onChanged.invoke(event)
+            DragAndDropEventType.Ended -> onEnded.invoke(event)
+        }
+        return false
+    }
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
index 3e8c4f5..c221f49 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
@@ -325,7 +325,7 @@
 ): Boolean = drag(
     pointerId = pointerId,
     onDrag = onDrag,
-    motionFromChange = { it.positionChangeIgnoreConsumed().y },
+    hasDragged = { it.positionChangeIgnoreConsumed().y != 0f },
     motionConsumed = { it.isConsumed }
 ) != null
 
@@ -473,7 +473,7 @@
 ): Boolean = drag(
     pointerId = pointerId,
     onDrag = onDrag,
-    motionFromChange = { it.positionChangeIgnoreConsumed().x },
+    hasDragged = { it.positionChangeIgnoreConsumed().x != 0f },
     motionConsumed = { it.isConsumed }
 ) != null
 
@@ -564,10 +564,9 @@
 
 /**
  * Continues to read drag events until all pointers are up or the drag event is canceled.
- * The initial pointer to use for driving the drag is [pointerId]. [motionFromChange]
- * converts the [PointerInputChange] to the pixel change in the direction that this
- * drag should detect. [onDrag] is called whenever the pointer moves and [motionFromChange]
- * returns non-zero.
+ * The initial pointer to use for driving the drag is [pointerId]. [hasDragged]
+ * passes the result whether a change was detected from the drag function or not. [onDrag] is called
+ * whenever the pointer moves and [hasDragged] returns non-zero.
  *
  * @return The last pointer input event change when gesture ended with all pointers up
  * and null when the gesture was canceled.
@@ -575,7 +574,7 @@
 internal suspend inline fun AwaitPointerEventScope.drag(
     pointerId: PointerId,
     onDrag: (PointerInputChange) -> Unit,
-    motionFromChange: (PointerInputChange) -> Float,
+    hasDragged: (PointerInputChange) -> Boolean,
     motionConsumed: (PointerInputChange) -> Boolean
 ): PointerInputChange? {
     if (currentEvent.isPointerUp(pointerId)) {
@@ -583,7 +582,7 @@
     }
     var pointer = pointerId
     while (true) {
-        val change = awaitDragOrUp(pointer) { motionFromChange(it) != 0f } ?: return null
+        val change = awaitDragOrUp(pointer, hasDragged) ?: return null
 
         if (motionConsumed(change)) {
             return null
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
index 08efb0a..471eea9 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
@@ -567,16 +567,18 @@
     pointerId: PointerId,
     onDrag: (PointerInputChange) -> Unit
 ): Boolean {
-    val motionFromChange: (PointerInputChange) -> Float = if (orientation == Orientation.Vertical) {
-        { it.positionChangeIgnoreConsumed().y }
-    } else {
-        { it.positionChangeIgnoreConsumed().x }
+    val hasDragged: (PointerInputChange) -> Boolean = {
+        if (orientation == Orientation.Vertical) {
+            it.positionChangeIgnoreConsumed().y
+        } else {
+            it.positionChangeIgnoreConsumed().x
+        } != 0f
     }
 
     return drag(
         pointerId = pointerId,
         onDrag = onDrag,
-        motionFromChange = motionFromChange,
+        hasDragged = hasDragged,
         motionConsumed = { it.isConsumed }
     )?.let(onDrag) != null
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
index 79f8886..9ec2f75 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
@@ -108,7 +108,7 @@
         }
 
         return calculateFinalOffset(
-            currentVelocity,
+            with(lazyGridState.density) { calculateFinalSnappingItem(currentVelocity) },
             distanceFromItemBeforeTarget,
             distanceFromItemAfterTarget
         )
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
index 512b509..7b760c9 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
@@ -26,6 +26,7 @@
 import androidx.compose.foundation.lazy.LazyListState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.util.fastForEach
 import androidx.compose.ui.util.fastSumBy
 import kotlin.math.absoluteValue
@@ -97,7 +98,11 @@
             }
         }
 
-        return calculateFinalOffset(currentVelocity, lowerBoundOffset, upperBoundOffset)
+        return calculateFinalOffset(
+            with(lazyListState.density) { calculateFinalSnappingItem(currentVelocity) },
+            lowerBoundOffset,
+            upperBoundOffset
+        )
     }
 
     fun averageItemSize(): Float = with(layoutInfo) {
@@ -125,3 +130,25 @@
 
 internal val LazyListLayoutInfo.singleAxisViewportSize: Int
     get() = if (orientation == Orientation.Vertical) viewportSize.height else viewportSize.width
+
[email protected]
+internal value class FinalSnappingItem internal constructor(
+    @Suppress("unused") private val value: Int
+) {
+    companion object {
+
+        val ClosestItem: FinalSnappingItem = FinalSnappingItem(0)
+
+        val NextItem: FinalSnappingItem = FinalSnappingItem(1)
+
+        val PreviousItem: FinalSnappingItem = FinalSnappingItem(2)
+    }
+}
+
+internal fun Density.calculateFinalSnappingItem(velocity: Float): FinalSnappingItem {
+    return if (velocity.absoluteValue < MinFlingVelocityDp.toPx()) {
+        FinalSnappingItem.ClosestItem
+    } else {
+        if (velocity > 0) FinalSnappingItem.NextItem else FinalSnappingItem.PreviousItem
+    }
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt
index 2aa4948..e2c672f 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt
@@ -45,15 +45,9 @@
 import kotlinx.coroutines.withContext
 
 /**
- * A [FlingBehavior] that performs snapping of items to a given position. The algorithm will
- * differentiate between short/scroll snapping and long/fling snapping.
+ * A [FlingBehavior] that performs snapping of items to a given position.
  *
- * Use [shortSnapVelocityThreshold] to provide a threshold velocity that will appropriately select
- * the desired behavior.
- *
- * A short snap usually happens after a fling with low velocity.
- *
- * When long snapping, you can use [SnapLayoutInfoProvider.calculateApproachOffset] to
+ * You can use [SnapLayoutInfoProvider.calculateApproachOffset] to
  * indicate that snapping should happen after this offset. If the velocity generated by the
  * fling is high enough to get there, we'll use [highVelocityAnimationSpec] to get to that offset
  * and then we'll snap to the next bound calculated by
@@ -72,8 +66,6 @@
  * @param highVelocityAnimationSpec The animation spec used to approach the target offset. When
  * the fling velocity is large enough. Large enough means large enough to naturally decay.
  * @param snapAnimationSpec The animation spec used to finally snap to the correct bound.
- * @param shortSnapVelocityThreshold Use the given velocity to determine if it's a short or long
- * snap. The velocity should be provided in pixels/s.
  *
  */
 @ExperimentalFoundationApi
@@ -81,10 +73,57 @@
     private val snapLayoutInfoProvider: SnapLayoutInfoProvider,
     private val lowVelocityAnimationSpec: AnimationSpec<Float>,
     private val highVelocityAnimationSpec: DecayAnimationSpec<Float>,
-    private val snapAnimationSpec: AnimationSpec<Float>,
-    private val shortSnapVelocityThreshold: Float
+    private val snapAnimationSpec: AnimationSpec<Float>
 ) : FlingBehavior {
 
+    /**
+     * A [FlingBehavior] that performs snapping of items to a given position. The algorithm will
+     * differentiate between short/scroll snapping and long/fling snapping.
+     *
+     * A short snap usually happens after a fling with low velocity.
+     *
+     * When long snapping, you can use [SnapLayoutInfoProvider.calculateApproachOffset] to
+     * indicate that snapping should happen after this offset. If the velocity generated by the
+     * fling is high enough to get there, we'll use [highVelocityAnimationSpec] to get to that
+     * offset and then we'll snap to the next bound calculated by
+     * [SnapLayoutInfoProvider.calculateSnappingOffset] using [snapAnimationSpec].
+     *
+     * If the velocity is not high enough, we'll use [lowVelocityAnimationSpec] to approach and then
+     * use [snapAnimationSpec] to snap into place.
+     *
+     * Please refer to the sample to learn how to use this API.
+     * @sample androidx.compose.foundation.samples.SnapFlingBehaviorSimpleSample
+     * @sample androidx.compose.foundation.samples.SnapFlingBehaviorCustomizedSample
+     *
+     * @param snapLayoutInfoProvider The information about the layout being snapped.
+     * @param lowVelocityAnimationSpec The animation spec used to approach the target offset. When
+     * the fling velocity is not large enough. Large enough means large enough to naturally decay.
+     * @param highVelocityAnimationSpec The animation spec used to approach the target offset. When
+     * the fling velocity is large enough. Large enough means large enough to naturally decay.
+     * @param snapAnimationSpec The animation spec used to finally snap to the correct bound.
+     * @param shortSnapVelocityThreshold Use the given velocity to determine if it's a short or long
+     * snap. The velocity should be provided in pixels/s.
+     *
+     */
+    @Suppress("UNUSED_PARAMETER")
+    @Deprecated(
+        "Please use the constructor without the shortSnapVelocityThreshold. The" +
+            " functionality provided by shortSnapVelocityThreshold can be implemented by " +
+            "SnapLayoutInfoProvider."
+    )
+    constructor(
+        snapLayoutInfoProvider: SnapLayoutInfoProvider,
+        lowVelocityAnimationSpec: AnimationSpec<Float>,
+        highVelocityAnimationSpec: DecayAnimationSpec<Float>,
+        snapAnimationSpec: AnimationSpec<Float>,
+        shortSnapVelocityThreshold: Float
+    ) : this(
+        snapLayoutInfoProvider,
+        lowVelocityAnimationSpec,
+        highVelocityAnimationSpec,
+        snapAnimationSpec
+    )
+
     internal var motionScaleDuration = DefaultScrollMotionDurationScale
 
     override suspend fun ScrollScope.performFling(initialVelocity: Float): Float {
@@ -124,10 +163,35 @@
     ): AnimationResult<Float, AnimationVector1D> {
         // If snapping from scroll (short snap) or fling (long snap)
         val result = withContext(motionScaleDuration) {
-            if (abs(initialVelocity) <= abs(shortSnapVelocityThreshold)) {
-                shortSnap(initialVelocity, onRemainingScrollOffsetUpdate)
-            } else {
-                longSnap(initialVelocity, onRemainingScrollOffsetUpdate)
+            val initialOffset =
+                snapLayoutInfoProvider.calculateApproachOffset(initialVelocity).let {
+                    abs(it) * sign(initialVelocity) // ensure offset sign is correct
+                }
+            var remainingScrollOffset = initialOffset
+
+            onRemainingScrollOffsetUpdate(remainingScrollOffset) // First Scroll Offset
+
+            val animationState = tryApproach(
+                remainingScrollOffset,
+                initialVelocity
+            ) { delta ->
+                remainingScrollOffset -= delta
+                onRemainingScrollOffsetUpdate(remainingScrollOffset)
+            }
+
+            remainingScrollOffset =
+                snapLayoutInfoProvider.calculateSnappingOffset(animationState.velocity)
+
+            debugLog { "Settling Final Bound=$remainingScrollOffset" }
+
+            animateWithTarget(
+                remainingScrollOffset,
+                remainingScrollOffset,
+                animationState.copy(value = 0f), // re-use the velocity and timestamp from state
+                snapAnimationSpec
+            ) { delta ->
+                remainingScrollOffset -= delta
+                onRemainingScrollOffsetUpdate(remainingScrollOffset)
             }
         }
 
@@ -135,60 +199,23 @@
         return result
     }
 
-    private suspend fun ScrollScope.shortSnap(
+    @Suppress("PrimitiveInLambda")
+    private suspend fun ScrollScope.tryApproach(
+        offset: Float,
         velocity: Float,
-        onRemainingScrollOffsetUpdate: (Float) -> Unit
-    ): AnimationResult<Float, AnimationVector1D> {
-        debugLog { "Short Snapping" }
-        val closestOffset = snapLayoutInfoProvider.calculateSnappingOffset(0f)
-
-        var remainingScrollOffset = closestOffset
-
-        val animationState = AnimationState(NoDistance, velocity)
-        return animateSnap(
-            closestOffset,
-            closestOffset,
-            animationState,
-            snapAnimationSpec
-        ) { delta ->
-            remainingScrollOffset -= delta
-            onRemainingScrollOffsetUpdate(remainingScrollOffset)
-        }
-    }
-
-    private suspend fun ScrollScope.longSnap(
-        initialVelocity: Float,
-        onAnimationStep: (remainingScrollOffset: Float) -> Unit
-    ): AnimationResult<Float, AnimationVector1D> {
-        debugLog { "Long Snapping" }
-        val initialOffset =
-            snapLayoutInfoProvider.calculateApproachOffset(initialVelocity).let {
-                abs(it) * sign(initialVelocity) // ensure offset sign is correct
-            }
-        var remainingScrollOffset = initialOffset
-
-        onAnimationStep(remainingScrollOffset) // First Scroll Offset
-
-        val (remainingOffset, animationState) = runApproach(
-            initialOffset,
-            initialVelocity
-        ) { delta ->
-            remainingScrollOffset -= delta
-            onAnimationStep(remainingScrollOffset)
-        }
-
-        debugLog { "Settling Final Bound=$remainingOffset" }
-
-        remainingScrollOffset = remainingOffset
-
-        return animateSnap(
-            remainingOffset,
-            remainingOffset,
-            animationState.copy(value = 0f),
-            snapAnimationSpec
-        ) { delta ->
-            remainingScrollOffset -= delta
-            onAnimationStep(remainingScrollOffset)
+        updateRemainingScrollOffset: (Float) -> Unit
+    ): AnimationState<Float, AnimationVector1D> {
+        // If we don't have velocity or approach offset, we shouldn't run the approach animation
+        return if (offset.absoluteValue == 0.0f ||
+            velocity.absoluteValue == 0.0f
+        ) {
+            AnimationState(offset, velocity)
+        } else {
+            runApproach(
+                offset,
+                velocity,
+                updateRemainingScrollOffset
+            ).currentAnimationState
         }
     }
 
@@ -211,7 +238,6 @@
             initialTargetOffset,
             initialVelocity,
             animation,
-            snapLayoutInfoProvider,
             onAnimationStep
         )
     }
@@ -236,8 +262,7 @@
             other.snapAnimationSpec == this.snapAnimationSpec &&
                 other.highVelocityAnimationSpec == this.highVelocityAnimationSpec &&
                 other.lowVelocityAnimationSpec == this.lowVelocityAnimationSpec &&
-                other.snapLayoutInfoProvider == this.snapLayoutInfoProvider &&
-                other.shortSnapVelocityThreshold == this.shortSnapVelocityThreshold
+                other.snapLayoutInfoProvider == this.snapLayoutInfoProvider
         } else {
             false
         }
@@ -248,7 +273,6 @@
         .let { 31 * it + highVelocityAnimationSpec.hashCode() }
         .let { 31 * it + lowVelocityAnimationSpec.hashCode() }
         .let { 31 * it + snapLayoutInfoProvider.hashCode() }
-        .let { 31 * it + shortSnapVelocityThreshold.hashCode() }
 }
 
 /**
@@ -271,8 +295,7 @@
             snapLayoutInfoProvider = snapLayoutInfoProvider,
             lowVelocityAnimationSpec = tween(easing = LinearEasing),
             highVelocityAnimationSpec = highVelocityApproachSpec,
-            snapAnimationSpec = spring(stiffness = Spring.StiffnessMediumLow),
-            shortSnapVelocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
+            snapAnimationSpec = spring(stiffness = Spring.StiffnessMediumLow)
         )
     }
 }
@@ -293,22 +316,15 @@
     initialTargetOffset: Float,
     initialVelocity: Float,
     animation: ApproachAnimation<Float, AnimationVector1D>,
-    snapLayoutInfoProvider: SnapLayoutInfoProvider,
     onAnimationStep: (delta: Float) -> Unit
 ): AnimationResult<Float, AnimationVector1D> {
 
-    val (_, currentAnimationState) = animation.approachAnimation(
+    return animation.approachAnimation(
         this,
         initialTargetOffset,
         initialVelocity,
         onAnimationStep
     )
-
-    val remainingOffset =
-        snapLayoutInfoProvider.calculateSnappingOffset(currentAnimationState.velocity)
-
-    // will snap the remainder
-    return AnimationResult(remainingOffset, currentAnimationState)
 }
 
 private class AnimationResult<T, V : AnimationVector>(
@@ -379,21 +395,22 @@
  * @param targetOffset The final target of this animation
  * @param cancelOffset If we'd like to finish the animation earlier we use this value
  * @param animationState The current animation state for continuation purposes
- * @param snapAnimationSpec The [AnimationSpec] that will drive this animation
+ * @param animationSpec The [AnimationSpec] that will drive this animation
  * @param onAnimationStep Called for each new scroll delta emitted by the animation cycle.
  */
-private suspend fun ScrollScope.animateSnap(
+@Suppress("PrimitiveInLambda")
+private suspend fun ScrollScope.animateWithTarget(
     targetOffset: Float,
     cancelOffset: Float,
     animationState: AnimationState<Float, AnimationVector1D>,
-    snapAnimationSpec: AnimationSpec<Float>,
+    animationSpec: AnimationSpec<Float>,
     onAnimationStep: (delta: Float) -> Unit
 ): AnimationResult<Float, AnimationVector1D> {
     var consumedUpToNow = 0f
     val initialVelocity = animationState.velocity
     animationState.animateTo(
         targetOffset,
-        animationSpec = snapAnimationSpec,
+        animationSpec = animationSpec,
         sequentialAnimation = (animationState.velocity != 0f)
     ) {
         val realValue = value.coerceToTarget(cancelOffset)
@@ -449,11 +466,11 @@
         val animationState = AnimationState(initialValue = 0f, initialVelocity = velocity)
         val targetOffset = offset.absoluteValue * sign(velocity)
         return with(scope) {
-            animateSnap(
+            animateWithTarget(
                 targetOffset = targetOffset,
                 cancelOffset = offset,
                 animationState = animationState,
-                snapAnimationSpec = lowVelocityAnimationSpec,
+                animationSpec = lowVelocityAnimationSpec,
                 onAnimationStep = onAnimationStep
             )
         }
@@ -480,7 +497,11 @@
 internal const val NoDistance = 0f
 internal const val NoVelocity = 0f
 
-internal fun calculateFinalOffset(velocity: Float, lowerBound: Float, upperBound: Float): Float {
+internal fun calculateFinalOffset(
+    snappingOffset: FinalSnappingItem,
+    lowerBound: Float,
+    upperBound: Float
+): Float {
 
     fun Float.isValidDistance(): Boolean {
         return this != Float.POSITIVE_INFINITY && this != Float.NEGATIVE_INFINITY
@@ -488,8 +509,8 @@
 
     debugLog { "Proposed Bounds: Lower=$lowerBound Upper=$upperBound" }
 
-    val finalDistance = when (sign(velocity)) {
-        0f -> {
+    val finalDistance = when (snappingOffset) {
+        FinalSnappingItem.ClosestItem -> {
             if (abs(upperBound) <= abs(lowerBound)) {
                 upperBound
             } else {
@@ -497,8 +518,8 @@
             }
         }
 
-        1f -> upperBound
-        -1f -> lowerBound
+        FinalSnappingItem.NextItem -> upperBound
+        FinalSnappingItem.PreviousItem -> lowerBound
         else -> NoDistance
     }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt
index 2de3743..dab002c 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt
@@ -44,9 +44,7 @@
 
     /**
      * Given a target placement in a layout, the snapping offset is the next snapping position
-     * this layout can be placed in. If this is a short snapping, [currentVelocity] is guaranteed
-     * to be 0.If it is a long snapping, this method  will be called
-     * after [calculateApproachOffset].
+     * this layout can be placed in.
      *
      * @param currentVelocity The current fling movement velocity. This may change throughout the
      * fling animation.
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
index ca072ec..f663080 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
@@ -30,6 +30,7 @@
 import androidx.compose.foundation.lazy.layout.LazyLayout
 import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
 import androidx.compose.foundation.lazy.layout.calculateLazyLayoutPinnedIndices
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -112,11 +113,16 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .lazyListBeyondBoundsModifier(
-                state,
-                beyondBoundsItemCount,
-                reverseLayout,
-                orientation
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberLazyListBeyondBoundsState(
+                    state = state,
+                    beyondBoundsItemCount = beyondBoundsItemCount
+                ),
+                beyondBoundsInfo = state.beyondBoundsInfo,
+                reverseLayout = reverseLayout,
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
index 68f1b0d..03cd080 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
@@ -16,46 +16,18 @@
 
 package androidx.compose.foundation.lazy
 
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional items when the lazyList receives a
- * request to layout items beyond the visible bounds.
- */
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.lazyListBeyondBoundsModifier(
+internal fun rememberLazyListBeyondBoundsState(
     state: LazyListState,
-    beyondBoundsItemCount: Int,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    val beyondBoundsState = remember(state, beyondBoundsItemCount) {
+    beyondBoundsItemCount: Int
+): LazyLayoutBeyondBoundsState {
+    return remember(state, beyondBoundsItemCount) {
         LazyListBeyondBoundsState(state, beyondBoundsItemCount)
     }
-    val beyondBoundsInfo = state.beyondBoundsInfo
-    return this then remember(
-        beyondBoundsState,
-        beyondBoundsInfo,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            beyondBoundsState,
-            beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
-    }
 }
 
 internal class LazyListBeyondBoundsState(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt
index 24a1642..78afee1 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt
@@ -168,7 +168,7 @@
                     }
                     offset = animatedOffset
                 }
-                layerBlock = animation
+                layerBlock = animation.layerBlock
             } else {
                 layerBlock = DefaultLayerBlock
             }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt
index 4b1627c..61d9c0f 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt
@@ -30,6 +30,7 @@
 import androidx.compose.foundation.lazy.layout.LazyLayout
 import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
 import androidx.compose.foundation.lazy.layout.calculateLazyLayoutPinnedIndices
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -111,10 +112,13 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .lazyGridBeyondBoundsModifier(
-                state,
-                reverseLayout,
-                orientation
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberLazyGridBeyondBoundsState(state = state),
+                beyondBoundsInfo = state.beyondBoundsInfo,
+                reverseLayout = reverseLayout,
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt
index d48a4f0..d8644225 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt
@@ -16,44 +16,15 @@
 
 package androidx.compose.foundation.lazy.grid
 
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional items when the lazyList receives a
- * request to layout items beyond the visible bounds.
- */
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.lazyGridBeyondBoundsModifier(
-    state: LazyGridState,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    val beyondBoundsState = remember(state) {
+internal fun rememberLazyGridBeyondBoundsState(state: LazyGridState): LazyLayoutBeyondBoundsState {
+    return remember(state) {
         LazyGridBeyondBoundsState(state)
     }
-    return this then remember(
-        state,
-        beyondBoundsState,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            beyondBoundsState,
-            state.beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
-    }
 }
 
 internal class LazyGridBeyondBoundsState(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt
index 0dd7231..098f8674 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt
@@ -38,7 +38,7 @@
 
 internal class LazyLayoutAnimation(
     val coroutineScope: CoroutineScope
-) : (GraphicsLayerScope) -> Unit {
+) {
 
     var appearanceSpec: FiniteAnimationSpec<Float>? = null
     var placementSpec: FiniteAnimationSpec<IntOffset>? = null
@@ -79,6 +79,10 @@
     var visibility by mutableFloatStateOf(1f)
         private set
 
+    val layerBlock: GraphicsLayerScope.() -> Unit = {
+        alpha = visibility
+    }
+
     /**
      * Cancels the ongoing placement animation if there is one.
      */
@@ -176,10 +180,6 @@
         visibility = 1f
     }
 
-    override fun invoke(scope: GraphicsLayerScope) {
-        scope.alpha = visibility
-    }
-
     companion object {
         val NotInitialized = IntOffset(Int.MAX_VALUE, Int.MAX_VALUE)
     }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt
index 982d7c5..24f1f89 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt
@@ -18,6 +18,9 @@
 
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsInfo.Interval
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
 import androidx.compose.ui.layout.BeyondBoundsLayout
 import androidx.compose.ui.layout.BeyondBoundsLayout.BeyondBoundsScope
 import androidx.compose.ui.layout.BeyondBoundsLayout.LayoutDirection.Companion.Above
@@ -33,6 +36,33 @@
 import androidx.compose.ui.unit.LayoutDirection.Ltr
 import androidx.compose.ui.unit.LayoutDirection.Rtl
 
+/**
+ * This modifier is used to measure and place additional items when the lazy layout receives a
+ * request to layout items beyond the visible bounds.
+ */
+@Suppress("ComposableModifierFactory")
+@Composable
+internal fun Modifier.lazyLayoutBeyondBoundsModifier(
+    state: LazyLayoutBeyondBoundsState,
+    beyondBoundsInfo: LazyLayoutBeyondBoundsInfo,
+    reverseLayout: Boolean,
+    layoutDirection: LayoutDirection,
+    orientation: Orientation,
+    enabled: Boolean
+): Modifier = this then if (!enabled) {
+    this
+} else {
+    remember(state, beyondBoundsInfo, reverseLayout, layoutDirection, orientation, enabled) {
+        LazyLayoutBeyondBoundsModifierLocal(
+            state,
+            beyondBoundsInfo,
+            reverseLayout,
+            layoutDirection,
+            orientation
+        )
+    }
+}
+
 internal class LazyLayoutBeyondBoundsModifierLocal(
     private val state: LazyLayoutBeyondBoundsState,
     private val beyondBoundsInfo: LazyLayoutBeyondBoundsInfo,
@@ -44,6 +74,7 @@
         get() = ModifierLocalBeyondBoundsLayout
     override val value: BeyondBoundsLayout
         get() = this
+
     companion object {
         private val emptyBeyondBoundsScope = object : BeyondBoundsScope {
             override val hasMoreContent = false
@@ -101,10 +132,12 @@
                 Ltr -> reverseLayout
                 Rtl -> !reverseLayout
             }
+
             Right -> when (layoutDirection) {
                 Ltr -> !reverseLayout
                 Rtl -> reverseLayout
             }
+
             else -> unsupportedDirection()
         }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt
index fbeda53..20928ee 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt
@@ -25,6 +25,7 @@
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.lazy.layout.LazyLayout
 import androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -91,10 +92,13 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .lazyStaggeredGridBeyondBoundsModifier(
-                state = state,
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberLazyStaggeredGridBeyondBoundsState(state = state),
+                beyondBoundsInfo = state.beyondBoundsInfo,
                 reverseLayout = reverseLayout,
-                orientation = orientation
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt
index fbe9ca0..e39c290 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt
@@ -16,44 +16,17 @@
 
 package androidx.compose.foundation.lazy.staggeredgrid
 
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional items when the lazyList receives a
- * request to layout items beyond the visible bounds.
- */
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.lazyStaggeredGridBeyondBoundsModifier(
-    state: LazyStaggeredGridState,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    val beyondBoundsState = remember(state) {
+internal fun rememberLazyStaggeredGridBeyondBoundsState(
+    state: LazyStaggeredGridState
+): LazyLayoutBeyondBoundsState {
+    return remember(state) {
         LazyStaggeredGridBeyondBoundsState(state)
     }
-    return this then remember(
-        beyondBoundsState,
-        state,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            beyondBoundsState,
-            state.beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
-    }
 }
 
 internal class LazyStaggeredGridBeyondBoundsState(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt
index 764eef5..b54f9f5 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt
@@ -36,6 +36,7 @@
 import androidx.compose.foundation.lazy.layout.LazyLayoutPinnableItem
 import androidx.compose.foundation.lazy.layout.MutableIntervalList
 import androidx.compose.foundation.lazy.layout.NearestRangeKeyIndexMap
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -144,11 +145,16 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .pagerBeyondBoundsModifier(
-                state,
-                beyondBoundsPageCount,
-                reverseLayout,
-                orientation
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberPagerBeyondBoundsState(
+                    state = state,
+                    beyondBoundsPageCount = beyondBoundsPageCount
+                ),
+                beyondBoundsInfo = state.beyondBoundsInfo,
+                reverseLayout = reverseLayout,
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
index 881469e..96445ff 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.foundation.pager
 
+import androidx.annotation.FloatRange
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.DecayAnimationSpec
 import androidx.compose.animation.core.LinearEasing
@@ -28,10 +29,12 @@
 import androidx.compose.foundation.gestures.FlingBehavior
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.ScrollScope
+import androidx.compose.foundation.gestures.snapping.FinalSnappingItem
 import androidx.compose.foundation.gestures.snapping.MinFlingVelocityDp
 import androidx.compose.foundation.gestures.snapping.SnapFlingBehavior
 import androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider
 import androidx.compose.foundation.gestures.snapping.calculateDistanceToDesiredSnapPosition
+import androidx.compose.foundation.gestures.snapping.calculateFinalSnappingItem
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Stable
@@ -273,6 +276,110 @@
      * @see androidx.compose.foundation.gestures.snapping.SnapFlingBehavior for more information
      * on what which parameter controls in the overall snapping animation.
      *
+     * The animation specs used by the fling behavior will depend on 2 factors:
+     * 1) The gesture velocity.
+     * 2) The target page proposed by [pagerSnapDistance].
+     *
+     * If you're using single page snapping (the most common use case for [Pager]), there won't
+     * be enough space to actually run a decay animation to approach the target page, so the Pager
+     * will always use the snapping animation from [snapAnimationSpec].
+     * If you're using multi-page snapping (this means you're abs(targetPage - currentPage) > 1)
+     * the Pager may use [highVelocityAnimationSpec] or [lowVelocityAnimationSpec] to approach the
+     * targetPage, it will depend on the velocity generated by the triggering gesture.
+     * If the gesture has a high enough velocity to approach the target page, the Pager will use
+     * [highVelocityAnimationSpec] followed by [snapAnimationSpec] for the final step of the
+     * animation. If the gesture doesn't have enough velocity, the Pager will use
+     * [lowVelocityAnimationSpec] + [snapAnimationSpec] in a similar fashion.
+     *
+     * @param state The [PagerState] that controls the which to which this FlingBehavior will
+     * be applied to.
+     * @param pagerSnapDistance A way to control the snapping destination for this [Pager].
+     * The default behavior will result in any fling going to the next page in the direction of the
+     * fling (if the fling has enough velocity, otherwise  the Pager will bounce back). Use
+     * [PagerSnapDistance.atMost] to define a maximum number of pages this [Pager] is allowed to
+     * fling after scrolling is finished and fling has started.
+     * @param lowVelocityAnimationSpec An animation spec used to approach the target offset. When
+     * the fling velocity is not large enough. Large enough means large enough to naturally decay.
+     * When snapping through many pages, the Pager may not be able to run a decay animation, so it
+     * will use this spec to run an animation to approach the target page requested by
+     * [pagerSnapDistance].
+     * @param highVelocityAnimationSpec The animation spec used to approach the target offset. When
+     * the fling velocity is large enough. Large enough means large enough to naturally decay. For
+     * single page snapping this usually never happens since there won't be enough space to run a
+     * decay animation.
+     * @param snapAnimationSpec The animation spec used to finally snap to the position. This
+     * animation will be often used in 2 cases: 1) There was enough space to an approach animation,
+     * the Pager will use [snapAnimationSpec] in the last step of the animation to settle the page
+     * into position. 2) There was not enough space to run the approach animation.
+     * @param snapPositionalThreshold If the fling has a low velocity (e.g. slow scroll),
+     * this fling behavior will use this snap threshold in order to determine if the pager should
+     * snap back or move forward. Use a number between 0 and 1 as a fraction of the page size that
+     * needs to be scrolled before the Pager considers it should move to the next page.
+     * For instance, if snapPositionalThreshold = 0.35, it means if this pager is scrolled with a
+     * slow velocity and the Pager scrolls more than 35% of the page size, then will jump to the
+     * next page, if not it scrolls back.
+     * Note that any fling that has high enough velocity will *always* move to the next page
+     * in the direction of the fling.
+     *
+     * @return An instance of [FlingBehavior] that will perform Snapping to the next page by
+     * default. The animation will be governed by the post scroll velocity and the Pager will use
+     * either
+     * [lowVelocityAnimationSpec] or [highVelocityAnimationSpec] to approach the snapped position
+     * If a velocity is not high enough the pager will use [snapAnimationSpec] to reach the snapped
+     * position. If the velocity is high enough, the Pager will use the logic described in
+     * [highVelocityAnimationSpec] and [lowVelocityAnimationSpec].
+     */
+    @Composable
+    fun flingBehavior(
+        state: PagerState,
+        pagerSnapDistance: PagerSnapDistance = PagerSnapDistance.atMost(1),
+        lowVelocityAnimationSpec: AnimationSpec<Float> = LowVelocityAnimationSpec,
+        highVelocityAnimationSpec: DecayAnimationSpec<Float> = rememberSplineBasedDecay(),
+        snapAnimationSpec: AnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow),
+        @FloatRange(from = 0.0, to = 1.0) snapPositionalThreshold: Float = 0.5f
+    ): SnapFlingBehavior {
+        require(snapPositionalThreshold in 0f..1f) {
+            "snapPositionalThreshold should be a number between 0 and 1. " +
+                "You've specified $snapPositionalThreshold"
+        }
+        val density = LocalDensity.current
+        return remember(
+            state,
+            lowVelocityAnimationSpec,
+            highVelocityAnimationSpec,
+            snapAnimationSpec,
+            pagerSnapDistance,
+            density
+        ) {
+            val snapLayoutInfoProvider =
+                SnapLayoutInfoProvider(
+                    state,
+                    pagerSnapDistance,
+                    highVelocityAnimationSpec,
+                    snapPositionalThreshold
+                )
+
+            SnapFlingBehavior(
+                snapLayoutInfoProvider = snapLayoutInfoProvider,
+                lowVelocityAnimationSpec = lowVelocityAnimationSpec,
+                highVelocityAnimationSpec = highVelocityAnimationSpec,
+                snapAnimationSpec = snapAnimationSpec
+            )
+        }
+    }
+
+    /**
+     * The [AnimationSpec] used by [flingBehavior] in flings with low velocity.
+     */
+    val LowVelocityAnimationSpec: AnimationSpec<Float> =
+        tween(easing = LinearEasing, durationMillis = LowVelocityAnimationDefaultDuration)
+
+    /**
+     * A [SnapFlingBehavior] that will snap pages to the start of the layout. One can use the
+     * given parameters to control how the snapping animation will happen.
+     * @see androidx.compose.foundation.gestures.snapping.SnapFlingBehavior for more information
+     * on what which parameter controls in the overall snapping animation.
+     *
      * The animation specs used by the fling behavior will depend on 3 factors:
      * 1) The gesture velocity.
      * 2) The target page proposed by [pagerSnapDistance].
@@ -334,6 +441,12 @@
      * [snapAnimationSpec] to reach the snapped position. If the velocity is high enough, the Pager
      * will use the logic described in [highVelocityAnimationSpec] and [lowVelocityAnimationSpec].
      */
+    @Suppress("UNUSED_PARAMETER")
+    @Deprecated(
+        "Please use the overload without snapVelocityThreshold. For Pager" +
+            "the functionalities provided by snapVelocityThreshold were already being provided by" +
+            "other APIS."
+    )
     @Composable
     fun flingBehavior(
         state: PagerState,
@@ -346,37 +459,14 @@
         snapAnimationSpec: AnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow),
         snapVelocityThreshold: Dp = MinFlingVelocityDp,
         snapPositionalThreshold: Float = 0.5f
-    ): SnapFlingBehavior {
-        require(snapPositionalThreshold in 0f..1f) {
-            "snapPositionalThreshold should be a number between 0 and 1. " +
-                "You've specified $snapPositionalThreshold"
-        }
-        val density = LocalDensity.current
-        return remember(
-            state,
-            lowVelocityAnimationSpec,
-            highVelocityAnimationSpec,
-            snapAnimationSpec,
-            pagerSnapDistance,
-            density
-        ) {
-            val snapLayoutInfoProvider =
-                SnapLayoutInfoProvider(
-                    state,
-                    pagerSnapDistance,
-                    highVelocityAnimationSpec,
-                    snapPositionalThreshold
-                )
-
-            SnapFlingBehavior(
-                snapLayoutInfoProvider = snapLayoutInfoProvider,
-                lowVelocityAnimationSpec = lowVelocityAnimationSpec,
-                highVelocityAnimationSpec = highVelocityAnimationSpec,
-                snapAnimationSpec = snapAnimationSpec,
-                shortSnapVelocityThreshold = with(density) { snapVelocityThreshold.toPx() }
-            )
-        }
-    }
+    ) = flingBehavior(
+        state,
+        pagerSnapDistance,
+        lowVelocityAnimationSpec,
+        highVelocityAnimationSpec,
+        snapAnimationSpec,
+        snapPositionalThreshold
+    )
 
     /**
      * The default implementation of Pager's pageNestedScrollConnection.
@@ -533,8 +623,10 @@
 
             // If the velocity is not high, use the positional threshold to decide where to go.
             // This is applicable mainly when the user scrolls and lets go without flinging.
-            val finalDistance = when (sign(currentVelocity)) {
-                0f -> {
+            val finalSnappingItem =
+                with(pagerState.density) { calculateFinalSnappingItem(currentVelocity) }
+            val finalDistance = when (finalSnappingItem) {
+                FinalSnappingItem.ClosestItem -> {
                     if (offsetFromSnappedPositionOverflow.absoluteValue > snapPositionalThreshold) {
                         // If we crossed the threshold, go to the next bound
                         if (isForward) upperBoundOffset else lowerBoundOffset
@@ -556,8 +648,8 @@
                     }
                 }
 
-                1f -> upperBoundOffset
-                -1f -> lowerBoundOffset
+                FinalSnappingItem.NextItem -> upperBoundOffset
+                FinalSnappingItem.PreviousItem -> lowerBoundOffset
                 else -> 0f
             }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
index 10164bb..e31f8b0 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
@@ -16,42 +16,18 @@
 package androidx.compose.foundation.pager
 
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional pages when the Pager receives a
- * request to layout pages beyond the visible bounds.
- */
 @OptIn(ExperimentalFoundationApi::class)
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.pagerBeyondBoundsModifier(
+internal fun rememberPagerBeyondBoundsState(
     state: PagerState,
-    beyondBoundsPageCount: Int,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    return this then remember(
-        state,
-        beyondBoundsPageCount,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            PagerBeyondBoundsState(state, beyondBoundsPageCount),
-            state.beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
+    beyondBoundsPageCount: Int
+): LazyLayoutBeyondBoundsState {
+    return remember(state, beyondBoundsPageCount) {
+        PagerBeyondBoundsState(state, beyondBoundsPageCount)
     }
 }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
index 67f75f7..6c3c817 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
@@ -225,6 +225,7 @@
     ) {
         if (textChanged || (drawChanged && semanticsTextLayoutResult != null)) {
             if (isAttached) {
+                // isAttached check because invalidateSemantics will throw otherwise
                 invalidateSemantics()
             }
         }
@@ -241,6 +242,7 @@
                 placeholders = placeholders
             )
             if (isAttached) {
+                // isAttached check because invalidateMeasurement will throw otherwise
                 invalidateMeasurement()
             }
             invalidateDraw()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
index 2d39051..b9511fb 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
@@ -185,6 +185,7 @@
     ) {
         if (textChanged || (drawChanged && semanticsTextLayoutResult != null)) {
             if (isAttached) {
+                // isAttached check because invalidateSemantics will throw otherwise
                 invalidateSemantics()
             }
         }
@@ -200,6 +201,7 @@
                 minLines = minLines
             )
             if (isAttached) {
+                // isAttached check because invalidateMeasurement will throw otherwise
                 invalidateMeasurement()
             }
             invalidateDraw()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
index 5bf0b16..9ed470a 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
@@ -229,7 +229,17 @@
         }
 
         selectionRegistrar.onSelectionUpdateStartCallback =
-            { isInTouchMode, layoutCoordinates, position, selectionMode ->
+            { isInTouchMode, layoutCoordinates, rawPosition, selectionMode ->
+                val textRect = with(layoutCoordinates.size) {
+                    Rect(0f, 0f, width.toFloat(), height.toFloat())
+                }
+
+                val position = if (textRect.containsInclusive(rawPosition)) {
+                    rawPosition
+                } else {
+                    rawPosition.coerceIn(textRect)
+                }
+
                 val positionInContainer = convertToContainerCoordinates(
                     layoutCoordinates,
                     position
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
index cb2939c..0859bd3 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
@@ -34,7 +34,7 @@
  *  - [InputTransformation].[maxLengthInCodepoints]`()`
  *  - [InputTransformation].[allCaps]`()`
  *
- * @sample androidx.compose.foundation.samples.BasicTextField2CustomFilterSample
+ * @sample androidx.compose.foundation.samples.BasicTextField2CustomInputTransformationSample
  */
 @ExperimentalFoundationApi
 @Stable
@@ -58,7 +58,54 @@
      */
     fun transformInput(originalValue: TextFieldCharSequence, valueWithChanges: TextFieldBuffer)
 
-    companion object
+    companion object {
+        /**
+         * Creates an [InputTransformation] from a function that accepts both the old and proposed
+         * [TextFieldCharSequence] and returns the [TextFieldCharSequence] to use for the field.
+         *
+         * [transformation] can return either `old`, `proposed`, or a completely different value.
+         *
+         * The selection or cursor will be updated automatically. For more control of selection
+         * implement [InputTransformation] directly.
+         *
+         * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueChooseSample
+         * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueReplaceSample
+         */
+        @ExperimentalFoundationApi
+        @Stable
+        fun byValue(
+            transformation: (
+                current: CharSequence,
+                proposed: CharSequence
+            ) -> CharSequence
+        ): InputTransformation = InputTransformationByValue(transformation)
+    }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+private data class InputTransformationByValue(
+    val transformation: (
+        old: CharSequence,
+        proposed: CharSequence
+    ) -> CharSequence
+) : InputTransformation {
+    override fun transformInput(
+        originalValue: TextFieldCharSequence,
+        valueWithChanges: TextFieldBuffer
+    ) {
+        val proposed = valueWithChanges.toTextFieldCharSequence()
+        val accepted = transformation(originalValue, proposed)
+        when {
+            // These are reference comparisons – text comparison will be done by setTextIfChanged.
+            accepted === proposed -> return
+            accepted === originalValue -> valueWithChanges.revertAllChanges()
+            else -> {
+                valueWithChanges.setTextIfChanged(accepted)
+            }
+        }
+    }
+
+    override fun toString(): String = "InputTransformation.byValue(transformation=$transformation)"
 }
 
 /**
@@ -68,7 +115,7 @@
  * The returned filter will use the [KeyboardOptions] from [next] if non-null, otherwise it will
  * use the options from this transformation.
  *
- * @sample androidx.compose.foundation.samples.BasicTextField2FilterChainingSample
+ * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationChainingSample
  *
  * @param next The [InputTransformation] that will be ran after this one.
  */
@@ -88,7 +135,7 @@
  * The returned filter will use the [KeyboardOptions] from [next] if non-null, otherwise it will
  * use the options from this transformation.
  *
- * @sample androidx.compose.foundation.samples.BasicTextField2FilterChainingSample
+ * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationChainingSample
  *
  * @param next The [InputTransformation] that will be ran after this one.
  */
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
index a332068..7257d0e 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
@@ -123,7 +123,7 @@
      * @see insert
      * @see delete
      */
-    fun replace(start: Int, end: Int, text: String) {
+    fun replace(start: Int, end: Int, text: CharSequence) {
         replace(start, end, text, 0, text.length)
     }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
index 82885f3..d41f228 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
@@ -68,7 +68,7 @@
 
     constructor(
         initialText: String = "",
-        initialSelectionInChars: TextRange = TextRange.Zero
+        initialSelectionInChars: TextRange = TextRange(initialText.length)
     ) : this(initialText, initialSelectionInChars, TextUndoManager())
 
     /**
@@ -466,10 +466,12 @@
  */
 @ExperimentalFoundationApi
 @Composable
-fun rememberTextFieldState(): TextFieldState =
-    rememberSaveable(saver = TextFieldState.Saver) {
-        TextFieldState()
-    }
+fun rememberTextFieldState(
+    initialText: String = "",
+    initialSelectionInChars: TextRange = TextRange(initialText.length)
+): TextFieldState = rememberSaveable(saver = TextFieldState.Saver) {
+    TextFieldState(initialText, initialSelectionInChars)
+}
 
 /**
  * Sets the text in this [TextFieldState] to [text], replacing any text that was previously there,
diff --git a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetector.kt b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/CommonModuleIncompatibilityDetector.kt
similarity index 67%
rename from compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetector.kt
rename to compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/CommonModuleIncompatibilityDetector.kt
index 77982f8..bb3582a 100644
--- a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetector.kt
+++ b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/CommonModuleIncompatibilityDetector.kt
@@ -26,18 +26,27 @@
 import com.android.tools.lint.detector.api.Severity
 import com.android.tools.lint.detector.api.SourceCodeScanner
 import com.intellij.psi.PsiMethod
+import org.jetbrains.uast.UClass
 import org.jetbrains.uast.UElement
 import org.jetbrains.uast.UImportStatement
+import org.jetbrains.uast.UObjectLiteralExpression
 import org.jetbrains.uast.USimpleNameReferenceExpression
 import org.jetbrains.uast.tryResolve
 
 /**
- * Lint [Detector] that catches platform-dependent references in a common module.
+ * Lint [Detector] that catches patterns that are disallowed in MPP (JS + Native) in common module.
+ * Most Compose modules are compiled only for JVM in AndroidX, so Kotlin compiler doesn't report
+ * these issues.
  */
-class PlatformReferenceInCommonModuleDetector : Detector(), SourceCodeScanner {
+class CommonModuleIncompatibilityDetector : Detector(), SourceCodeScanner {
 
     override fun getApplicableUastTypes(): List<Class<out UElement>> =
-        listOf(UImportStatement::class.java, USimpleNameReferenceExpression::class.java)
+        listOf(
+            UImportStatement::class.java,
+            USimpleNameReferenceExpression::class.java,
+            UClass::class.java,
+            UObjectLiteralExpression::class.java
+        )
 
     override fun createUastHandler(context: JavaContext): UElementHandler {
         if (!context.file.absolutePath.contains(COMMON_MAIN_PATH_PREFIX)) {
@@ -79,6 +88,30 @@
                     )
                 }
             }
+
+            override fun visitClass(node: UClass) {
+                val extendsLambda = node.uastSuperTypes.any { it.type.isLambda() }
+                if (extendsLambda) {
+                    context.report(
+                        EXTENDS_LAMBDA_ISSUE,
+                        node,
+                        context.getLocation(node.nameIdentifier),
+                        "Extending Kotlin lambda interfaces is not allowed in common code"
+                    )
+                }
+            }
+
+            override fun visitObjectLiteralExpression(node: UObjectLiteralExpression) {
+                val extendsLambda = node.declaration.uastSuperTypes.any { it.type.isLambda() }
+                if (extendsLambda) {
+                    context.report(
+                        EXTENDS_LAMBDA_ISSUE,
+                        node,
+                        context.getLocation(node),
+                        "Extending Kotlin lambda interfaces is not allowed in common code"
+                    )
+                }
+            }
         }
     }
 
@@ -94,7 +127,7 @@
             priority = 5,
             severity = Severity.ERROR,
             implementation = Implementation(
-                PlatformReferenceInCommonModuleDetector::class.java,
+                CommonModuleIncompatibilityDetector::class.java,
                 Scope.JAVA_FILE_SCOPE
             )
         )
@@ -110,7 +143,22 @@
             priority = 5,
             severity = Severity.ERROR,
             implementation = Implementation(
-                PlatformReferenceInCommonModuleDetector::class.java,
+                CommonModuleIncompatibilityDetector::class.java,
+                Scope.JAVA_FILE_SCOPE
+            )
+        )
+
+        val EXTENDS_LAMBDA_ISSUE = Issue.create(
+            id = "ExtendedFunctionNInterface",
+            briefDescription = "Extending Kotlin FunctionN interfaces in common code",
+            explanation = "Common Kotlin module are ported to other Kotlin targets, including JS." +
+                " Kotlin JS backend does not support extending lambda interfaces. Consider" +
+                "extending fun interface in common Kotlin code, or use expect/actual instead.",
+            category = Category.CORRECTNESS,
+            priority = 5,
+            severity = Severity.ERROR,
+            implementation = Implementation(
+                CommonModuleIncompatibilityDetector::class.java,
                 Scope.JAVA_FILE_SCOPE
             )
         )
diff --git a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt
index 2d45800..69b4a4d 100644
--- a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt
+++ b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt
@@ -33,8 +33,9 @@
             ListIteratorDetector.ISSUE,
             SteppedForLoopDetector.ISSUE,
             UnnecessaryLambdaCreationDetector.ISSUE,
-            PlatformReferenceInCommonModuleDetector.IMPORT_ISSUE,
-            PlatformReferenceInCommonModuleDetector.REFERENCE_ISSUE,
+            CommonModuleIncompatibilityDetector.IMPORT_ISSUE,
+            CommonModuleIncompatibilityDetector.REFERENCE_ISSUE,
+            CommonModuleIncompatibilityDetector.EXTENDS_LAMBDA_ISSUE,
             PrimitiveInCollectionDetector.ISSUE,
             PrimitiveInLambdaDetector.ISSUE,
         )
diff --git a/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetectorTest.kt b/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/CommonModuleIncompatibilityDetectorTest.kt
similarity index 69%
rename from compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetectorTest.kt
rename to compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/CommonModuleIncompatibilityDetectorTest.kt
index 811a9a1..41970ad 100644
--- a/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetectorTest.kt
+++ b/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/CommonModuleIncompatibilityDetectorTest.kt
@@ -27,12 +27,13 @@
 
 /* ktlint-disable max-line-length */
 @RunWith(JUnit4::class)
-class PlatformReferenceInCommonModuleDetectorTest : LintDetectorTest() {
-    override fun getDetector(): Detector = PlatformReferenceInCommonModuleDetector()
+class CommonModuleIncompatibilityDetectorTest : LintDetectorTest() {
+    override fun getDetector(): Detector = CommonModuleIncompatibilityDetector()
 
     override fun getIssues(): MutableList<Issue> = mutableListOf(
-        PlatformReferenceInCommonModuleDetector.IMPORT_ISSUE,
-        PlatformReferenceInCommonModuleDetector.REFERENCE_ISSUE
+        CommonModuleIncompatibilityDetector.IMPORT_ISSUE,
+        CommonModuleIncompatibilityDetector.REFERENCE_ISSUE,
+        CommonModuleIncompatibilityDetector.EXTENDS_LAMBDA_ISSUE
     )
 
     @Test
@@ -122,6 +123,44 @@
     }
 
     @Test
+    fun detectsLambdaSuperTypeInCommonMain() {
+        val file = kotlin(
+            "commonMain/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        lint().files(
+            file
+        )
+            .run()
+            .expect(
+                """
+src/commonMain/test/TestFile.kt:4: Error: Extending Kotlin lambda interfaces is not allowed in common code [ExtendedFunctionNInterface]
+                abstract class Test : () -> Unit
+                               ~~~~
+src/commonMain/test/TestFile.kt:5: Error: Extending Kotlin lambda interfaces is not allowed in common code [ExtendedFunctionNInterface]
+                interface TestI : () -> Unit
+                          ~~~~~
+src/commonMain/test/TestFile.kt:9: Error: Extending Kotlin lambda interfaces is not allowed in common code [ExtendedFunctionNInterface]
+                val a = object : () -> Unit {
+                        ^
+3 errors, 0 warnings
+                """.trimIndent()
+            )
+    }
+
+    @Test
     fun ignoresImportInOtherModules() {
         val jvmFile = kotlin(
             "jvmMain/test/TestFile.kt",
@@ -239,5 +278,64 @@
             .run()
             .expectClean()
     }
+
+    @Test
+    fun ignoreLambdaSuperTypeInPlatformSourceSets() {
+        val jvmFile = kotlin(
+            "jvmMain/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        val androidFile = kotlin(
+            "androidMain/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        val file = kotlin(
+            "main/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        lint().files(
+            jvmFile,
+            androidFile,
+            file
+        )
+            .run()
+            .expectClean()
+    }
 }
 /* ktlint-enable max-line-length */
diff --git a/compose/material/material-ripple/benchmark/build.gradle b/compose/material/material-ripple/benchmark/build.gradle
index ef1a72f..9d66e6f 100644
--- a/compose/material/material-ripple/benchmark/build.gradle
+++ b/compose/material/material-ripple/benchmark/build.gradle
@@ -40,10 +40,6 @@
 
 android {
     namespace "androidx.compose.material.ripple.benchmark"
-    defaultConfig {
-        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
-        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'None'
-    }
 }
 
 androidx {
diff --git a/compose/material/material-ripple/build.gradle b/compose/material/material-ripple/build.gradle
index f4f8356..3402ddc 100644
--- a/compose/material/material-ripple/build.gradle
+++ b/compose/material/material-ripple/build.gradle
@@ -100,10 +100,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/material/material/build.gradle b/compose/material/material/build.gradle
index 577c4b8..7697ff4 100644
--- a/compose/material/material/build.gradle
+++ b/compose/material/material/build.gradle
@@ -123,10 +123,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt
index efa929b..a1ad2e6 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt
@@ -133,8 +133,9 @@
     modifier: Modifier = Modifier,
     tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
 ) {
-    // TODO: b/149735981 semantics for content description
-    val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    val colorFilter = remember(tint) {
+        if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    }
     val semantics = if (contentDescription != null) {
         Modifier.semantics {
             this.contentDescription = contentDescription
diff --git a/compose/material3/benchmark/build.gradle b/compose/material3/benchmark/build.gradle
index df3e144..490c06c 100644
--- a/compose/material3/benchmark/build.gradle
+++ b/compose/material3/benchmark/build.gradle
@@ -26,6 +26,8 @@
 
     androidTestImplementation(project(":compose:material:material-icons-core"))
     androidTestImplementation(project(":compose:material3:material3"))
+    androidTestImplementation(project(":compose:material3:material3-adaptive"))
+    androidTestImplementation(project(":compose:material3:material3-window-size-class"))
     androidTestImplementation(project(":benchmark:benchmark-junit4"))
     androidTestImplementation(project(":compose:runtime:runtime"))
     androidTestImplementation(project(":compose:benchmark-utils"))
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/NavigationSuiteScaffoldBenchmarkTest.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/NavigationSuiteScaffoldBenchmarkTest.kt
new file mode 100644
index 0000000..2eb3cec
--- /dev/null
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/NavigationSuiteScaffoldBenchmarkTest.kt
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2023 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 androidx.compose.material3.benchmark
+
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
+import androidx.compose.material3.adaptive.NavigationSuiteScaffold
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableIntState
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkFirstCompose
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkComposeMeasureLayout
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import org.junit.Rule
+import org.junit.Test
+
+class NavigationSuiteScaffoldBenchmarkTest {
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val testCaseFactory = { NavigationSuiteScaffoldTestCase() }
+    @Test
+    fun firstPixel() {
+        benchmarkRule.benchmarkFirstRenderUntilStable(testCaseFactory)
+    }
+
+    @Test
+    fun firstCompose() {
+        benchmarkRule.benchmarkFirstCompose(testCaseFactory)
+    }
+
+    @Test
+    fun changeSelection() {
+        benchmarkRule.toggleStateBenchmarkComposeMeasureLayout(
+            testCaseFactory,
+            assertOneRecomposition = false,
+        )
+    }
+}
+
+@OptIn(ExperimentalMaterial3AdaptiveApi::class)
+internal class NavigationSuiteScaffoldTestCase : LayeredComposeTestCase(), ToggleableTestCase {
+    private lateinit var selectedIndexState: MutableIntState
+
+    @Composable
+    override fun MeasuredContent() {
+        selectedIndexState = remember { mutableIntStateOf(0) }
+
+        NavigationSuiteScaffold(
+            navigationSuiteItems = {
+                item(
+                    selected = selectedIndexState.value == 0,
+                    onClick = {},
+                    icon = { Spacer(Modifier.size(24.dp)) }
+                )
+                item(
+                    selected = selectedIndexState.value == 1,
+                    onClick = {},
+                    icon = { Spacer(Modifier.size(24.dp)) }
+                )
+            }
+        )
+    }
+
+    @Composable
+    override fun ContentWrappers(content: @Composable () -> Unit) {
+        MaterialTheme {
+            content()
+        }
+    }
+
+    override fun toggleState() {
+        selectedIndexState.value = if (selectedIndexState.value == 0) 1 else 0
+    }
+}
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/ProgressIndicatorBenchmark.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/ProgressIndicatorBenchmark.kt
new file mode 100644
index 0000000..0a8e117
--- /dev/null
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/ProgressIndicatorBenchmark.kt
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2023 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 androidx.compose.material3.benchmark
+
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.LinearProgressIndicator
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableFloatState
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkComposeMeasureLayout
+import androidx.test.filters.MediumTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@MediumTest
+@RunWith(Parameterized::class)
+class ProgressIndicatorBenchmark(private val type: ProgressIndicatorType) {
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun parameters() = ProgressIndicatorType.values()
+    }
+
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val testCaseFactory = { ProgressIndicatorTestCase(type) }
+
+    @Test
+    fun firstPixel() {
+        benchmarkRule.benchmarkToFirstPixel(testCaseFactory)
+    }
+
+    @Test
+    fun changeProgress() {
+        benchmarkRule.toggleStateBenchmarkComposeMeasureLayout(testCaseFactory)
+    }
+}
+internal class ProgressIndicatorTestCase(
+    private val type: ProgressIndicatorType
+) : LayeredComposeTestCase(), ToggleableTestCase {
+    private lateinit var state: MutableFloatState
+
+    @Composable
+    override fun MeasuredContent() {
+        state = remember { mutableFloatStateOf(0f) }
+
+        when (type) {
+            ProgressIndicatorType.Linear ->
+                LinearProgressIndicator(progress = state.value)
+            ProgressIndicatorType.Circular ->
+                CircularProgressIndicator(progress = state.value)
+        }
+    }
+
+    @Composable
+    override fun ContentWrappers(content: @Composable () -> Unit) {
+        MaterialTheme {
+            content()
+        }
+    }
+
+    override fun toggleState() {
+        state.value = if (state.value == 0f) 0.5f else 0.0f
+    }
+}
+
+enum class ProgressIndicatorType {
+    Linear, Circular
+}
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
index 05c800e..7e5d45e 100644
--- a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
@@ -17,8 +17,8 @@
 package androidx.compose.material3.benchmark
 
 import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.PrimaryTabRow
 import androidx.compose.material3.Tab
-import androidx.compose.material3.TabRow
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
@@ -58,7 +58,7 @@
     @Composable
     override fun MeasuredContent() {
         val titles = listOf("TAB 1", "TAB 2", "TAB 3")
-        TabRow(selectedTabIndex = state) {
+        PrimaryTabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 Tab(
                     text = { Text(title) },
diff --git a/compose/material3/material3-adaptive/api/current.txt b/compose/material3/material3-adaptive/api/current.txt
index c21a89f..1880771 100644
--- a/compose/material3/material3-adaptive/api/current.txt
+++ b/compose/material3/material3-adaptive/api/current.txt
@@ -12,7 +12,7 @@
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public final class AdaptiveLayoutDirective {
-    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, optional int maxVerticalPartitions, optional java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
+    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, int maxVerticalPartitions, java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getExcludedBounds();
     method public androidx.compose.material3.adaptive.GutterSizes getGutterSizes();
     method public int getMaxHorizontalPartitions();
@@ -200,8 +200,8 @@
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldDefaults {
+    method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
     method public androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement getListDetailLayoutArrangement();
-    method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies threePaneScaffoldAdaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
     property public final androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement ListDetailLayoutArrangement;
     field public static final androidx.compose.material3.adaptive.ThreePaneScaffoldDefaults INSTANCE;
   }
diff --git a/compose/material3/material3-adaptive/api/restricted_current.txt b/compose/material3/material3-adaptive/api/restricted_current.txt
index c21a89f..1880771 100644
--- a/compose/material3/material3-adaptive/api/restricted_current.txt
+++ b/compose/material3/material3-adaptive/api/restricted_current.txt
@@ -12,7 +12,7 @@
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public final class AdaptiveLayoutDirective {
-    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, optional int maxVerticalPartitions, optional java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
+    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, int maxVerticalPartitions, java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getExcludedBounds();
     method public androidx.compose.material3.adaptive.GutterSizes getGutterSizes();
     method public int getMaxHorizontalPartitions();
@@ -200,8 +200,8 @@
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldDefaults {
+    method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
     method public androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement getListDetailLayoutArrangement();
-    method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies threePaneScaffoldAdaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
     property public final androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement ListDetailLayoutArrangement;
     field public static final androidx.compose.material3.adaptive.ThreePaneScaffoldDefaults INSTANCE;
   }
diff --git a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt
index f1d5f60..2b8e76d 100644
--- a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt
+++ b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt
@@ -181,11 +181,15 @@
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
 private val MockSinglePaneLayoutDirective = AdaptiveLayoutDirective(
     maxHorizontalPartitions = 1,
-    gutterSizes = GutterSizes(0.dp, 0.dp)
+    gutterSizes = GutterSizes(0.dp, 0.dp),
+    maxVerticalPartitions = 1,
+    excludedBounds = emptyList()
 )
 
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
 private val MockDualPaneLayoutDirective = AdaptiveLayoutDirective(
     maxHorizontalPartitions = 2,
-    gutterSizes = GutterSizes(16.dp, 16.dp)
+    gutterSizes = GutterSizes(16.dp, 16.dp),
+    maxVerticalPartitions = 1,
+    excludedBounds = emptyList()
 )
diff --git a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
index 2242806..4b175bf 100644
--- a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
+++ b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
@@ -106,7 +106,9 @@
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
 private val MockLayoutDirective = AdaptiveLayoutDirective(
     maxHorizontalPartitions = 1,
-    gutterSizes = GutterSizes(0.dp, 0.dp)
+    gutterSizes = GutterSizes(0.dp, 0.dp),
+    maxVerticalPartitions = 1,
+    excludedBounds = emptyList()
 )
 
 internal const val ThreePaneScaffoldTestTag = "SampleThreePaneScaffold"
diff --git a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
index 629d238..f7077cf 100644
--- a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
+++ b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
@@ -45,12 +45,15 @@
             isTableTop = true
         }
         val hingeBounds = it.bounds.toComposeRect()
-        allHingeBounds.add(hingeBounds)
-        if (it.isSeparating) {
-            separatingHingeBounds.add(hingeBounds)
-        }
-        if (it.occlusionType == FoldingFeature.OcclusionType.FULL) {
-            occludingHingeBounds.add(hingeBounds)
+        // TODO(conradchen): Figure out how to deal with horizontal hinges
+        if (it.orientation == FoldingFeature.Orientation.VERTICAL) {
+            allHingeBounds.add(hingeBounds)
+            if (it.isSeparating) {
+                separatingHingeBounds.add(hingeBounds)
+            }
+            if (it.occlusionType == FoldingFeature.OcclusionType.FULL) {
+                occludingHingeBounds.add(hingeBounds)
+            }
         }
     }
     return Posture(
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/AdaptiveLayoutDirective.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/AdaptiveLayoutDirective.kt
index 9fc0544..d012a95a 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/AdaptiveLayoutDirective.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/AdaptiveLayoutDirective.kt
@@ -172,8 +172,8 @@
 class AdaptiveLayoutDirective(
     val maxHorizontalPartitions: Int,
     val gutterSizes: GutterSizes,
-    val maxVerticalPartitions: Int = 1,
-    val excludedBounds: List<Rect> = emptyList()
+    val maxVerticalPartitions: Int,
+    val excludedBounds: List<Rect>
 ) {
     override fun equals(other: Any?): Boolean {
         if (this === other) return true
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
index 3dcc396..82e419f 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
@@ -117,6 +117,8 @@
                 val layoutPhysicalPartitions = mutableListOf<Rect>()
                 var actualLeft = layoutBounds.left + outerVerticalGutterSize
                 var actualRight = layoutBounds.right - outerVerticalGutterSize
+                val actualTop = layoutBounds.top + outerHorizontalGutterSize
+                val actualBottom = layoutBounds.bottom - outerHorizontalGutterSize
                 // Assume hinge bounds are sorted from left to right, non-overlapped.
                 layoutDirective.excludedBounds.fastForEach { hingeBound ->
                     if (hingeBound.left <= actualLeft) {
@@ -133,7 +135,7 @@
                         // The hinge is inside the layout, add the current partition to the list and
                         // move the left edge of the next partition to the right of the hinge.
                         layoutPhysicalPartitions.add(
-                            Rect(actualLeft, layoutBounds.top, hingeBound.left, layoutBounds.bottom)
+                            Rect(actualLeft, actualTop, hingeBound.left, actualBottom)
                         )
                         actualLeft +=
                             max(hingeBound.right, hingeBound.left + innerVerticalGutterSize)
@@ -142,10 +144,12 @@
                 if (actualLeft < actualRight) {
                     // The last partition
                     layoutPhysicalPartitions.add(
-                        Rect(actualLeft, layoutBounds.top, actualRight, layoutBounds.bottom)
+                        Rect(actualLeft, actualTop, actualRight, actualBottom)
                     )
                 }
-                if (layoutPhysicalPartitions.size == 1) {
+                if (layoutPhysicalPartitions.size == 0) {
+                    // Display nothing
+                } else if (layoutPhysicalPartitions.size == 1) {
                     measureAndPlacePanes(
                         layoutPhysicalPartitions[0],
                         innerVerticalGutterSize,
@@ -266,7 +270,7 @@
 }
 
 private fun Placeable.PlacementScope.getLocalBounds(bounds: Rect): IntRect {
-    return bounds.translate(coordinates!!.localToWindow(Offset.Zero)).roundToIntRect()
+    return bounds.translate(coordinates!!.windowToLocal(Offset.Zero)).roundToIntRect()
 }
 
 private class PaneMeasurable(
@@ -325,7 +329,7 @@
      * @param secondaryPaneAdaptStrategy the adapt strategy of the secondary pane
      * @param tertiaryPaneAdaptStrategy the adapt strategy of the tertiary pane
      */
-    fun threePaneScaffoldAdaptStrategies(
+    fun adaptStrategies(
         primaryPaneAdaptStrategy: AdaptStrategy = AdaptStrategy.Hide,
         secondaryPaneAdaptStrategy: AdaptStrategy = AdaptStrategy.Hide,
         tertiaryPaneAdaptStrategy: AdaptStrategy = AdaptStrategy.Hide,
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
index 66b6f06..d7326ea 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
@@ -52,7 +52,7 @@
 fun calculateThreePaneScaffoldValue(
     maxHorizontalPartitions: Int,
     adaptStrategies: ThreePaneScaffoldAdaptStrategies =
-        ThreePaneScaffoldDefaults.threePaneScaffoldAdaptStrategies(),
+        ThreePaneScaffoldDefaults.adaptStrategies(),
     currentFocus: ThreePaneScaffoldRole? = null,
 ): ThreePaneScaffoldValue {
     var expandedCount = if (currentFocus != null) 1 else 0
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index f4017d9..c165fdb 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -124,6 +124,7 @@
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExpandedShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getHiddenShape();
     method @androidx.compose.runtime.Composable public long getScrimColor();
+    method public float getSheetMaxWidth();
     method public float getSheetPeekHeight();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
     property @androidx.compose.runtime.Composable public final long ContainerColor;
@@ -131,13 +132,14 @@
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape ExpandedShape;
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape HiddenShape;
     property @androidx.compose.runtime.Composable public final long ScrimColor;
+    property public final float SheetMaxWidth;
     property public final float SheetPeekHeight;
     property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
     field public static final androidx.compose.material3.BottomSheetDefaults INSTANCE;
   }
 
   public final class BottomSheetScaffoldKt {
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.BottomSheetScaffoldState rememberBottomSheetScaffoldState(optional androidx.compose.material3.SheetState bottomSheetState, optional androidx.compose.material3.SnackbarHostState snackbarHostState);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberStandardBottomSheetState(optional androidx.compose.material3.SheetValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange, optional boolean skipHiddenState);
   }
@@ -491,9 +493,11 @@
     method @androidx.compose.runtime.Composable public void DatePickerTitle(int displayMode, optional androidx.compose.ui.Modifier modifier);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.DatePickerColors colors(optional long containerColor, optional long titleContentColor, optional long headlineContentColor, optional long weekdayContentColor, optional long subheadContentColor, optional long navigationContentColor, optional long yearContentColor, optional long disabledYearContentColor, optional long currentYearContentColor, optional long selectedYearContentColor, optional long disabledSelectedYearContentColor, optional long selectedYearContainerColor, optional long disabledSelectedYearContainerColor, optional long dayContentColor, optional long disabledDayContentColor, optional long selectedDayContentColor, optional long disabledSelectedDayContentColor, optional long selectedDayContainerColor, optional long disabledSelectedDayContainerColor, optional long todayContentColor, optional long todayDateBorderColor, optional long dayInSelectionRangeContentColor, optional long dayInSelectionRangeContainerColor, optional long dividerColor, optional androidx.compose.material3.TextFieldColors dateTextFieldColors);
     method public androidx.compose.material3.DatePickerFormatter dateFormatter(optional String yearSelectionSkeleton, optional String selectedDateSkeleton, optional String selectedDateDescriptionSkeleton);
+    method public androidx.compose.material3.SelectableDates getAllDates();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method public float getTonalElevation();
     method public kotlin.ranges.IntRange getYearRange();
+    property public final androidx.compose.material3.SelectableDates AllDates;
     property public final float TonalElevation;
     property public final kotlin.ranges.IntRange YearRange;
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape shape;
@@ -514,6 +518,7 @@
 
   public final class DatePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DatePicker(androidx.compose.material3.DatePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DatePickerState DatePickerState(java.util.Locale locale, optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DatePickerState rememberDatePickerState(optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -541,6 +546,7 @@
 
   public final class DateRangePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DateRangePicker(androidx.compose.material3.DateRangePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DateRangePickerState DateRangePickerState(java.util.Locale locale, optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DateRangePickerState rememberDateRangePickerState(optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -648,21 +654,23 @@
 
   @androidx.compose.runtime.Stable public final class DrawerState {
     ctor public DrawerState(androidx.compose.material3.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.DrawerValue,java.lang.Boolean> confirmStateChange);
-    method public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @Deprecated public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public float getCurrentOffset();
     method public androidx.compose.material3.DrawerValue getCurrentValue();
-    method public androidx.compose.runtime.State<java.lang.Float> getOffset();
+    method @Deprecated public androidx.compose.runtime.State<java.lang.Float> getOffset();
     method public androidx.compose.material3.DrawerValue getTargetValue();
     method public boolean isAnimationRunning();
     method public boolean isClosed();
     method public boolean isOpen();
     method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? snapTo(androidx.compose.material3.DrawerValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final float currentOffset;
     property public final androidx.compose.material3.DrawerValue currentValue;
     property public final boolean isAnimationRunning;
     property public final boolean isClosed;
     property public final boolean isOpen;
-    property public final androidx.compose.runtime.State<java.lang.Float> offset;
+    property @Deprecated public final androidx.compose.runtime.State<java.lang.Float> offset;
     property public final androidx.compose.material3.DrawerValue targetValue;
     field public static final androidx.compose.material3.DrawerState.Companion Companion;
   }
@@ -951,7 +959,7 @@
   }
 
   public final class ModalBottomSheet_androidKt {
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberModalBottomSheetState(optional boolean skipPartiallyExpanded, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange);
   }
 
@@ -1607,17 +1615,31 @@
     method @Deprecated @androidx.compose.runtime.Composable public void Indicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
     method @androidx.compose.runtime.Composable public void PrimaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float width, optional float height, optional long color, optional androidx.compose.ui.graphics.Shape shape);
     method @androidx.compose.runtime.Composable public void SecondaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
-    method @androidx.compose.runtime.Composable public long getContainerColor();
-    method @androidx.compose.runtime.Composable public long getContentColor();
+    method @Deprecated @androidx.compose.runtime.Composable public long getContainerColor();
+    method @Deprecated @androidx.compose.runtime.Composable public long getContentColor();
+    method @androidx.compose.runtime.Composable public long getPrimaryContainerColor();
+    method @androidx.compose.runtime.Composable public long getPrimaryContentColor();
+    method public float getScrollableTabRowEdgeStartPadding();
+    method @androidx.compose.runtime.Composable public long getSecondaryContainerColor();
+    method @androidx.compose.runtime.Composable public long getSecondaryContentColor();
     method public androidx.compose.ui.Modifier tabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.material3.TabPosition currentTabPosition);
-    property @androidx.compose.runtime.Composable public final long containerColor;
-    property @androidx.compose.runtime.Composable public final long contentColor;
+    property public final float ScrollableTabRowEdgeStartPadding;
+    property @Deprecated @androidx.compose.runtime.Composable public final long containerColor;
+    property @Deprecated @androidx.compose.runtime.Composable public final long contentColor;
+    property @androidx.compose.runtime.Composable public final long primaryContainerColor;
+    property @androidx.compose.runtime.Composable public final long primaryContentColor;
+    property @androidx.compose.runtime.Composable public final long secondaryContainerColor;
+    property @androidx.compose.runtime.Composable public final long secondaryContentColor;
     field public static final androidx.compose.material3.TabRowDefaults INSTANCE;
   }
 
   public final class TabRowKt {
-    method @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
-    method @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void PrimaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void PrimaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void SecondaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void SecondaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
   }
 
   @androidx.compose.runtime.Immutable public final class TextFieldColors {
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index f4017d9..c165fdb 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -124,6 +124,7 @@
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExpandedShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getHiddenShape();
     method @androidx.compose.runtime.Composable public long getScrimColor();
+    method public float getSheetMaxWidth();
     method public float getSheetPeekHeight();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
     property @androidx.compose.runtime.Composable public final long ContainerColor;
@@ -131,13 +132,14 @@
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape ExpandedShape;
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape HiddenShape;
     property @androidx.compose.runtime.Composable public final long ScrimColor;
+    property public final float SheetMaxWidth;
     property public final float SheetPeekHeight;
     property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
     field public static final androidx.compose.material3.BottomSheetDefaults INSTANCE;
   }
 
   public final class BottomSheetScaffoldKt {
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.BottomSheetScaffoldState rememberBottomSheetScaffoldState(optional androidx.compose.material3.SheetState bottomSheetState, optional androidx.compose.material3.SnackbarHostState snackbarHostState);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberStandardBottomSheetState(optional androidx.compose.material3.SheetValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange, optional boolean skipHiddenState);
   }
@@ -491,9 +493,11 @@
     method @androidx.compose.runtime.Composable public void DatePickerTitle(int displayMode, optional androidx.compose.ui.Modifier modifier);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.DatePickerColors colors(optional long containerColor, optional long titleContentColor, optional long headlineContentColor, optional long weekdayContentColor, optional long subheadContentColor, optional long navigationContentColor, optional long yearContentColor, optional long disabledYearContentColor, optional long currentYearContentColor, optional long selectedYearContentColor, optional long disabledSelectedYearContentColor, optional long selectedYearContainerColor, optional long disabledSelectedYearContainerColor, optional long dayContentColor, optional long disabledDayContentColor, optional long selectedDayContentColor, optional long disabledSelectedDayContentColor, optional long selectedDayContainerColor, optional long disabledSelectedDayContainerColor, optional long todayContentColor, optional long todayDateBorderColor, optional long dayInSelectionRangeContentColor, optional long dayInSelectionRangeContainerColor, optional long dividerColor, optional androidx.compose.material3.TextFieldColors dateTextFieldColors);
     method public androidx.compose.material3.DatePickerFormatter dateFormatter(optional String yearSelectionSkeleton, optional String selectedDateSkeleton, optional String selectedDateDescriptionSkeleton);
+    method public androidx.compose.material3.SelectableDates getAllDates();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method public float getTonalElevation();
     method public kotlin.ranges.IntRange getYearRange();
+    property public final androidx.compose.material3.SelectableDates AllDates;
     property public final float TonalElevation;
     property public final kotlin.ranges.IntRange YearRange;
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape shape;
@@ -514,6 +518,7 @@
 
   public final class DatePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DatePicker(androidx.compose.material3.DatePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DatePickerState DatePickerState(java.util.Locale locale, optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DatePickerState rememberDatePickerState(optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -541,6 +546,7 @@
 
   public final class DateRangePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DateRangePicker(androidx.compose.material3.DateRangePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DateRangePickerState DateRangePickerState(java.util.Locale locale, optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DateRangePickerState rememberDateRangePickerState(optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -648,21 +654,23 @@
 
   @androidx.compose.runtime.Stable public final class DrawerState {
     ctor public DrawerState(androidx.compose.material3.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.DrawerValue,java.lang.Boolean> confirmStateChange);
-    method public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @Deprecated public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public float getCurrentOffset();
     method public androidx.compose.material3.DrawerValue getCurrentValue();
-    method public androidx.compose.runtime.State<java.lang.Float> getOffset();
+    method @Deprecated public androidx.compose.runtime.State<java.lang.Float> getOffset();
     method public androidx.compose.material3.DrawerValue getTargetValue();
     method public boolean isAnimationRunning();
     method public boolean isClosed();
     method public boolean isOpen();
     method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? snapTo(androidx.compose.material3.DrawerValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final float currentOffset;
     property public final androidx.compose.material3.DrawerValue currentValue;
     property public final boolean isAnimationRunning;
     property public final boolean isClosed;
     property public final boolean isOpen;
-    property public final androidx.compose.runtime.State<java.lang.Float> offset;
+    property @Deprecated public final androidx.compose.runtime.State<java.lang.Float> offset;
     property public final androidx.compose.material3.DrawerValue targetValue;
     field public static final androidx.compose.material3.DrawerState.Companion Companion;
   }
@@ -951,7 +959,7 @@
   }
 
   public final class ModalBottomSheet_androidKt {
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberModalBottomSheetState(optional boolean skipPartiallyExpanded, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange);
   }
 
@@ -1607,17 +1615,31 @@
     method @Deprecated @androidx.compose.runtime.Composable public void Indicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
     method @androidx.compose.runtime.Composable public void PrimaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float width, optional float height, optional long color, optional androidx.compose.ui.graphics.Shape shape);
     method @androidx.compose.runtime.Composable public void SecondaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
-    method @androidx.compose.runtime.Composable public long getContainerColor();
-    method @androidx.compose.runtime.Composable public long getContentColor();
+    method @Deprecated @androidx.compose.runtime.Composable public long getContainerColor();
+    method @Deprecated @androidx.compose.runtime.Composable public long getContentColor();
+    method @androidx.compose.runtime.Composable public long getPrimaryContainerColor();
+    method @androidx.compose.runtime.Composable public long getPrimaryContentColor();
+    method public float getScrollableTabRowEdgeStartPadding();
+    method @androidx.compose.runtime.Composable public long getSecondaryContainerColor();
+    method @androidx.compose.runtime.Composable public long getSecondaryContentColor();
     method public androidx.compose.ui.Modifier tabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.material3.TabPosition currentTabPosition);
-    property @androidx.compose.runtime.Composable public final long containerColor;
-    property @androidx.compose.runtime.Composable public final long contentColor;
+    property public final float ScrollableTabRowEdgeStartPadding;
+    property @Deprecated @androidx.compose.runtime.Composable public final long containerColor;
+    property @Deprecated @androidx.compose.runtime.Composable public final long contentColor;
+    property @androidx.compose.runtime.Composable public final long primaryContainerColor;
+    property @androidx.compose.runtime.Composable public final long primaryContentColor;
+    property @androidx.compose.runtime.Composable public final long secondaryContainerColor;
+    property @androidx.compose.runtime.Composable public final long secondaryContentColor;
     field public static final androidx.compose.material3.TabRowDefaults INSTANCE;
   }
 
   public final class TabRowKt {
-    method @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
-    method @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void PrimaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void PrimaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void SecondaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @androidx.compose.runtime.Composable public static void SecondaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
   }
 
   @androidx.compose.runtime.Immutable public final class TextFieldColors {
diff --git a/compose/material3/material3/build.gradle b/compose/material3/material3/build.gradle
index 28b67ea..4c22ca1 100644
--- a/compose/material3/material3/build.gradle
+++ b/compose/material3/material3/build.gradle
@@ -111,10 +111,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt
index 2e8c6a2..a8b34ca 100644
--- a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt
+++ b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt
@@ -75,7 +75,6 @@
 import androidx.compose.material3.samples.FilterChipWithLeadingIconSample
 import androidx.compose.material3.samples.FloatingActionButtonSample
 import androidx.compose.material3.samples.IconButtonSample
-import androidx.compose.material3.samples.IconTabs
 import androidx.compose.material3.samples.IconToggleButtonSample
 import androidx.compose.material3.samples.IndeterminateCircularProgressIndicatorSample
 import androidx.compose.material3.samples.IndeterminateLinearProgressIndicatorSample
@@ -106,7 +105,7 @@
 import androidx.compose.material3.samples.PlainTooltipSample
 import androidx.compose.material3.samples.PlainTooltipWithManualInvocationSample
 import androidx.compose.material3.samples.PrimaryIconTabs
-import androidx.compose.material3.samples.PrimaryTabs
+import androidx.compose.material3.samples.PrimaryTextTabs
 import androidx.compose.material3.samples.RadioButtonSample
 import androidx.compose.material3.samples.RadioGroupSample
 import androidx.compose.material3.samples.RangeSliderSample
@@ -119,11 +118,11 @@
 import androidx.compose.material3.samples.ScaffoldWithMultilineSnackbar
 import androidx.compose.material3.samples.ScaffoldWithSimpleSnackbar
 import androidx.compose.material3.samples.ScrollingFancyIndicatorContainerTabs
-import androidx.compose.material3.samples.ScrollingPrimaryTabs
-import androidx.compose.material3.samples.ScrollingSecondaryTabs
-import androidx.compose.material3.samples.ScrollingTextTabs
+import androidx.compose.material3.samples.ScrollingPrimaryTextTabs
+import androidx.compose.material3.samples.ScrollingSecondaryTextTabs
 import androidx.compose.material3.samples.SearchBarSample
-import androidx.compose.material3.samples.SecondaryTabs
+import androidx.compose.material3.samples.SecondaryIconTabs
+import androidx.compose.material3.samples.SecondaryTextTabs
 import androidx.compose.material3.samples.SegmentedButtonMultiSelectSample
 import androidx.compose.material3.samples.SegmentedButtonSingleSelectSample
 import androidx.compose.material3.samples.SimpleBottomAppBar
@@ -151,7 +150,6 @@
 import androidx.compose.material3.samples.TextFieldWithPlaceholder
 import androidx.compose.material3.samples.TextFieldWithPrefixAndSuffix
 import androidx.compose.material3.samples.TextFieldWithSupportingText
-import androidx.compose.material3.samples.TextTabs
 import androidx.compose.material3.samples.ThreeLineListItemWithExtendedSupporting
 import androidx.compose.material3.samples.ThreeLineListItemWithOverlineAndSupporting
 import androidx.compose.material3.samples.TimeInputSample
@@ -954,11 +952,11 @@
 private const val TabsExampleSourceUrl = "$SampleSourceUrl/TabSamples.kt"
 val TabsExamples = listOf(
     Example(
-        name = ::PrimaryTabs.name,
+        name = ::PrimaryTextTabs.name,
         description = TabsExampleDescription,
         sourceUrl = TabsExampleSourceUrl
     ) {
-        PrimaryTabs()
+        PrimaryTextTabs()
     },
     Example(
         name = ::PrimaryIconTabs.name,
@@ -968,25 +966,18 @@
         PrimaryIconTabs()
     },
     Example(
-        name = ::SecondaryTabs.name,
+        name = ::SecondaryTextTabs.name,
         description = TabsExampleDescription,
         sourceUrl = TabsExampleSourceUrl
     ) {
-        SecondaryTabs()
+        SecondaryTextTabs()
     },
     Example(
-        name = ::TextTabs.name,
+        name = ::SecondaryIconTabs.name,
         description = TabsExampleDescription,
         sourceUrl = TabsExampleSourceUrl
     ) {
-        TextTabs()
-    },
-    Example(
-        name = ::IconTabs.name,
-        description = TabsExampleDescription,
-        sourceUrl = TabsExampleSourceUrl
-    ) {
-        IconTabs()
+        SecondaryIconTabs()
     },
     Example(
         name = ::TextAndIconTabs.name,
@@ -1003,25 +994,18 @@
         LeadingIconTabs()
     },
     Example(
-        name = ::ScrollingPrimaryTabs.name,
+        name = ::ScrollingPrimaryTextTabs.name,
         description = TabsExampleDescription,
         sourceUrl = TabsExampleSourceUrl
     ) {
-        ScrollingPrimaryTabs()
+        ScrollingPrimaryTextTabs()
     },
     Example(
-        name = ::ScrollingSecondaryTabs.name,
+        name = ::ScrollingSecondaryTextTabs.name,
         description = TabsExampleDescription,
         sourceUrl = TabsExampleSourceUrl
     ) {
-        ScrollingSecondaryTabs()
-    },
-    Example(
-        name = ::ScrollingTextTabs.name,
-        description = TabsExampleDescription,
-        sourceUrl = TabsExampleSourceUrl
-    ) {
-        ScrollingTextTabs()
+        ScrollingSecondaryTextTabs()
     },
     Example(
         name = ::FancyTabs.name,
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
index f92469a..4cef431 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
@@ -42,10 +42,12 @@
 import androidx.compose.material3.Icon
 import androidx.compose.material3.LeadingIconTab
 import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.ScrollableTabRow
+import androidx.compose.material3.PrimaryScrollableTabRow
+import androidx.compose.material3.PrimaryTabRow
+import androidx.compose.material3.SecondaryScrollableTabRow
+import androidx.compose.material3.SecondaryTabRow
 import androidx.compose.material3.Tab
 import androidx.compose.material3.TabPosition
-import androidx.compose.material3.TabRow
 import androidx.compose.material3.TabRowDefaults
 import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
 import androidx.compose.material3.Text
@@ -63,19 +65,12 @@
 
 @Preview
 @Composable
-fun PrimaryTabs() {
+@Sampled
+fun PrimaryTextTabs() {
     var state by remember { mutableStateOf(0) }
     val titles = listOf("Tab 1", "Tab 2", "Tab 3 with lots of text")
     Column {
-        TabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
-            if (state < tabPositions.size) {
-                val width by animateDpAsState(targetValue = tabPositions[state].contentWidth)
-                TabRowDefaults.PrimaryIndicator(
-                    modifier = Modifier.tabIndicatorOffset(tabPositions[state]),
-                    width = width
-                )
-            }
-        }) {
+        PrimaryTabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 Tab(
                     selected = state == index,
@@ -98,14 +93,7 @@
     var state by remember { mutableStateOf(0) }
     val icons = listOf(Icons.Filled.Favorite, Icons.Filled.Favorite, Icons.Filled.Favorite)
     Column {
-        TabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
-            if (state < tabPositions.size) {
-                TabRowDefaults.PrimaryIndicator(
-                    modifier = Modifier.tabIndicatorOffset(tabPositions[state]),
-                    width = tabPositions[state].contentWidth
-                )
-            }
-        }) {
+        PrimaryTabRow(selectedTabIndex = state) {
             icons.forEachIndexed { index, icon ->
                 Tab(
                     selected = state == index,
@@ -119,11 +107,12 @@
 
 @Preview
 @Composable
-fun SecondaryTabs() {
+@Sampled
+fun SecondaryTextTabs() {
     var state by remember { mutableStateOf(0) }
     val titles = listOf("Tab 1", "Tab 2", "Tab 3 with lots of text")
     Column {
-        TabRow(selectedTabIndex = state) {
+        SecondaryTabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 Tab(
                     selected = state == index,
@@ -147,7 +136,7 @@
     var state by remember { mutableStateOf(0) }
     val titles = listOf("Tab 1", "Tab 2", "Tab 3 with lots of text")
     Column {
-        TabRow(selectedTabIndex = state) {
+        PrimaryTabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 Tab(
                     selected = state == index,
@@ -166,11 +155,11 @@
 
 @Preview
 @Composable
-fun IconTabs() {
+fun SecondaryIconTabs() {
     var state by remember { mutableStateOf(0) }
     val icons = listOf(Icons.Filled.Favorite, Icons.Filled.Favorite, Icons.Filled.Favorite)
     Column {
-        TabRow(selectedTabIndex = state) {
+        SecondaryTabRow(selectedTabIndex = state) {
             icons.forEachIndexed { index, icon ->
                 Tab(
                     selected = state == index,
@@ -197,7 +186,7 @@
         "Tab 3 with lots of text" to Icons.Filled.Favorite
     )
     Column {
-        TabRow(selectedTabIndex = state) {
+        PrimaryTabRow(selectedTabIndex = state) {
             titlesAndIcons.forEachIndexed { index, (title, icon) ->
                 Tab(
                     selected = state == index,
@@ -225,7 +214,7 @@
         "Tab 3 with lots of text" to Icons.Filled.Favorite
     )
     Column {
-        ScrollableTabRow(selectedTabIndex = state) {
+        PrimaryScrollableTabRow(selectedTabIndex = state) {
             titlesAndIcons.forEachIndexed { index, (title, icon) ->
                 LeadingIconTab(
                     selected = state == index,
@@ -245,7 +234,7 @@
 
 @Preview
 @Composable
-fun ScrollingPrimaryTabs() {
+fun ScrollingPrimaryTextTabs() {
     var state by remember { mutableStateOf(0) }
     val titles = listOf(
         "Tab 1",
@@ -260,7 +249,7 @@
         "Tab 10"
     )
     Column {
-        ScrollableTabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
+        PrimaryScrollableTabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
             if (state < tabPositions.size) {
                 val width by animateDpAsState(targetValue = tabPositions[state].contentWidth)
                 TabRowDefaults.PrimaryIndicator(
@@ -287,7 +276,7 @@
 
 @Preview
 @Composable
-fun ScrollingSecondaryTabs() {
+fun ScrollingSecondaryTextTabs() {
     var state by remember { mutableStateOf(0) }
     val titles = listOf(
         "Tab 1",
@@ -302,7 +291,7 @@
         "Tab 10"
     )
     Column {
-        ScrollableTabRow(selectedTabIndex = state) {
+        SecondaryScrollableTabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 Tab(
                     selected = state == index,
@@ -336,7 +325,7 @@
         "Tab 10"
     )
     Column {
-        ScrollableTabRow(selectedTabIndex = state) {
+        PrimaryScrollableTabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 Tab(
                     selected = state == index,
@@ -360,7 +349,7 @@
     var state by remember { mutableStateOf(0) }
     val titles = listOf("Tab 1", "Tab 2", "Tab 3")
     Column {
-        TabRow(selectedTabIndex = state) {
+        SecondaryTabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 FancyTab(
                     title = title,
@@ -393,7 +382,7 @@
     }
 
     Column {
-        TabRow(
+        SecondaryTabRow(
             selectedTabIndex = state,
             indicator = indicator
         ) {
@@ -425,7 +414,7 @@
     }
 
     Column {
-        TabRow(
+        SecondaryTabRow(
             selectedTabIndex = state,
             indicator = indicator
         ) {
@@ -466,7 +455,7 @@
     }
 
     Column {
-        ScrollableTabRow(
+        SecondaryScrollableTabRow(
             selectedTabIndex = state,
             indicator = indicator
         ) {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt
index 6735b7d..abc29a9 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt
@@ -38,7 +38,12 @@
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.tokens.SheetBottomTokens
 import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
 import androidx.compose.testutils.assertContainsColor
 import androidx.compose.testutils.assertShape
 import androidx.compose.ui.Modifier
@@ -53,6 +58,7 @@
 import androidx.compose.ui.layout.LayoutCoordinates
 import androidx.compose.ui.layout.onGloballyPositioned
 import androidx.compose.ui.layout.positionInRoot
+import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.semantics.SemanticsActions
@@ -64,6 +70,7 @@
 import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo
 import androidx.compose.ui.test.assertWidthIsEqualTo
 import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.getUnclippedBoundsInRoot
 import androidx.compose.ui.test.junit4.StateRestorationTester
 import androidx.compose.ui.test.junit4.createAndroidComposeRule
 import androidx.compose.ui.test.onNodeWithContentDescription
@@ -74,9 +81,11 @@
 import androidx.compose.ui.test.swipeDown
 import androidx.compose.ui.test.swipeUp
 import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.coerceAtMost
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.width
 import androidx.compose.ui.zIndex
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
@@ -664,6 +673,55 @@
         }
     }
 
+    @Test
+    fun bottomSheetScaffold_landscape_filledWidth_sheetFillsEntireWidth() {
+        rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+        val latch = CountDownLatch(1)
+
+        rule.activity.application.registerComponentCallbacks(object : ComponentCallbacks2 {
+            override fun onConfigurationChanged(p0: Configuration) {
+                latch.countDown()
+            }
+
+            override fun onLowMemory() {
+                // NO-OP
+            }
+
+            override fun onTrimMemory(p0: Int) {
+                // NO-OP
+            }
+        })
+
+        try {
+            latch.await(1500, TimeUnit.MILLISECONDS)
+            var screenWidthPx by mutableStateOf(0)
+            rule.setContent {
+                val context = LocalContext.current
+                screenWidthPx = context.resources.displayMetrics.widthPixels
+                BottomSheetScaffold(
+                    sheetMaxWidth = Dp.Unspecified,
+                    sheetContent = {
+                        Box(
+                            Modifier
+                                .testTag(sheetTag)
+                                .fillMaxHeight(0.4f)
+                        )
+                    }
+                ) {
+                    Text("body")
+                }
+            }
+
+            val sheet = rule.onNodeWithTag(sheetTag).onParent().getUnclippedBoundsInRoot()
+            val sheetWidthPx = with(rule.density) { sheet.width.roundToPx() }
+            assertThat(sheetWidthPx).isEqualTo(screenWidthPx)
+        } catch (e: InterruptedException) {
+            TestCase.fail("Unable to verify sheet width in landscape orientation")
+        } finally {
+            rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+        }
+    }
+
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
     @Test
     fun bottomSheetScaffold_testNestedScrollConnection() {
@@ -757,6 +815,38 @@
             .assertContainsColor(expectedPostScrolledContainerColor)
     }
 
+    @Test
+    fun bottomSheetScaffold_sheetMaxWidth_sizeChanges_snapsToNewTarget() {
+        lateinit var sheetMaxWidth: MutableState<Dp>
+        var screenWidth by mutableStateOf(0.dp)
+        rule.setContent {
+            sheetMaxWidth = remember { mutableStateOf(0.dp) }
+            val context = LocalContext.current
+            val density = LocalDensity.current
+            screenWidth = with(density) { context.resources.displayMetrics.widthPixels.toDp() }
+            BottomSheetScaffold(
+                sheetContent = {
+                    Box(
+                        Modifier
+                            .fillMaxSize()
+                            .testTag(sheetTag))
+                },
+                sheetPeekHeight = peekHeight,
+                sheetMaxWidth = sheetMaxWidth.value,
+                sheetDragHandle = null
+            ) {
+                Text("Content")
+            }
+        }
+
+        for (dp in listOf(0.dp, 200.dp, 400.dp)) {
+            sheetMaxWidth.value = dp
+            val sheetWidth = rule.onNodeWithTag(sheetTag).getUnclippedBoundsInRoot().width
+            val expectedSheetWidth = minOf(sheetMaxWidth.value, screenWidth)
+            assertThat(sheetWidth).isEqualTo(expectedSheetWidth)
+        }
+    }
+
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
     @Test
     fun bottomSheetScaffold_slotsPositionedAppropriately() {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CalendarModelTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CalendarModelTest.kt
index c7e969b..cab8791 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CalendarModelTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CalendarModelTest.kt
@@ -137,6 +137,49 @@
     }
 
     @Test
+    fun formatWithSkeleton() {
+        // Format twice to check that the formatter is outputting the right values, and that it's
+        // not failing due to cache issues.
+        var formatted = formatWithSkeleton(
+            January2022Millis,
+            DatePickerDefaults.YearMonthWeekdayDaySkeleton,
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("Saturday, January 1, 2022")
+
+        formatted = formatWithSkeleton(
+            January2022Millis - 1000000000,
+            DatePickerDefaults.YearMonthWeekdayDaySkeleton,
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("Monday, December 20, 2021")
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.M)
+    @Test
+    fun formatWithSkeletonProducingEqualPattern() {
+        // Format twice to check that the formatter is outputting the right values, and that it's
+        // not failing due to cache issues.
+        var formatted = formatWithSkeleton(
+            January2022Millis,
+            skeleton = "YY",
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("22")
+
+        formatted = formatWithSkeleton(
+            January2022Millis - 1000000000,
+            "YY",
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("21")
+    }
+
+    @Test
     fun weekdayNames() {
         // Ensure we are running on a US locale for this test.
         Locale.setDefault(Locale.US)
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt
index af0ce1f..c1fb453 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt
@@ -304,6 +304,24 @@
     }
 
     @Test
+    fun state_initWithoutRemember() {
+        val datePickerState = DatePickerState(
+            locale = Locale.getDefault(),
+            initialSelectedDateMillis = 1649721600000L // 04/12/2022
+        )
+        with(datePickerState) {
+            assertThat(selectedDateMillis).isEqualTo(1649721600000L)
+            // Using the JVM Locale.getDefault() for testing purposes only.
+            assertThat(displayedMonthMillis).isEqualTo(
+                createCalendarModel(Locale.getDefault()).getMonth(
+                    year = 2022,
+                    month = 4
+                ).startUtcTimeMillis
+            )
+        }
+    }
+
+    @Test
     fun state_initWithSelectedDate() {
         lateinit var datePickerState: DatePickerState
         rule.setMaterialContent(lightColorScheme()) {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt
index 31a1186..3eae52d 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt
@@ -44,6 +44,26 @@
     val rule = createComposeRule()
 
     @Test
+    fun state_initWithoutRemember() {
+        val dateRangePickerState = DateRangePickerState(
+            locale = Locale.getDefault(),
+            initialSelectedStartDateMillis = 1649721600000L, // 04/12/2022
+            initialSelectedEndDateMillis = 1649721600000L + MillisecondsIn24Hours // 04/13/2022
+        )
+        with(dateRangePickerState) {
+            assertThat(selectedStartDateMillis).isEqualTo(1649721600000L)
+            assertThat(selectedEndDateMillis).isEqualTo(1649721600000L + MillisecondsIn24Hours)
+            assertThat(displayedMonthMillis).isEqualTo(
+                // Using the JVM Locale.getDefault() for testing purposes only.
+                createCalendarModel(Locale.getDefault()).getMonth(
+                    year = 2022,
+                    month = 4
+                ).startUtcTimeMillis
+            )
+        }
+    }
+
+    @Test
     fun state_initWithSelectedDates() {
         lateinit var dateRangePickerState: DateRangePickerState
         rule.setMaterialContent(lightColorScheme()) {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt
index 192db1e..8ae5a45 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt
@@ -58,13 +58,12 @@
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
-@OptIn(ExperimentalMaterial3Api::class)
 class DismissibleNavigationDrawerTest {
 
     @get:Rule
     val rule = createComposeRule()
 
-    val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
+    private val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
 
     @Test
     fun dismissibleNavigationDrawer_testOffset_whenOpen() {
@@ -244,11 +243,13 @@
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
 
         // When the drawer state is set to Opened
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Open, TweenSpec())
         // Then the drawer should be opened
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(0.dp)
 
         // When the drawer state is set to Closed
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Closed, TweenSpec())
         // Then the drawer should be closed
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
@@ -560,4 +561,4 @@
         }
 }
 
-private val DrawerTestTag = "drawer"
+private const val DrawerTestTag = "drawer"
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
index 347ce70..f765c01 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
@@ -16,10 +16,6 @@
 
 package androidx.compose.material3
 
-import android.app.Activity
-import android.content.Context
-import android.content.ContextWrapper
-import android.view.WindowManager
 import android.widget.FrameLayout
 import androidx.compose.foundation.ScrollState
 import androidx.compose.foundation.gestures.animateScrollBy
@@ -34,7 +30,6 @@
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.SideEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
@@ -49,7 +44,6 @@
 import androidx.compose.ui.layout.onGloballyPositioned
 import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.platform.ComposeView
-import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.assertIsDisplayed
@@ -66,6 +60,7 @@
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.viewinterop.AndroidView
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.uiautomator.By
@@ -79,19 +74,11 @@
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
 
 @OptIn(ExperimentalMaterial3Api::class)
 @MediumTest
-@RunWith(Parameterized::class)
-class ExposedDropdownMenuTest(
-    private val softInputMode: SoftInputMode,
-) {
-    companion object {
-        @JvmStatic
-        @Parameterized.Parameters(name = "{0}")
-        fun parameters() = SoftInputMode.values()
-    }
+@RunWith(AndroidJUnit4::class)
+class ExposedDropdownMenuTest {
 
     @get:Rule
     val rule = createComposeRule()
@@ -106,7 +93,6 @@
     fun edm_expandsOnClick_andCollapsesOnClickOutside() {
         var textFieldBounds = Rect.Zero
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -137,7 +123,6 @@
     @Test
     fun edm_collapsesOnTextFieldClick() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(true) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -158,7 +143,6 @@
     @Test
     fun edm_doesNotCollapse_whenTypingOnSoftKeyboard() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -194,7 +178,6 @@
     @Test
     fun edm_expandsAndFocusesTextField_whenTrailingIconClicked() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -216,7 +199,6 @@
     fun edm_doesNotExpand_ifTouchEndsOutsideBounds() {
         var textFieldBounds = Rect.Zero
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -256,7 +238,6 @@
         val testIndex = 2
         var textFieldSize = IntSize.Zero
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             LazyColumn(
                 modifier = Modifier.fillMaxSize(),
                 horizontalAlignment = Alignment.CenterHorizontally,
@@ -342,7 +323,6 @@
         lateinit var scrollState: ScrollState
         lateinit var scope: CoroutineScope
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             scrollState = rememberScrollState()
             scope = rememberCoroutineScope()
             Column(Modifier.verticalScroll(scrollState)) {
@@ -391,7 +371,6 @@
         var textFieldBounds by mutableStateOf(Rect.Zero)
         var menuBounds by mutableStateOf(Rect.Zero)
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(true) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -416,7 +395,6 @@
     @Test
     fun edm_collapsesWithSelection_whenMenuItemClicked() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(true) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -444,7 +422,6 @@
 
         rule.setMaterialContent(lightColorScheme()) {
             density = LocalDensity.current
-            SoftInputMode(softInputMode)
             Column(Modifier.fillMaxSize()) {
                 // Push the EDM down so opening the keyboard causes a pan/scroll
                 Spacer(Modifier.weight(1f))
@@ -487,7 +464,6 @@
     fun edm_doesNotCrash_whenAnchorDetachedFirst() {
         var parent: FrameLayout? = null
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             AndroidView(
                 factory = { context ->
                     FrameLayout(context).apply {
@@ -525,13 +501,11 @@
         // Should not have crashed.
     }
 
-    @Ignore("b/297059209")
     @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun edm_withScrolledContent() {
         lateinit var scrollState: ScrollState
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             Box(Modifier.fillMaxSize()) {
                 ExposedDropdownMenuBox(
                     modifier = Modifier.align(Alignment.Center),
@@ -630,30 +604,3 @@
         }
     }
 }
-
-enum class SoftInputMode {
-    AdjustResize,
-    AdjustPan
-}
-
-@Suppress("DEPRECATION")
-@Composable
-fun SoftInputMode(mode: SoftInputMode) {
-    val context = LocalContext.current
-    DisposableEffect(mode) {
-        val activity = context.findActivityOrNull() ?: return@DisposableEffect onDispose {}
-        val originalMode = activity.window.attributes.softInputMode
-        activity.window.setSoftInputMode(when (mode) {
-            SoftInputMode.AdjustResize -> WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
-            SoftInputMode.AdjustPan -> WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
-        })
-        onDispose {
-            activity.window.setSoftInputMode(originalMode)
-        }
-    }
-}
-
-private tailrec fun Context.findActivityOrNull(): Activity? {
-    return (this as? Activity)
-        ?: (this as? ContextWrapper)?.baseContext?.findActivityOrNull()
-}
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
index ba00bd7..88f53b6 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
@@ -51,6 +51,7 @@
 import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.platform.LocalConfiguration
 import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.semantics.SemanticsActions
@@ -70,6 +71,7 @@
 import androidx.compose.ui.test.performTouchInput
 import androidx.compose.ui.test.swipeDown
 import androidx.compose.ui.test.swipeUp
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.Velocity
 import androidx.compose.ui.unit.coerceAtMost
@@ -208,7 +210,7 @@
     }
 
     @Test
-    fun modalBottomSheet_wideScreen_sheetRespectsMaxWidthAndIsCentered() {
+    fun modalBottomSheet_wideScreen_fixedMaxWidth_sheetRespectsMaxWidthAndIsCentered() {
         rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
         val latch = CountDownLatch(1)
 
@@ -267,6 +269,56 @@
     }
 
     @Test
+    fun modalBottomSheet_wideScreen_filledWidth_sheetFillsEntireWidth() {
+        rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+        val latch = CountDownLatch(1)
+
+        rule.activity.application.registerComponentCallbacks(object : ComponentCallbacks2 {
+            override fun onConfigurationChanged(p0: Configuration) {
+                latch.countDown()
+            }
+
+            override fun onLowMemory() {
+                // NO-OP
+            }
+
+            override fun onTrimMemory(p0: Int) {
+                // NO-OP
+            }
+        })
+
+        try {
+            latch.await(1500, TimeUnit.MILLISECONDS)
+            var screenWidthPx by mutableStateOf(0)
+            rule.setContent {
+                val context = LocalContext.current
+                screenWidthPx = context.resources.displayMetrics.widthPixels
+                val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+                    WindowInsets(0) else BottomSheetDefaults.windowInsets
+                ModalBottomSheet(
+                    onDismissRequest = {},
+                    sheetMaxWidth = Dp.Unspecified,
+                    windowInsets = windowInsets
+                ) {
+                    Box(
+                        Modifier
+                            .testTag(sheetTag)
+                            .fillMaxHeight(0.4f)
+                    )
+                }
+            }
+
+            val sheet = rule.onNodeWithTag(sheetTag).onParent().getUnclippedBoundsInRoot()
+            val sheetWidthPx = with(rule.density) { sheet.width.roundToPx() }
+            assertThat(sheetWidthPx).isEqualTo(screenWidthPx)
+        } catch (e: InterruptedException) {
+            fail("Unable to verify sheet width in landscape orientation")
+        } finally {
+            rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+        }
+    }
+
+    @Test
     fun modalBottomSheet_defaultStateForSmallContentIsFullExpanded() {
         lateinit var sheetState: SheetState
         var height by mutableStateOf(0.dp)
@@ -451,6 +503,38 @@
     }
 
     @Test
+    fun modalBottomSheet_sheetMaxWidth_sizeChanges_snapsToNewTarget() {
+        lateinit var sheetMaxWidth: MutableState<Dp>
+        var screenWidth by mutableStateOf(0.dp)
+        rule.setContent {
+            val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+                WindowInsets(0) else BottomSheetDefaults.windowInsets
+            sheetMaxWidth = remember { mutableStateOf(0.dp) }
+            val context = LocalContext.current
+            val density = LocalDensity.current
+            screenWidth = with(density) { context.resources.displayMetrics.widthPixels.toDp() }
+            ModalBottomSheet(
+                onDismissRequest = {},
+                sheetMaxWidth = sheetMaxWidth.value,
+                windowInsets = windowInsets
+            ) {
+                Box(
+                    Modifier
+                        .fillMaxWidth()
+                        .testTag(sheetTag)
+                )
+            }
+        }
+
+        for (dp in listOf(0.dp, 200.dp, 400.dp)) {
+            sheetMaxWidth.value = dp
+            val sheetWidth = rule.onNodeWithTag(sheetTag).getUnclippedBoundsInRoot().width
+            val expectedSheetWidth = minOf(sheetMaxWidth.value, screenWidth)
+            assertThat(sheetWidth).isEqualTo(expectedSheetWidth)
+        }
+    }
+
+    @Test
     fun modalBottomSheet_emptySheet_expandDoesNotAnimate() {
         lateinit var state: SheetState
         lateinit var scope: CoroutineScope
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalNavigationDrawerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalNavigationDrawerTest.kt
index db38109..efdacf0 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalNavigationDrawerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalNavigationDrawerTest.kt
@@ -61,17 +61,12 @@
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
-@OptIn(ExperimentalMaterial3Api::class)
 class ModalNavigationDrawerTest {
 
     @get:Rule
     val rule = createComposeRule()
 
-    private fun advanceClock() {
-        rule.mainClock.advanceTimeBy(100_000L)
-    }
-
-    val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
+    private val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
 
     @Test
     fun navigationDrawer_testOffset_whenOpen() {
@@ -251,11 +246,13 @@
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
 
         // When the drawer state is set to Opened
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Open, TweenSpec())
         // Then the drawer should be opened
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(0.dp)
 
         // When the drawer state is set to Closed
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Closed, TweenSpec())
         // Then the drawer should be closed
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
@@ -658,4 +655,4 @@
     }
 }
 
-private val DrawerTestTag = "drawer"
+private const val DrawerTestTag = "drawer"
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt
index 318b5c0..dec8676 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt
@@ -32,7 +32,6 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.test.ExperimentalTestApi
 import androidx.compose.ui.test.captureToImage
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
@@ -49,7 +48,6 @@
 @LargeTest
 @RunWith(AndroidJUnit4::class)
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-@OptIn(ExperimentalTestApi::class)
 class TabScreenshotTest {
 
     @get:Rule
@@ -547,7 +545,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        TabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
+        PrimaryTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
             TabRowDefaults.PrimaryIndicator(
                 modifier = Modifier.tabIndicatorOffset(tabPositions[0]),
                 width = tabPositions[0].contentWidth
@@ -587,7 +585,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        TabRow(selectedTabIndex = 0) {
+        SecondaryTabRow(selectedTabIndex = 0) {
             Tab(
                 selected = true,
                 onClick = {},
@@ -628,7 +626,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        TabRow(selectedTabIndex = 0,
+        PrimaryTabRow(selectedTabIndex = 0,
             containerColor = containerColor,
             indicator = @Composable { tabPositions ->
                 TabRowDefaults.PrimaryIndicator(
@@ -683,7 +681,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        TabRow(selectedTabIndex = 0,
+        SecondaryTabRow(selectedTabIndex = 0,
             containerColor = containerColor,
             indicator = @Composable { tabPositions ->
                 TabRowDefaults.SecondaryIndicator(
@@ -732,7 +730,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        TabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
+        PrimaryTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
             TabRowDefaults.PrimaryIndicator(
                 modifier = Modifier.tabIndicatorOffset(tabPositions[0]),
                 width = tabPositions[0].contentWidth
@@ -776,7 +774,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        TabRow(selectedTabIndex = 0) {
+        SecondaryTabRow(selectedTabIndex = 0) {
             LeadingIconTab(
                 selected = true,
                 onClick = {},
@@ -814,7 +812,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        ScrollableTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
+        PrimaryScrollableTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
             TabRowDefaults.PrimaryIndicator(
                 modifier = Modifier.tabIndicatorOffset(tabPositions[0]),
                 width = tabPositions[0].contentWidth
@@ -854,7 +852,7 @@
         Modifier
             .semantics(mergeDescendants = true) {}
             .testTag(TAG)) {
-        ScrollableTabRow(selectedTabIndex = 0) {
+        SecondaryScrollableTabRow(selectedTabIndex = 0) {
             Tab(
                 selected = true,
                 onClick = {},
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt
index f7c70cc..a1b41ed 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt
@@ -101,7 +101,7 @@
     @Test
     fun defaultSemantics() {
         rule.setMaterialContent(lightColorScheme()) {
-            TabRow(0) {
+            SecondaryTabRow(0) {
                 Tab(
                     selected = true,
                     onClick = {},
@@ -146,7 +146,7 @@
     @Test
     fun leadingIconTab_defaultSemantics() {
         rule.setMaterialContent(lightColorScheme()) {
-            TabRow(0) {
+            SecondaryTabRow(0) {
                 LeadingIconTab(
                     selected = true,
                     onClick = {},
@@ -260,7 +260,7 @@
             }
 
             Box(Modifier.testTag("tabRow")) {
-                TabRow(
+                SecondaryTabRow(
                     selectedTabIndex = state,
                     indicator = indicator
                 ) {
@@ -304,7 +304,7 @@
             val divider = @Composable { HorizontalDivider(Modifier.testTag("divider")) }
 
             Box(Modifier.testTag("tabRow")) {
-                TabRow(
+                SecondaryTabRow(
                     modifier = Modifier.height(tabRowHeight),
                     selectedTabIndex = 0,
                     divider = divider
@@ -338,7 +338,7 @@
             val titles = listOf("TAB")
 
             Box {
-                TabRow(
+                SecondaryTabRow(
                     modifier = Modifier.testTag("tabRow"),
                     selectedTabIndex = state
                 ) {
@@ -369,7 +369,7 @@
             val titles = listOf("TAB")
 
             Box {
-                TabRow(
+                SecondaryTabRow(
                     modifier = Modifier.testTag("tabRow"),
                     selectedTabIndex = state
                 ) {
@@ -409,7 +409,7 @@
             val titles = listOf("Two line \n text")
 
             Box {
-                TabRow(
+                SecondaryTabRow(
                     modifier = Modifier.testTag("tabRow"),
                     selectedTabIndex = state
                 ) {
@@ -438,7 +438,7 @@
     fun leadingIconTab_textAndIconPosition() {
         rule.setMaterialContent(lightColorScheme()) {
             Box {
-                TabRow(
+                SecondaryTabRow(
                     modifier = Modifier.testTag("tabRow"),
                     selectedTabIndex = 0
                 ) {
@@ -495,7 +495,7 @@
             }
 
             Box {
-                ScrollableTabRow(
+                SecondaryScrollableTabRow(
                     modifier = Modifier.testTag("tabRow"),
                     selectedTabIndex = state,
                     indicator = indicator
@@ -542,7 +542,7 @@
             val divider = @Composable { HorizontalDivider(Modifier.testTag("divider")) }
 
             Box(Modifier.testTag("tabRow")) {
-                ScrollableTabRow(
+                SecondaryScrollableTabRow(
                     modifier = Modifier.height(tabRowHeight),
                     selectedTabIndex = 0,
                     divider = divider
@@ -687,7 +687,7 @@
             .setMaterialContent(lightColorScheme()) {
                 var state by remember { mutableStateOf(9) }
                 val titles = List(10) { "Tab ${it + 1}" }
-                ScrollableTabRow(selectedTabIndex = state) {
+                SecondaryScrollableTabRow(selectedTabIndex = state) {
                     titles.forEachIndexed { index, title ->
                         Tab(
                             selected = state == index,
@@ -757,7 +757,7 @@
             }
 
             Box {
-                ScrollableTabRow(
+                SecondaryScrollableTabRow(
                     selectedTabIndex = state,
                     indicator = indicator
                 ) {
@@ -881,7 +881,7 @@
                         .heightIn(max = height)
                         .testTag("Tabs")
                 ) {
-                    TabRow(selectedTabIndex = state) {
+                    SecondaryTabRow(selectedTabIndex = state) {
                         titles.forEachIndexed { index, title ->
                             Tab(
                                 selected = state == index,
@@ -913,7 +913,7 @@
                         .heightIn(max = height)
                         .testTag("Tabs")
                 ) {
-                    ScrollableTabRow(selectedTabIndex = state) {
+                    SecondaryScrollableTabRow(selectedTabIndex = state) {
                         titles.forEachIndexed { index, title ->
                             Tab(
                                 selected = state == index,
@@ -936,7 +936,7 @@
     @Test
     fun tabRow_noTabsHasHeightZero() {
         rule.setMaterialContent(lightColorScheme()) {
-            TabRow(
+            SecondaryTabRow(
                 modifier = Modifier.testTag("tabRow"),
                 selectedTabIndex = 0
             ) {}
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorScreenshotTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorScreenshotTest.kt
new file mode 100644
index 0000000..7cefabb
--- /dev/null
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorScreenshotTest.kt
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2023 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 androidx.compose.material3.pullrefresh
+
+import android.os.Build
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.material3.CircularIndicatorDiameter
+import androidx.compose.material3.ColorScheme
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.GOLDEN_MATERIAL3
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.material3.setMaterialContent
+import androidx.compose.testutils.assertAgainstGolden
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.unit.Dp
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.screenshot.AndroidXScreenshotTestRule
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@OptIn(ExperimentalMaterial3Api::class)
+@LargeTest
+@RunWith(Parameterized::class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+class PullRefreshIndicatorScreenshotTest(private val scheme: ColorSchemeWrapper) {
+    @get:Rule
+    val rule = createComposeRule()
+
+    @get:Rule
+    val screenshotRule = AndroidXScreenshotTestRule(GOLDEN_MATERIAL3)
+
+    private val testTag = "PullRefresh"
+    private val wrap = Modifier.wrapContentSize(Alignment.TopStart)
+
+    @Test
+    fun pullRefreshIndicator_refreshing() {
+        rule.mainClock.autoAdvance = false
+        rule.setMaterialContent(scheme.colorScheme) {
+            Box(wrap.testTag(testTag)) {
+                val density = LocalDensity.current
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.0f
+                        override val verticalOffset =
+                            with(density) { CircularIndicatorDiameter.toPx() }
+                        override val refreshing = true
+                    },
+                )
+            }
+        }
+        rule.mainClock.advanceTimeBy(500)
+        assertAgainstGolden("pullRefreshIndicator_${scheme.name}_refreshing")
+    }
+
+    @Test
+    fun pullRefreshIndicator_notRefreshing() {
+        rule.setMaterialContent(scheme.colorScheme) {
+            Box(wrap.testTag(testTag)) {
+                val density = LocalDensity.current
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 1f
+                        override val verticalOffset =
+                            with(density) { CircularIndicatorDiameter.toPx() }
+                        override val refreshing = false
+                    },
+                )
+            }
+        }
+        assertAgainstGolden("pullRefreshIndicator_${scheme.name}_progress")
+    }
+    private fun assertAgainstGolden(goldenName: String) {
+        rule.onNodeWithTag(testTag)
+            .captureToImage()
+            .assertAgainstGolden(screenshotRule, goldenName)
+    }
+
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun parameters() = arrayOf(
+            ColorSchemeWrapper("lightTheme", lightColorScheme()),
+            ColorSchemeWrapper("darkTheme", darkColorScheme()),
+        )
+    }
+
+    class ColorSchemeWrapper(val name: String, val colorScheme: ColorScheme) {
+        override fun toString(): String {
+            return name
+        }
+    }
+}
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTest.kt
new file mode 100644
index 0000000..da13b59
--- /dev/null
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTest.kt
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2023 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 androidx.compose.material3.pullrefresh
+
+import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.heightIn
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.pointer.PointerInputChange
+import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.layout.onSizeChanged
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onChild
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performClick
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+@OptIn(ExperimentalMaterial3Api::class)
+class PullRefreshIndicatorTest {
+
+    @get:Rule
+    val rule = createComposeRule()
+
+    @Test
+    fun indicatorDisplayed_refreshing() {
+        rule.setContent {
+            val density = LocalDensity.current
+            Box(Modifier.fillMaxSize()) {
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.5f
+                        override val verticalOffset = with(density) { 50.dp.toPx() }
+                        override val refreshing = true
+                    },
+                    modifier = Modifier.testTag(INDICATOR_TAG)
+                )
+            }
+        }
+        rule.onNodeWithTag(INDICATOR_TAG).assertIsDisplayed()
+    }
+
+    @Test
+    fun indicatorDisplayed_notRefreshing() {
+        rule.setContent {
+            val density = LocalDensity.current
+            Box(Modifier.fillMaxSize()) {
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.5f
+                        override val verticalOffset = with(density) { 50.dp.toPx() }
+                        override val refreshing = false
+                    },
+                    modifier = Modifier.testTag(INDICATOR_TAG)
+                )
+            }
+        }
+        rule.onNodeWithTag(INDICATOR_TAG).assertIsDisplayed()
+    }
+
+    @Test
+    fun indicatorRespects_changingOffset() {
+        val verticalOffsetDp = mutableStateOf(0.dp)
+        rule.setContent {
+            val density = LocalDensity.current
+            Box(Modifier.fillMaxSize()) {
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.5f
+                        override val verticalOffset =
+                            with(density) { verticalOffsetDp.value.toPx() }
+                        override val refreshing = false
+                    },
+                    modifier = Modifier.heightIn(min = 30.dp).testTag(INDICATOR_TAG)
+                )
+            }
+        }
+        rule
+            .onNodeWithTag(INDICATOR_TAG)
+            .onChild()
+            .assertTopPositionInRootIsEqualTo(verticalOffsetDp.value - 30.dp)
+
+        verticalOffsetDp.value = 100.dp
+        rule.waitForIdle()
+
+        rule
+            .onNodeWithTag(INDICATOR_TAG)
+            .onChild()
+            .assertTopPositionInRootIsEqualTo(verticalOffsetDp.value - 30.dp)
+    }
+
+    // Regression test for b/271777421
+    @Test
+    fun indicatorDoesNotCapturePointerEvents() {
+        var verticalOffset by mutableFloatStateOf(0f)
+        var indicatorSize: IntSize? = null
+        var downEvent: PointerInputChange? = null
+
+        rule.setContent {
+            Box {
+                Box(Modifier.fillMaxSize().pointerInput(Unit) {
+                    awaitEachGesture {
+                        downEvent = awaitFirstDown()
+                    }
+                })
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0f
+                        override val verticalOffset = verticalOffset
+                        override val refreshing = false
+                    },
+                    modifier = Modifier.onSizeChanged {
+                        // The indicator starts as offset by its negative height in the y direction,
+                        // so work out its height so we can place it inside its normal layout
+                        // bounds
+                        indicatorSize = it
+                    }.testTag(INDICATOR_TAG)
+                )
+            }
+        }
+
+        rule.runOnIdle {
+            // Pull by twice the indicator height (since pull delta is halved) - this will make the
+            // indicator fully visible in its layout bounds, so when we performClick() the indicator
+            // will be visibly inside those coordinates.
+            verticalOffset = indicatorSize!!.height.toFloat() * 2
+        }
+
+        rule.onNodeWithTag(INDICATOR_TAG).performClick()
+        rule.runOnIdle {
+            // The indicator should not have blocked its sibling (placed first, so below) from
+            // seeing touch events.
+            Truth.assertThat(downEvent).isNotNull()
+        }
+    }
+
+    private val INDICATOR_TAG = "pull-refresh-indicator"
+}
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt
index 8b9446b..d5ed1b0 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt
@@ -52,7 +52,10 @@
     locale: CalendarLocale,
     cache: MutableMap<String, Any>
 ): String {
-    val pattern = cache.getOrPut(key = skeleton + locale.toLanguageTag()) {
+    // Prepend the skeleton and language tag with a "S" to avoid cache collisions when the
+    // called already cached a string as value when the pattern equals to the skeleton it
+    // was created from.
+    val pattern = cache.getOrPut(key = "S:$skeleton${locale.toLanguageTag()}") {
         DateFormat.getBestDateTimePattern(locale, skeleton)
     }.toString()
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt
index 78d7752..915248b 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt
@@ -191,8 +191,10 @@
             locale: CalendarLocale,
             cache: MutableMap<String, Any>
         ): DateTimeFormatter {
-            val key = pattern + locale.toLanguageTag()
-            return cache.getOrPut(key) {
+            // Prepend the pattern and language tag with a "P" to avoid cache collisions when the
+            // called already cached a string as value when the pattern equals to the skeleton it
+            // was created from.
+            return cache.getOrPut(key = "P:$pattern${locale.toLanguageTag()}") {
                 DateTimeFormatter.ofPattern(pattern, locale)
                     .withDecimalStyle(DecimalStyle.of(locale))
             } as DateTimeFormatter
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
index 0a96b40..712b615 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
@@ -110,6 +110,8 @@
  * animates to [Hidden].
  * @param modifier Optional [Modifier] for the bottom sheet.
  * @param sheetState The state of the bottom sheet.
+ * @param sheetMaxWidth [Dp] that defines what the maximum width the sheet will take.
+ * Pass in [Dp.Unspecified] for a sheet that spans the entire screen width.
  * @param shape The shape of the bottom sheet.
  * @param containerColor The color used for the background of this bottom sheet
  * @param contentColor The preferred color for content inside this bottom sheet. Defaults to either
@@ -128,6 +130,7 @@
     onDismissRequest: () -> Unit,
     modifier: Modifier = Modifier,
     sheetState: SheetState = rememberModalBottomSheetState(),
+    sheetMaxWidth: Dp = BottomSheetDefaults.SheetMaxWidth,
     shape: Shape = BottomSheetDefaults.ExpandedShape,
     containerColor: Color = BottomSheetDefaults.ContainerColor,
     contentColor: Color = contentColorFor(containerColor),
@@ -178,7 +181,7 @@
             val bottomSheetPaneTitle = getString(string = Strings.BottomSheetPaneTitle)
             Surface(
                 modifier = modifier
-                    .widthIn(max = BottomSheetMaxWidth)
+                    .widthIn(max = sheetMaxWidth)
                     .fillMaxWidth()
                     .align(Alignment.TopCenter)
                     .semantics { paneTitle = bottomSheetPaneTitle }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
index fe98619..aeb70ce 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
@@ -71,6 +71,8 @@
  * @param modifier the [Modifier] to be applied to this scaffold
  * @param scaffoldState the state of the bottom sheet scaffold
  * @param sheetPeekHeight the height of the bottom sheet when it is collapsed
+ * @param sheetMaxWidth [Dp] that defines what the maximum width the sheet will take.
+ * Pass in [Dp.Unspecified] for a sheet that spans the entire screen width.
  * @param sheetShape the shape of the bottom sheet
  * @param sheetContainerColor the background color of the bottom sheet
  * @param sheetContentColor the preferred content color provided by the bottom sheet to its
@@ -101,6 +103,7 @@
     modifier: Modifier = Modifier,
     scaffoldState: BottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
     sheetPeekHeight: Dp = BottomSheetDefaults.SheetPeekHeight,
+    sheetMaxWidth: Dp = BottomSheetDefaults.SheetMaxWidth,
     sheetShape: Shape = BottomSheetDefaults.ExpandedShape,
     sheetContainerColor: Color = BottomSheetDefaults.ContainerColor,
     sheetContentColor: Color = contentColorFor(sheetContainerColor),
@@ -133,6 +136,7 @@
             StandardBottomSheet(
                 state = scaffoldState.bottomSheetState,
                 peekHeight = sheetPeekHeight,
+                sheetMaxWidth = sheetMaxWidth,
                 sheetSwipeEnabled = sheetSwipeEnabled,
                 calculateAnchors = { sheetSize ->
                     val sheetHeight = sheetSize.height
@@ -217,6 +221,7 @@
     @Suppress("PrimitiveInLambda")
     calculateAnchors: (sheetSize: IntSize) -> DraggableAnchors<SheetValue>,
     peekHeight: Dp,
+    sheetMaxWidth: Dp,
     sheetSwipeEnabled: Boolean,
     shape: Shape,
     containerColor: Color,
@@ -232,7 +237,7 @@
 
     Surface(
         modifier = Modifier
-            .widthIn(max = BottomSheetMaxWidth)
+            .widthIn(max = sheetMaxWidth)
             .fillMaxWidth()
             .requiredHeightIn(min = peekHeight)
             .nestedScroll(
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DatePicker.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DatePicker.kt
index f0f0451..23741d0 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DatePicker.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DatePicker.kt
@@ -336,6 +336,8 @@
 /**
  * Creates a [DatePickerState] for a [DatePicker] that is remembered across compositions.
  *
+ * To create a date picker state outside composition, see the `DatePickerState` function.
+ *
  * @param initialSelectedDateMillis timestamp in _UTC_ milliseconds from the epoch that represents
  * an initial selection of a date. Provide a `null` to indicate no selection.
  * @param initialDisplayedMonthMillis timestamp in _UTC_ milliseconds from the epoch that represents
@@ -355,7 +357,7 @@
     @Suppress("AutoBoxing") initialDisplayedMonthMillis: Long? = initialSelectedDateMillis,
     yearRange: IntRange = DatePickerDefaults.YearRange,
     initialDisplayMode: DisplayMode = DisplayMode.Picker,
-    selectableDates: SelectableDates = object : SelectableDates {}
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
 ): DatePickerState {
     val locale = defaultLocale()
     return rememberSaveable(
@@ -373,6 +375,48 @@
 }
 
 /**
+ * Creates a [DatePickerState].
+ *
+ * Note that in most cases, you are advised to use the [rememberDatePickerState] when in a
+ * composition.
+ *
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
+ * @param initialSelectedDateMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a date. Provide a `null` to indicate no selection. Note
+ * that the state's
+ * [DatePickerState.selectedDateMillis] will provide a timestamp that represents the _start_ of the
+ * day, which may be different than the provided initialSelectedDateMillis.
+ * @param initialDisplayedMonthMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a month to be displayed to the user. In case `null` is
+ * provided, the displayed month would be the current one.
+ * @param yearRange an [IntRange] that holds the year range that the date picker will be limited
+ * to
+ * @param initialDisplayMode an initial [DisplayMode] that this state will hold
+ * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
+ * In case a date is not allowed to be selected, it will appear disabled in the UI.
+ * @see rememberDatePickerState
+ * @throws [IllegalArgumentException] if the initial selected date or displayed month represent
+ * a year that is out of the year range.
+ */
+@ExperimentalMaterial3Api
+fun DatePickerState(
+    locale: CalendarLocale,
+    @Suppress("AutoBoxing") initialSelectedDateMillis: Long? = null,
+    @Suppress("AutoBoxing") initialDisplayedMonthMillis: Long? = initialSelectedDateMillis,
+    yearRange: IntRange = DatePickerDefaults.YearRange,
+    initialDisplayMode: DisplayMode = DisplayMode.Picker,
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
+): DatePickerState = DatePickerStateImpl(
+    initialSelectedDateMillis = initialSelectedDateMillis,
+    initialDisplayedMonthMillis = initialDisplayedMonthMillis,
+    yearRange = yearRange,
+    initialDisplayMode = initialDisplayMode,
+    selectableDates = selectableDates,
+    locale = locale
+)
+
+/**
  * Contains default values used by the [DatePicker].
  */
 @ExperimentalMaterial3Api
@@ -623,6 +667,11 @@
     val shape: Shape @Composable get() = DatePickerModalTokens.ContainerShape.value
 
     /**
+     * A default [SelectableDates] that allows all dates to be selected.
+     */
+    val AllDates: SelectableDates = object : SelectableDates {}
+
+    /**
      * A date format skeleton used to format the date picker's year selection menu button (e.g.
      * "March 2021")
      */
@@ -947,7 +996,9 @@
  * to
  * @param initialDisplayMode an initial [DisplayMode] that this state will hold
  * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
- * In case a date is not allowed to be selected, it will appear disabled in the UI.
+ * In case a date is not allowed to be selected, it will appear disabled in the UI
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
  * @see rememberDatePickerState
  * @throws [IllegalArgumentException] if the initial selected date or displayed month represent
  * a year that is out of the year range.
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt
index 6d4650a..a423580 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt
@@ -232,6 +232,8 @@
 /**
  * Creates a [DateRangePickerState] for a [DateRangePicker] that is remembered across compositions.
  *
+ * To create a date range picker state outside composition, see the `DateRangePickerState` function.
+ *
  * @param initialSelectedStartDateMillis timestamp in _UTC_ milliseconds from the epoch that
  * represents an initial selection of a start date. Provide a `null` to indicate no selection.
  * @param initialSelectedEndDateMillis timestamp in _UTC_ milliseconds from the epoch that
@@ -256,7 +258,7 @@
         initialSelectedStartDateMillis,
     yearRange: IntRange = DatePickerDefaults.YearRange,
     initialDisplayMode: DisplayMode = DisplayMode.Picker,
-    selectableDates: SelectableDates = object : SelectableDates {}
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
 ): DateRangePickerState {
     val locale = defaultLocale()
     return rememberSaveable(
@@ -275,6 +277,53 @@
 }
 
 /**
+ * Creates a [DateRangePickerState].
+ *
+ * Note that in most cases, you are advised to use the [rememberDateRangePickerState] when in a
+ * composition.
+ *
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
+ * @param initialSelectedStartDateMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a start date. Provide a `null` to indicate no selection.
+ * @param initialSelectedEndDateMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of an end date. Provide a `null` to indicate no selection.
+ * @param initialDisplayedMonthMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a month to be displayed to the user. By default, in case
+ * an `initialSelectedStartDateMillis` is provided, the initial displayed month would be the
+ * month of the selected date. Otherwise, in case `null` is provided, the displayed month would
+ * be the current one.
+ * @param yearRange an [IntRange] that holds the year range that the date picker will be limited
+ * to
+ * @param initialDisplayMode an initial [DisplayMode] that this state will hold
+ * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
+ * In case a date is not allowed to be selected, it will appear disabled in the UI
+ * @see rememberDateRangePickerState
+ * @throws IllegalArgumentException if the initial timestamps do not fall within the year range
+ * this state is created with, or the end date precedes the start date, or when an end date is
+ * provided without a start date (e.g. the start date was null, while the end date was not).
+ */
+@ExperimentalMaterial3Api
+fun DateRangePickerState(
+    locale: CalendarLocale,
+    @Suppress("AutoBoxing") initialSelectedStartDateMillis: Long? = null,
+    @Suppress("AutoBoxing") initialSelectedEndDateMillis: Long? = null,
+    @Suppress("AutoBoxing") initialDisplayedMonthMillis: Long? =
+        initialSelectedStartDateMillis,
+    yearRange: IntRange = DatePickerDefaults.YearRange,
+    initialDisplayMode: DisplayMode = DisplayMode.Picker,
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
+): DateRangePickerState = DateRangePickerStateImpl(
+    initialSelectedStartDateMillis = initialSelectedStartDateMillis,
+    initialSelectedEndDateMillis = initialSelectedEndDateMillis,
+    initialDisplayedMonthMillis = initialDisplayedMonthMillis,
+    yearRange = yearRange,
+    initialDisplayMode = initialDisplayMode,
+    selectableDates = selectableDates,
+    locale = locale
+)
+
+/**
  * Contains default values used by the [DateRangePicker].
  */
 @ExperimentalMaterial3Api
@@ -451,8 +500,10 @@
  * to
  * @param initialDisplayMode an initial [DisplayMode] that this state will hold
  * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
- * In case a date is not allowed to be selected, it will appear disabled in the UI.
- * @see rememberDatePickerState
+ * In case a date is not allowed to be selected, it will appear disabled in the UI
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
+ * @see rememberDateRangePickerState
  * @throws IllegalArgumentException if the initial timestamps do not fall within the year range
  * this state is created with, or the end date precedes the start date, or when an end date is
  * provided without a start date (e.g. the start date was null, while the end date was not).
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt
index 7f18a7d..6dbbbf7 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt
@@ -135,7 +135,9 @@
     modifier: Modifier = Modifier,
     tint: Color = LocalContentColor.current
 ) {
-    val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    val colorFilter = remember(tint) {
+        if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    }
     val semantics =
         if (contentDescription != null) {
             Modifier.semantics {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
index 3f585fd..2108ea1 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
@@ -18,6 +18,7 @@
 
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.TweenSpec
+import androidx.compose.animation.core.animate
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.detectTapGestures
@@ -45,13 +46,17 @@
 import androidx.compose.material3.tokens.ScrimTokens
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.SideEffect
 import androidx.compose.runtime.Stable
 import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.runtime.saveable.Saver
 import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
@@ -68,6 +73,7 @@
 import androidx.compose.ui.semantics.paneTitle
 import androidx.compose.ui.semantics.role
 import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.LayoutDirection
@@ -99,16 +105,18 @@
  */
 @Suppress("NotCloseable")
 @Stable
+@OptIn(ExperimentalMaterial3Api::class)
 class DrawerState(
     initialValue: DrawerValue,
     confirmStateChange: (DrawerValue) -> Boolean = { true }
 ) {
 
-    @OptIn(ExperimentalMaterial3Api::class)
-    internal val swipeableState = SwipeableState(
+    internal val anchoredDraggableState = AnchoredDraggableState(
         initialValue = initialValue,
         animationSpec = AnimationSpec,
-        confirmStateChange = confirmStateChange
+        confirmValueChange = confirmStateChange,
+        positionalThreshold = { distance -> distance * DrawerPositionalThreshold },
+        velocityThreshold = { with(requireDensity()) { DrawerVelocityThreshold.toPx() } }
     )
 
     /**
@@ -130,19 +138,17 @@
      * currently in. If a swipe or an animation is in progress, this corresponds the state drawer
      * was in before the swipe or animation started.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     val currentValue: DrawerValue
         get() {
-            return swipeableState.currentValue
+            return anchoredDraggableState.currentValue
         }
 
     /**
      * Whether the state is currently animating.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     val isAnimationRunning: Boolean
         get() {
-            return swipeableState.isAnimationRunning
+            return anchoredDraggableState.isAnimationRunning
         }
 
     /**
@@ -152,7 +158,7 @@
      *
      * @return the reason the open animation ended
      */
-    suspend fun open() = animateTo(DrawerValue.Open, AnimationSpec)
+    suspend fun open() = animateTo(DrawerValue.Open)
 
     /**
      * Close the drawer with animation and suspend until it if fully closed or animation has been
@@ -161,7 +167,7 @@
      *
      * @return the reason the close animation ended
      */
-    suspend fun close() = animateTo(DrawerValue.Closed, AnimationSpec)
+    suspend fun close() = animateTo(DrawerValue.Closed)
 
     /**
      * Set the state of the drawer with specific animation
@@ -169,9 +175,12 @@
      * @param targetValue The new value to animate to.
      * @param anim The animation that will be used to animate to the new value.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
+    @Deprecated(
+        message = "This method has been replaced by the open and close methods. The animation " +
+            "spec is now an implementation detail of ModalDrawer.",
+    )
     suspend fun animateTo(targetValue: DrawerValue, anim: AnimationSpec<Float>) {
-        swipeableState.animateTo(targetValue, anim)
+        animateTo(targetValue = targetValue, animationSpec = anim)
     }
 
     /**
@@ -179,9 +188,8 @@
      *
      * @param targetValue The new target value
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     suspend fun snapTo(targetValue: DrawerValue) {
-        swipeableState.snapTo(targetValue)
+        anchoredDraggableState.snapTo(targetValue)
     }
 
     /**
@@ -191,16 +199,61 @@
      * swipe finishes. If an animation is running, this is the target value of that animation.
      * Finally, if no swipe or animation is in progress, this is the same as the [currentValue].
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     val targetValue: DrawerValue
-        get() = swipeableState.targetValue
+        get() = anchoredDraggableState.targetValue
 
     /**
-     * The current position (in pixels) of the drawer container.
+     * The current position (in pixels) of the drawer sheet, or Float.NaN before the offset is
+     * initialized.
+     *
+     * @see [AnchoredDraggableState.offset] for more information.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
-    val offset: State<Float>
-        get() = swipeableState.offset
+    @Deprecated(
+        message = "Please access the offset through currentOffset, which returns the value " +
+            "directly instead of wrapping it in a state object.",
+        replaceWith = ReplaceWith("currentOffset")
+    )
+    val offset: State<Float> = object : State<Float> {
+        override val value: Float get() = anchoredDraggableState.offset
+    }
+
+    /**
+     * The current position (in pixels) of the drawer sheet, or Float.NaN before the offset is
+     * initialized.
+     *
+     * @see [AnchoredDraggableState.offset] for more information.
+     */
+    val currentOffset: Float get() = anchoredDraggableState.offset
+
+    internal var density: Density? by mutableStateOf(null)
+
+    private fun requireDensity() = requireNotNull(density) {
+        "The density on BottomDrawerState ($this) was not set. Did you use BottomDrawer" +
+            " with the BottomDrawer composable?"
+    }
+
+    internal fun requireOffset(): Float = anchoredDraggableState.requireOffset()
+
+    private suspend fun animateTo(
+        targetValue: DrawerValue,
+        animationSpec: AnimationSpec<Float> = AnimationSpec,
+        velocity: Float = anchoredDraggableState.lastVelocity
+    ) {
+        anchoredDraggableState.anchoredDrag(targetValue = targetValue) { anchors, latestTarget ->
+            val targetOffset = anchors.positionOf(latestTarget)
+            if (!targetOffset.isNaN()) {
+                var prev = if (currentOffset.isNaN()) 0f else currentOffset
+                animate(prev, targetOffset, velocity, animationSpec) { value, velocity ->
+                    // Our onDrag coerces the value within the bounds, but an animation may
+                    // overshoot, for example a spring animation or an overshooting interpolator
+                    // We respect the user's intention and allow the overshoot, but still use
+                    // DraggableState's drag for its mutex.
+                    dragTo(value, velocity)
+                    prev = value
+                }
+            }
+        }
+    }
 
     companion object {
         /**
@@ -261,23 +314,29 @@
 ) {
     val scope = rememberCoroutineScope()
     val navigationMenu = getString(Strings.NavigationMenu)
-    val minValue = -with(LocalDensity.current) { NavigationDrawerTokens.ContainerWidth.toPx() }
+    val density = LocalDensity.current
+    val minValue = -with(density) { NavigationDrawerTokens.ContainerWidth.toPx() }
     val maxValue = 0f
 
-    val anchors = mapOf(minValue to DrawerValue.Closed, maxValue to DrawerValue.Open)
+    SideEffect {
+        drawerState.density = density
+        drawerState.anchoredDraggableState.updateAnchors(
+            DraggableAnchors {
+                DrawerValue.Closed at minValue
+                DrawerValue.Open at maxValue
+            }
+        )
+    }
+
     val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
     Box(
         modifier
             .fillMaxSize()
-            .swipeable(
-                state = drawerState.swipeableState,
-                anchors = anchors,
-                thresholds = { _, _ -> FractionalThreshold(0.5f) },
+            .anchoredDraggable(
+                state = drawerState.anchoredDraggableState,
                 orientation = Orientation.Horizontal,
                 enabled = gesturesEnabled,
-                reverseDirection = isRtl,
-                velocityThreshold = DrawerVelocityThreshold,
-                resistance = null
+                reverseDirection = isRtl
             )
     ) {
         Box {
@@ -288,26 +347,32 @@
             onClose = {
                 if (
                     gesturesEnabled &&
-                    drawerState.swipeableState.confirmStateChange(DrawerValue.Closed)
+                    drawerState.anchoredDraggableState.confirmValueChange(DrawerValue.Closed)
                 ) {
                     scope.launch { drawerState.close() }
                 }
             },
             fraction = {
-                calculateFraction(minValue, maxValue, drawerState.offset.value)
+                calculateFraction(minValue, maxValue, drawerState.requireOffset())
             },
             color = scrimColor
         )
         Box(
             Modifier
-                .offset { IntOffset(drawerState.offset.value.roundToInt(), 0) }
+                .offset {
+                    IntOffset(
+                        drawerState
+                            .requireOffset()
+                            .roundToInt(), 0
+                    )
+                }
                 .semantics {
                     paneTitle = navigationMenu
                     if (drawerState.isOpen) {
                         dismiss {
-                            if (
-                                drawerState.swipeableState
-                                    .confirmStateChange(DrawerValue.Closed)
+                            if (drawerState.anchoredDraggableState.confirmValueChange(
+                                    DrawerValue.Closed
+                                )
                             ) {
                                 scope.launch { drawerState.close() }
                             }; true
@@ -349,36 +414,43 @@
     gesturesEnabled: Boolean = true,
     content: @Composable () -> Unit
 ) {
+    val density = LocalDensity.current
     val drawerWidth = NavigationDrawerTokens.ContainerWidth
-    val drawerWidthPx = with(LocalDensity.current) { drawerWidth.toPx() }
+    val drawerWidthPx = with(density) { drawerWidth.toPx() }
     val minValue = -drawerWidthPx
     val maxValue = 0f
 
+    SideEffect {
+        drawerState.density = density
+        drawerState.anchoredDraggableState.updateAnchors(
+            DraggableAnchors {
+                DrawerValue.Closed at minValue
+                DrawerValue.Open at maxValue
+            }
+        )
+    }
+
     val scope = rememberCoroutineScope()
     val navigationMenu = getString(Strings.NavigationMenu)
 
-    val anchors = mapOf(minValue to DrawerValue.Closed, maxValue to DrawerValue.Open)
     val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
     Box(
-        modifier.swipeable(
-            state = drawerState.swipeableState,
-            anchors = anchors,
-            thresholds = { _, _ -> FractionalThreshold(0.5f) },
-            orientation = Orientation.Horizontal,
-            enabled = gesturesEnabled,
-            reverseDirection = isRtl,
-            velocityThreshold = DrawerVelocityThreshold,
-            resistance = null
-        )
+        modifier
+            .anchoredDraggable(
+                state = drawerState.anchoredDraggableState,
+                orientation = Orientation.Horizontal,
+                enabled = gesturesEnabled,
+                reverseDirection = isRtl
+            )
     ) {
         Layout(content = {
             Box(Modifier.semantics {
                 paneTitle = navigationMenu
                 if (drawerState.isOpen) {
                     dismiss {
-                        if (
-                            drawerState.swipeableState
-                                .confirmStateChange(DrawerValue.Closed)
+                        if (drawerState.anchoredDraggableState.confirmValueChange(
+                                DrawerValue.Closed
+                            )
                         ) {
                             scope.launch { drawerState.close() }
                         }; true
@@ -395,10 +467,10 @@
             val contentPlaceable = measurables[1].measure(constraints)
             layout(contentPlaceable.width, contentPlaceable.height) {
                 contentPlaceable.placeRelative(
-                    sheetPlaceable.width + drawerState.offset.value.roundToInt(),
+                    sheetPlaceable.width + drawerState.requireOffset().roundToInt(),
                     0
                 )
-                sheetPlaceable.placeRelative(drawerState.offset.value.roundToInt(), 0)
+                sheetPlaceable.placeRelative(drawerState.requireOffset().roundToInt(), 0)
             }
         }
     }
@@ -662,7 +734,8 @@
     Surface(
         selected = selected,
         onClick = onClick,
-        modifier = modifier.semantics { role = Role.Tab }
+        modifier = modifier
+            .semantics { role = Role.Tab }
             .height(NavigationDrawerTokens.ActiveIndicatorHeight)
             .fillMaxWidth(),
         shape = shape,
@@ -818,9 +891,7 @@
         if (selectedContainerColor != other.selectedContainerColor) return false
         if (unselectedContainerColor != other.unselectedContainerColor) return false
         if (selectedBadgeColor != other.selectedBadgeColor) return false
-        if (unselectedBadgeColor != other.unselectedBadgeColor) return false
-
-        return true
+        return unselectedBadgeColor == other.unselectedBadgeColor
     }
 
     override fun hashCode(): Int {
@@ -867,6 +938,7 @@
     }
 }
 
+private val DrawerPositionalThreshold = 0.5f
 private val DrawerVelocityThreshold = 400.dp
 private val MinimumDrawerWidth = 240.dp
 
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
index 53d48be..3adb86b 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
@@ -372,6 +372,11 @@
     val SheetPeekHeight = 56.dp
 
     /**
+     * The default max width used by [ModalBottomSheet] and [BottomSheetScaffold]
+     */
+    val SheetMaxWidth = 640.dp
+
+    /**
      * Default insets to be used and consumed by the [ModalBottomSheet] window.
      */
     val windowInsets: WindowInsets
@@ -495,4 +500,3 @@
 }
 
 private val DragHandleVerticalPadding = 22.dp
-internal val BottomSheetMaxWidth = 640.dp
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt
deleted file mode 100644
index 73e1b1e..0000000
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt
+++ /dev/null
@@ -1,888 +0,0 @@
-/*
- * Copyright 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 androidx.compose.material3
-
-import androidx.annotation.FloatRange
-import androidx.compose.animation.core.Animatable
-import androidx.compose.animation.core.AnimationSpec
-import androidx.compose.animation.core.SpringSpec
-import androidx.compose.foundation.gestures.DraggableState
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.gestures.draggable
-import androidx.compose.foundation.interaction.MutableInteractionSource
-import androidx.compose.material3.SwipeableDefaults.AnimationSpec
-import androidx.compose.material3.SwipeableDefaults.StandardResistanceFactor
-import androidx.compose.material3.SwipeableDefaults.VelocityThreshold
-import androidx.compose.material3.SwipeableDefaults.resistanceConfig
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
-import androidx.compose.runtime.FloatState
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.Stable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.saveable.Saver
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
-import androidx.compose.runtime.snapshotFlow
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.composed
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
-import androidx.compose.ui.input.nestedscroll.NestedScrollSource
-import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.platform.debugInspectorInfo
-import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.Velocity
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.util.fastMaxBy
-import androidx.compose.ui.util.fastMinByOrNull
-import androidx.compose.ui.util.lerp
-import kotlin.math.PI
-import kotlin.math.abs
-import kotlin.math.sign
-import kotlin.math.sin
-import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.filter
-import kotlinx.coroutines.flow.take
-import kotlinx.coroutines.launch
-
-/**
- * State of the [swipeable] modifier.
- *
- * This contains necessary information about any ongoing swipe or animation and provides methods
- * to change the state either immediately or by starting an animation. To create and remember a
- * [SwipeableState] with the default animation clock, use [rememberSwipeableState].
- *
- * @param initialValue The initial value of the state.
- * @param animationSpec The default animation that will be used to animate to a new state.
- * @param confirmStateChange Optional callback invoked to confirm or veto a pending state change.
- */
-@Stable
-@ExperimentalMaterial3Api
-internal open class SwipeableState<T>(
-    initialValue: T,
-    internal val animationSpec: AnimationSpec<Float> = AnimationSpec,
-    internal val confirmStateChange: (newValue: T) -> Boolean = { true }
-) {
-    /**
-     * The current value of the state.
-     *
-     * If no swipe or animation is in progress, this corresponds to the anchor at which the
-     * [swipeable] is currently settled. If a swipe or animation is in progress, this corresponds
-     * the last anchor at which the [swipeable] was settled before the swipe or animation started.
-     */
-    var currentValue: T by mutableStateOf(initialValue)
-        private set
-
-    /**
-     * Whether the state is currently animating.
-     */
-    var isAnimationRunning: Boolean by mutableStateOf(false)
-        private set
-
-    /**
-     * The current position (in pixels) of the [swipeable].
-     *
-     * You should use this state to offset your content accordingly. The recommended way is to
-     * use `Modifier.offsetPx`. This includes the resistance by default, if resistance is enabled.
-     */
-    val offset: FloatState get() = offsetState
-
-    /**
-     * The amount by which the [swipeable] has been swiped past its bounds.
-     */
-    val overflow: FloatState get() = overflowState
-
-    // Use `Float.NaN` as a placeholder while the state is uninitialised.
-    private val offsetState = mutableFloatStateOf(0f)
-    private val overflowState = mutableFloatStateOf(0f)
-
-    // the source of truth for the "real"(non ui) position
-    // basically position in bounds + overflow
-    private val absoluteOffset = mutableFloatStateOf(0f)
-
-    // current animation target, if animating, otherwise null
-    private val animationTarget = mutableStateOf<Float?>(null)
-
-    internal var anchors by mutableStateOf(emptyMap<Float, T>())
-
-    private val latestNonEmptyAnchorsFlow: Flow<Map<Float, T>> =
-        snapshotFlow { anchors }
-            .filter { it.isNotEmpty() }
-            .take(1)
-
-    internal var minBound = Float.NEGATIVE_INFINITY
-    internal var maxBound = Float.POSITIVE_INFINITY
-
-    internal fun ensureInit(newAnchors: Map<Float, T>) {
-        if (anchors.isEmpty()) {
-            // need to do initial synchronization synchronously :(
-            val initialOffset = newAnchors.getOffset(currentValue)
-            requireNotNull(initialOffset) {
-                "The initial value must have an associated anchor."
-            }
-            offsetState.floatValue = initialOffset
-            absoluteOffset.floatValue = initialOffset
-        }
-    }
-
-    internal suspend fun processNewAnchors(
-        oldAnchors: Map<Float, T>,
-        newAnchors: Map<Float, T>
-    ) {
-        if (oldAnchors.isEmpty()) {
-            // If this is the first time that we receive anchors, then we need to initialise
-            // the state so we snap to the offset associated to the initial value.
-            minBound = newAnchors.keys.minOrNull()!!
-            maxBound = newAnchors.keys.maxOrNull()!!
-            val initialOffset = newAnchors.getOffset(currentValue)
-            requireNotNull(initialOffset) {
-                "The initial value must have an associated anchor."
-            }
-            snapInternalToOffset(initialOffset)
-        } else if (newAnchors != oldAnchors) {
-            // If we have received new anchors, then the offset of the current value might
-            // have changed, so we need to animate to the new offset. If the current value
-            // has been removed from the anchors then we animate to the closest anchor
-            // instead. Note that this stops any ongoing animation.
-            minBound = Float.NEGATIVE_INFINITY
-            maxBound = Float.POSITIVE_INFINITY
-            val animationTargetValue = animationTarget.value
-            // if we're in the animation already, let's find it a new home
-            val targetOffset = if (animationTargetValue != null) {
-                // first, try to map old state to the new state
-                val oldState = oldAnchors[animationTargetValue]
-                val newState = newAnchors.getOffset(oldState)
-                // return new state if exists, or find the closes one among new anchors
-                newState ?: newAnchors.keys.minByOrNull { abs(it - animationTargetValue) }!!
-            } else {
-                // we're not animating, proceed by finding the new anchors for an old value
-                val actualOldValue = oldAnchors[offset.floatValue]
-                val value = if (actualOldValue == currentValue) currentValue else actualOldValue
-                newAnchors.getOffset(value) ?: newAnchors
-                    .keys.minByOrNull { abs(it - offset.floatValue) }!!
-            }
-            try {
-                animateInternalToOffset(targetOffset, animationSpec)
-            } catch (c: CancellationException) {
-                // If the animation was interrupted for any reason, snap as a last resort.
-                snapInternalToOffset(targetOffset)
-            } finally {
-                currentValue = newAnchors.getValue(targetOffset)
-                minBound = newAnchors.keys.minOrNull()!!
-                maxBound = newAnchors.keys.maxOrNull()!!
-            }
-        }
-    }
-
-    internal var thresholds: (Float, Float) -> Float by mutableStateOf({ _, _ -> 0f })
-
-    internal var velocityThreshold by mutableFloatStateOf(0f)
-
-    internal var resistance: ResistanceConfig? by mutableStateOf(null)
-
-    internal val draggableState = DraggableState {
-        val newAbsolute = absoluteOffset.floatValue + it
-        val clamped = newAbsolute.coerceIn(minBound, maxBound)
-        val overflow = newAbsolute - clamped
-        val resistanceDelta = resistance?.computeResistance(overflow) ?: 0f
-        offsetState.floatValue = clamped + resistanceDelta
-        overflowState.floatValue = overflow
-        absoluteOffset.floatValue = newAbsolute
-    }
-
-    private suspend fun snapInternalToOffset(target: Float) {
-        draggableState.drag {
-            dragBy(target - absoluteOffset.floatValue)
-        }
-    }
-
-    private suspend fun animateInternalToOffset(target: Float, spec: AnimationSpec<Float>) {
-        draggableState.drag {
-            var prevValue = absoluteOffset.floatValue
-            animationTarget.value = target
-            isAnimationRunning = true
-            try {
-                Animatable(prevValue).animateTo(target, spec) {
-                    dragBy(this.value - prevValue)
-                    prevValue = this.value
-                }
-            } finally {
-                animationTarget.value = null
-                isAnimationRunning = false
-            }
-        }
-    }
-
-    /**
-     * The target value of the state.
-     *
-     * If a swipe is in progress, this is the value that the [swipeable] would animate to if the
-     * swipe finished. If an animation is running, this is the target value of that animation.
-     * Finally, if no swipe or animation is in progress, this is the same as the [currentValue].
-     */
-    @ExperimentalMaterial3Api
-    internal val targetValue: T
-        get() {
-            // TODO(calintat): Track current velocity (b/149549482) and use that here.
-            val target = animationTarget.value ?: computeTarget(
-                offset = offset.floatValue,
-                lastValue = anchors.getOffset(currentValue) ?: offset.floatValue,
-                anchors = anchors.keys,
-                thresholds = thresholds,
-                velocity = 0f,
-                velocityThreshold = Float.POSITIVE_INFINITY
-            )
-            return anchors[target] ?: currentValue
-        }
-
-    /**
-     * Information about the ongoing swipe or animation, if any. See [SwipeProgress] for details.
-     *
-     * If no swipe or animation is in progress, this returns `SwipeProgress(value, value, 1f)`.
-     */
-    @ExperimentalMaterial3Api
-    internal val progress: SwipeProgress<T>
-        get() {
-            val bounds = findBounds(offset.floatValue, anchors.keys)
-            val from: T
-            val to: T
-            val fraction: Float
-            when (bounds.size) {
-                0 -> {
-                    from = currentValue
-                    to = currentValue
-                    fraction = 1f
-                }
-                1 -> {
-                    from = anchors.getValue(bounds[0])
-                    to = anchors.getValue(bounds[0])
-                    fraction = 1f
-                }
-                else -> {
-                    val (a, b) =
-                        if (direction > 0f) {
-                            bounds[0] to bounds[1]
-                        } else {
-                            bounds[1] to bounds[0]
-                        }
-                    from = anchors.getValue(a)
-                    to = anchors.getValue(b)
-                    fraction = (offset.floatValue - a) / (b - a)
-                }
-            }
-            return SwipeProgress(from, to, fraction)
-        }
-
-    /**
-     * The direction in which the [swipeable] is moving, relative to the current [currentValue].
-     *
-     * This will be either 1f if it is is moving from left to right or top to bottom, -1f if it is
-     * moving from right to left or bottom to top, or 0f if no swipe or animation is in progress.
-     */
-    @ExperimentalMaterial3Api
-    internal val direction: Float
-        get() = anchors.getOffset(currentValue)?.let { sign(offset.floatValue - it) } ?: 0f
-
-    /**
-     * Set the state without any animation and suspend until it's set
-     *
-     * @param targetValue The new target value to set [currentValue] to.
-     */
-    @ExperimentalMaterial3Api
-    internal suspend fun snapTo(targetValue: T) {
-        latestNonEmptyAnchorsFlow.collect { anchors ->
-            val targetOffset = anchors.getOffset(targetValue)
-            requireNotNull(targetOffset) {
-                "The target value must have an associated anchor."
-            }
-            snapInternalToOffset(targetOffset)
-            currentValue = targetValue
-        }
-    }
-
-    /**
-     * Set the state to the target value by starting an animation.
-     *
-     * @param targetValue The new value to animate to.
-     * @param anim The animation that will be used to animate to the new value.
-     */
-    @ExperimentalMaterial3Api
-    internal suspend fun animateTo(targetValue: T, anim: AnimationSpec<Float> = animationSpec) {
-        latestNonEmptyAnchorsFlow.collect { anchors ->
-            try {
-                val targetOffset = anchors.getOffset(targetValue)
-                requireNotNull(targetOffset) {
-                    "The target value must have an associated anchor."
-                }
-                animateInternalToOffset(targetOffset, anim)
-            } finally {
-                val endOffset = absoluteOffset.floatValue
-                val endValue = anchors
-                    // fighting rounding error once again, anchor should be as close as 0.5 pixels
-                    .filterKeys { anchorOffset -> abs(anchorOffset - endOffset) < 0.5f }
-                    .values.firstOrNull() ?: currentValue
-                currentValue = endValue
-            }
-        }
-    }
-
-    /**
-     * Perform fling with settling to one of the anchors which is determined by the given
-     * [velocity]. Fling with settling [swipeable] will always consume all the velocity provided
-     * since it will settle at the anchor.
-     *
-     * In general cases, [swipeable] flings by itself when being swiped. This method is to be
-     * used for nested scroll logic that wraps the [swipeable]. In nested scroll developer may
-     * want to trigger settling fling when the child scroll container reaches the bound.
-     *
-     * @param velocity velocity to fling and settle with
-     *
-     * @return the reason fling ended
-     */
-    internal suspend fun performFling(velocity: Float) {
-        latestNonEmptyAnchorsFlow.collect { anchors ->
-            val lastAnchor = anchors.getOffset(currentValue)!!
-            val targetValue = computeTarget(
-                offset = offset.floatValue,
-                lastValue = lastAnchor,
-                anchors = anchors.keys,
-                thresholds = thresholds,
-                velocity = velocity,
-                velocityThreshold = velocityThreshold
-            )
-            val targetState = anchors[targetValue]
-            if (targetState != null && confirmStateChange(targetState)) animateTo(targetState)
-            // If the user vetoed the state change, rollback to the previous state.
-            else animateInternalToOffset(lastAnchor, animationSpec)
-        }
-    }
-
-    /**
-     * Force [swipeable] to consume drag delta provided from outside of the regular [swipeable]
-     * gesture flow.
-     *
-     * Note: This method performs generic drag and it won't settle to any particular anchor, *
-     * leaving swipeable in between anchors. When done dragging, [performFling] must be
-     * called as well to ensure swipeable will settle at the anchor.
-     *
-     * In general cases, [swipeable] drags by itself when being swiped. This method is to be
-     * used for nested scroll logic that wraps the [swipeable]. In nested scroll developer may
-     * want to force drag when the child scroll container reaches the bound.
-     *
-     * @param delta delta in pixels to drag by
-     *
-     * @return the amount of [delta] consumed
-     */
-    internal fun performDrag(delta: Float): Float {
-        val potentiallyConsumed = absoluteOffset.floatValue + delta
-        val clamped = potentiallyConsumed.coerceIn(minBound, maxBound)
-        val deltaToConsume = clamped - absoluteOffset.floatValue
-        if (abs(deltaToConsume) > 0) {
-            draggableState.dispatchRawDelta(deltaToConsume)
-        }
-        return deltaToConsume
-    }
-
-    companion object {
-        /**
-         * The default [Saver] implementation for [SwipeableState].
-         */
-        fun <T : Any> Saver(
-            animationSpec: AnimationSpec<Float>,
-            confirmStateChange: (T) -> Boolean
-        ) = Saver<SwipeableState<T>, T>(
-            save = { it.currentValue },
-            restore = { SwipeableState(it, animationSpec, confirmStateChange) }
-        )
-    }
-}
-
-/**
- * Collects information about the ongoing swipe or animation in [swipeable].
- *
- * To access this information, use [SwipeableState.progress].
- *
- * @param from The state corresponding to the anchor we are moving away from.
- * @param to The state corresponding to the anchor we are moving towards.
- * @param fraction The fraction that the current position represents between [from] and [to].
- * Must be between `0` and `1`.
- */
-@Immutable
-@ExperimentalMaterial3Api
-internal class SwipeProgress<T>(
-    val from: T,
-    val to: T,
-    @FloatRange(from = 0.0, to = 1.0)
-    val fraction: Float
-) {
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is SwipeProgress<*>) return false
-
-        if (from != other.from) return false
-        if (to != other.to) return false
-        if (fraction != other.fraction) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = from?.hashCode() ?: 0
-        result = 31 * result + (to?.hashCode() ?: 0)
-        result = 31 * result + fraction.hashCode()
-        return result
-    }
-
-    override fun toString(): String {
-        return "SwipeProgress(from=$from, to=$to, fraction=$fraction)"
-    }
-}
-
-/**
- * Create and [remember] a [SwipeableState] with the default animation clock.
- *
- * @param initialValue The initial value of the state.
- * @param animationSpec The default animation that will be used to animate to a new state.
- * @param confirmStateChange Optional callback invoked to confirm or veto a pending state change.
- */
-@Composable
-@ExperimentalMaterial3Api
-internal fun <T : Any> rememberSwipeableState(
-    initialValue: T,
-    animationSpec: AnimationSpec<Float> = AnimationSpec,
-    confirmStateChange: (newValue: T) -> Boolean = { true }
-): SwipeableState<T> {
-    return rememberSaveable(
-        saver = SwipeableState.Saver(
-            animationSpec = animationSpec,
-            confirmStateChange = confirmStateChange
-        )
-    ) {
-        SwipeableState(
-            initialValue = initialValue,
-            animationSpec = animationSpec,
-            confirmStateChange = confirmStateChange
-        )
-    }
-}
-
-/**
- * Create and [remember] a [SwipeableState] which is kept in sync with another state, i.e.:
- *  1. Whenever the [value] changes, the [SwipeableState] will be animated to that new value.
- *  2. Whenever the value of the [SwipeableState] changes (e.g. after a swipe), the owner of the
- *  [value] will be notified to update their state to the new value of the [SwipeableState] by
- *  invoking [onValueChange]. If the owner does not update their state to the provided value for
- *  some reason, then the [SwipeableState] will perform a rollback to the previous, correct value.
- */
-@Composable
-@ExperimentalMaterial3Api
-internal fun <T : Any> rememberSwipeableStateFor(
-    value: T,
-    onValueChange: (T) -> Unit,
-    animationSpec: AnimationSpec<Float> = AnimationSpec
-): SwipeableState<T> {
-    val swipeableState = remember {
-        SwipeableState(
-            initialValue = value,
-            animationSpec = animationSpec,
-            confirmStateChange = { true }
-        )
-    }
-    val forceAnimationCheck = remember { mutableStateOf(false) }
-    LaunchedEffect(value, forceAnimationCheck.value) {
-        if (value != swipeableState.currentValue) {
-            swipeableState.animateTo(value)
-        }
-    }
-    DisposableEffect(swipeableState.currentValue) {
-        if (value != swipeableState.currentValue) {
-            onValueChange(swipeableState.currentValue)
-            forceAnimationCheck.value = !forceAnimationCheck.value
-        }
-        onDispose { }
-    }
-    return swipeableState
-}
-
-/**
- * Enable swipe gestures between a set of predefined states.
- *
- * To use this, you must provide a map of anchors (in pixels) to states (of type [T]).
- * Note that this map cannot be empty and cannot have two anchors mapped to the same state.
- *
- * When a swipe is detected, the offset of the [SwipeableState] will be updated with the swipe
- * delta. You should use this offset to move your content accordingly (see `Modifier.offsetPx`).
- * When the swipe ends, the offset will be animated to one of the anchors and when that anchor is
- * reached, the value of the [SwipeableState] will also be updated to the state corresponding to
- * the new anchor. The target anchor is calculated based on the provided positional [thresholds].
- *
- * Swiping is constrained between the minimum and maximum anchors. If the user attempts to swipe
- * past these bounds, a resistance effect will bfe applied by default. The amount of resistance at
- * each edge is specified by the [resistance] config. To disable all resistance, set it to `null`.
- *
- * @param T The type of the state.
- * @param state The state of the [swipeable].
- * @param anchors Pairs of anchors and states, used to map anchors to states and vice versa.
- * @param thresholds Specifies where the thresholds between the states are. The thresholds will be
- * used to determine which state to animate to when swiping stops. This is represented as a lambda
- * that takes two states and returns the threshold between them in the form of a [ThresholdConfig].
- * Note that the order of the states corresponds to the swipe direction.
- * @param orientation The orientation in which the [swipeable] can be swiped.
- * @param enabled Whether this [swipeable] is enabled and should react to the user's input.
- * @param reverseDirection Whether to reverse the direction of the swipe, so a top to bottom
- * swipe will behave like bottom to top, and a left to right swipe will behave like right to left.
- * @param interactionSource Optional [MutableInteractionSource] that will passed on to
- * the internal [Modifier.draggable].
- * @param resistance Controls how much resistance will be applied when swiping past the bounds.
- * @param velocityThreshold The threshold (in dp per second) that the end velocity has to exceed
- * in order to animate to the next state, even if the positional [thresholds] have not been reached.
- */
-@ExperimentalMaterial3Api
-internal fun <T> Modifier.swipeable(
-    state: SwipeableState<T>,
-    anchors: Map<Float, T>,
-    orientation: Orientation,
-    enabled: Boolean = true,
-    reverseDirection: Boolean = false,
-    interactionSource: MutableInteractionSource? = null,
-    thresholds: (from: T, to: T) -> ThresholdConfig = { _, _ -> FixedThreshold(56.dp) },
-    resistance: ResistanceConfig? = resistanceConfig(anchors.keys),
-    velocityThreshold: Dp = VelocityThreshold
-) = composed(
-    inspectorInfo = debugInspectorInfo {
-        name = "swipeable"
-        properties["state"] = state
-        properties["anchors"] = anchors
-        properties["orientation"] = orientation
-        properties["enabled"] = enabled
-        properties["reverseDirection"] = reverseDirection
-        properties["interactionSource"] = interactionSource
-        properties["thresholds"] = thresholds
-        properties["resistance"] = resistance
-        properties["velocityThreshold"] = velocityThreshold
-    }
-) {
-    require(anchors.isNotEmpty()) {
-        "You must have at least one anchor."
-    }
-    require(anchors.values.distinct().count() == anchors.size) {
-        "You cannot have two anchors mapped to the same state."
-    }
-    val density = LocalDensity.current
-    state.ensureInit(anchors)
-    LaunchedEffect(anchors, state) {
-        val oldAnchors = state.anchors
-        state.anchors = anchors
-        state.resistance = resistance
-        state.thresholds = { a, b ->
-            val from = anchors.getValue(a)
-            val to = anchors.getValue(b)
-            with(thresholds(from, to)) { density.computeThreshold(a, b) }
-        }
-        with(density) {
-            state.velocityThreshold = velocityThreshold.toPx()
-        }
-        state.processNewAnchors(oldAnchors, anchors)
-    }
-
-    Modifier.draggable(
-        orientation = orientation,
-        enabled = enabled,
-        reverseDirection = reverseDirection,
-        interactionSource = interactionSource,
-        startDragImmediately = state.isAnimationRunning,
-        onDragStopped = { velocity -> launch { state.performFling(velocity) } },
-        state = state.draggableState
-    )
-}
-
-/**
- * Interface to compute a threshold between two anchors/states in a [swipeable].
- *
- * To define a [ThresholdConfig], consider using [FixedThreshold] and [FractionalThreshold].
- */
-@Stable
-@ExperimentalMaterial3Api
-internal interface ThresholdConfig {
-    /**
-     * Compute the value of the threshold (in pixels), once the values of the anchors are known.
-     */
-    fun Density.computeThreshold(fromValue: Float, toValue: Float): Float
-}
-
-/**
- * A fixed threshold will be at an [offset] away from the first anchor.
- *
- * @param offset The offset (in dp) that the threshold will be at.
- */
-@Immutable
-@ExperimentalMaterial3Api
-internal data class FixedThreshold(private val offset: Dp) : ThresholdConfig {
-    override fun Density.computeThreshold(fromValue: Float, toValue: Float): Float {
-        return fromValue + offset.toPx() * sign(toValue - fromValue)
-    }
-}
-
-/**
- * A fractional threshold will be at a [fraction] of the way between the two anchors.
- *
- * @param fraction The fraction (between 0 and 1) that the threshold will be at.
- */
-@Immutable
-@ExperimentalMaterial3Api
-internal data class FractionalThreshold(
-    @FloatRange(from = 0.0, to = 1.0)
-    private val fraction: Float
-) : ThresholdConfig {
-    override fun Density.computeThreshold(fromValue: Float, toValue: Float): Float {
-        return lerp(fromValue, toValue, fraction)
-    }
-}
-
-/**
- * Specifies how resistance is calculated in [swipeable].
- *
- * There are two things needed to calculate resistance: the resistance basis determines how much
- * overflow will be consumed to achieve maximum resistance, and the resistance factor determines
- * the amount of resistance (the larger the resistance factor, the stronger the resistance).
- *
- * The resistance basis is usually either the size of the component which [swipeable] is applied
- * to, or the distance between the minimum and maximum anchors. For a constructor in which the
- * resistance basis defaults to the latter, consider using [resistanceConfig].
- *
- * You may specify different resistance factors for each bound. Consider using one of the default
- * resistance factors in [SwipeableDefaults]: `StandardResistanceFactor` to convey that the user
- * has run out of things to see, and `StiffResistanceFactor` to convey that the user cannot swipe
- * this right now. Also, you can set either factor to 0 to disable resistance at that bound.
- *
- * @param basis Specifies the maximum amount of overflow that will be consumed. Must be positive.
- * @param factorAtMin The factor by which to scale the resistance at the minimum bound.
- * Must not be negative.
- * @param factorAtMax The factor by which to scale the resistance at the maximum bound.
- * Must not be negative.
- */
-@Immutable
-internal class ResistanceConfig(
-    @FloatRange(from = 0.0, fromInclusive = false)
-    val basis: Float,
-    @FloatRange(from = 0.0)
-    val factorAtMin: Float = StandardResistanceFactor,
-    @FloatRange(from = 0.0)
-    val factorAtMax: Float = StandardResistanceFactor
-) {
-    fun computeResistance(overflow: Float): Float {
-        val factor = if (overflow < 0) factorAtMin else factorAtMax
-        if (factor == 0f) return 0f
-        val progress = (overflow / basis).coerceIn(-1f, 1f)
-        return basis / factor * sin(progress * PI.toFloat() / 2)
-    }
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is ResistanceConfig) return false
-
-        if (basis != other.basis) return false
-        if (factorAtMin != other.factorAtMin) return false
-        if (factorAtMax != other.factorAtMax) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = basis.hashCode()
-        result = 31 * result + factorAtMin.hashCode()
-        result = 31 * result + factorAtMax.hashCode()
-        return result
-    }
-
-    override fun toString(): String {
-        return "ResistanceConfig(basis=$basis, factorAtMin=$factorAtMin, factorAtMax=$factorAtMax)"
-    }
-}
-
-/**
- *  Given an offset x and a set of anchors, return a list of anchors:
- *   1. [ ] if the set of anchors is empty,
- *   2. [ x' ] if x is equal to one of the anchors, accounting for a small rounding error, where x'
- *      is x rounded to the exact value of the matching anchor,
- *   3. [ min ] if min is the minimum anchor and x < min,
- *   4. [ max ] if max is the maximum anchor and x > max, or
- *   5. [ a , b ] if a and b are anchors such that a < x < b and b - a is minimal.
- */
-private fun findBounds(
-    offset: Float,
-    anchors: Set<Float>
-): List<Float> {
-    // Find the anchors the target lies between with a little bit of rounding error.
-    val a = anchors.filter { it <= offset + 0.001 }.fastMaxBy { it }
-    val b = anchors.filter { it >= offset - 0.001 }.fastMinByOrNull { it }
-
-    return when {
-        a == null ->
-            // case 1 or 3
-            listOfNotNull(b)
-        b == null ->
-            // case 4
-            listOf(a)
-        a == b ->
-            // case 2
-            // Can't return offset itself here since it might not be exactly equal
-            // to the anchor, despite being considered an exact match.
-            listOf(a)
-        else ->
-            // case 5
-            listOf(a, b)
-    }
-}
-
-private fun computeTarget(
-    offset: Float,
-    lastValue: Float,
-    anchors: Set<Float>,
-    thresholds: (Float, Float) -> Float,
-    velocity: Float,
-    velocityThreshold: Float
-): Float {
-    val bounds = findBounds(offset, anchors)
-    return when (bounds.size) {
-        0 -> lastValue
-        1 -> bounds[0]
-        else -> {
-            val lower = bounds[0]
-            val upper = bounds[1]
-            if (lastValue <= offset) {
-                // Swiping from lower to upper (positive).
-                if (velocity >= velocityThreshold) {
-                    return upper
-                } else {
-                    val threshold = thresholds(lower, upper)
-                    if (offset < threshold) lower else upper
-                }
-            } else {
-                // Swiping from upper to lower (negative).
-                if (velocity <= -velocityThreshold) {
-                    return lower
-                } else {
-                    val threshold = thresholds(upper, lower)
-                    if (offset > threshold) upper else lower
-                }
-            }
-        }
-    }
-}
-
-private fun <T> Map<Float, T>.getOffset(state: T): Float? {
-    return entries.firstOrNull { it.value == state }?.key
-}
-
-/**
- * Contains useful defaults for [swipeable] and [SwipeableState].
- */
-internal object SwipeableDefaults {
-    /**
-     * The default animation used by [SwipeableState].
-     */
-    internal val AnimationSpec = SpringSpec<Float>()
-
-    /**
-     * The default velocity threshold (1.8 dp per millisecond) used by [swipeable].
-     */
-    internal val VelocityThreshold = 125.dp
-
-    /**
-     * A stiff resistance factor which indicates that swiping isn't available right now.
-     */
-    const val StiffResistanceFactor = 20f
-
-    /**
-     * A standard resistance factor which indicates that the user has run out of things to see.
-     */
-    const val StandardResistanceFactor = 10f
-
-    /**
-     * The default resistance config used by [swipeable].
-     *
-     * This returns `null` if there is one anchor. If there are at least two anchors, it returns
-     * a [ResistanceConfig] with the resistance basis equal to the distance between the two bounds.
-     */
-    internal fun resistanceConfig(
-        anchors: Set<Float>,
-        factorAtMin: Float = StandardResistanceFactor,
-        factorAtMax: Float = StandardResistanceFactor
-    ): ResistanceConfig? {
-        return if (anchors.size <= 1) {
-            null
-        } else {
-            val basis = anchors.maxOrNull()!! - anchors.minOrNull()!!
-            ResistanceConfig(basis, factorAtMin, factorAtMax)
-        }
-    }
-}
-
-// temp default nested scroll connection for swipeables which desire as an opt in
-// revisit in b/174756744 as all types will have their own specific connection probably
-@ExperimentalMaterial3Api
-internal val <T> SwipeableState<T>.PreUpPostDownNestedScrollConnection: NestedScrollConnection
-    get() = object : NestedScrollConnection {
-        override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
-            val delta = available.toFloat()
-            return if (delta < 0 && source == NestedScrollSource.Drag) {
-                performDrag(delta).toOffset()
-            } else {
-                Offset.Zero
-            }
-        }
-
-        override fun onPostScroll(
-            consumed: Offset,
-            available: Offset,
-            source: NestedScrollSource
-        ): Offset {
-            return if (source == NestedScrollSource.Drag) {
-                performDrag(available.toFloat()).toOffset()
-            } else {
-                Offset.Zero
-            }
-        }
-
-        override suspend fun onPreFling(available: Velocity): Velocity {
-            val toFling = Offset(available.x, available.y).toFloat()
-            return if (toFling < 0 && offset.floatValue > minBound) {
-                performFling(velocity = toFling)
-                // since we go to the anchor with tween settling, consume all for the best UX
-                available
-            } else {
-                Velocity.Zero
-            }
-        }
-
-        override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
-            performFling(velocity = Offset(available.x, available.y).toFloat())
-            return available
-        }
-
-        private fun Float.toOffset(): Offset = Offset(0f, this)
-
-        private fun Offset.toFloat(): Float = this.y
-    }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
index 861e5d4..ba78bb7e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
@@ -35,6 +35,7 @@
 import androidx.compose.foundation.selection.selectableGroup
 import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
 import androidx.compose.material3.tokens.PrimaryNavigationTabTokens
+import androidx.compose.material3.tokens.SecondaryNavigationTabTokens
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Immutable
 import androidx.compose.runtime.getValue
@@ -61,6 +62,150 @@
 import kotlinx.coroutines.launch
 
 /**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Fixed Primary tabs</a>
+ *
+ * Primary tabs are placed at the top of the content pane under a top app bar. They display the main
+ * content destinations. Fixed tabs display all tabs in a set simultaneously. They are best for
+ * switching between related content quickly, such as between transportation methods in a map. To
+ * navigate between fixed tabs, tap an individual tab, or swipe left or right in the content area.
+ *
+ * A TabRow contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A TabRow places its tabs evenly spaced along the entire row, with each tab
+ * taking up an equal amount of space. See [PrimaryScrollableTabRow] for a tab row that does not
+ * enforce equal size, and allows scrolling to tabs that do not fit on screen.
+ *
+ * A simple example with text tabs looks like:
+ *
+ * @sample androidx.compose.material3.samples.PrimaryTextTabs
+ *
+ * You can also provide your own custom tab, such as:
+ *
+ * @sample androidx.compose.material3.samples.FancyTabs
+ *
+ * Where the custom tab itself could look like:
+ *
+ * @sample androidx.compose.material3.samples.FancyTab
+ *
+ * As well as customizing the tab, you can also provide a custom [indicator], to customize
+ * the indicator displayed for a tab. [indicator] will be placed to fill the entire TabRow, so it
+ * should internally take care of sizing and positioning the indicator to match changes to
+ * [selectedTabIndex].
+ *
+ * For example, given an indicator that draws a rounded rectangle near the edges of the [Tab]:
+ *
+ * @sample androidx.compose.material3.samples.FancyIndicator
+ *
+ * We can reuse [TabRowDefaults.tabIndicatorOffset] and just provide this indicator,
+ * as we aren't changing how the size and position of the indicator changes between tabs:
+ *
+ * @sample androidx.compose.material3.samples.FancyIndicatorTabs
+ *
+ * You may also want to use a custom transition, to allow you to dynamically change the
+ * appearance of the indicator as it animates between tabs, such as changing its color or size.
+ * [indicator] is stacked on top of the entire TabRow, so you just need to provide a custom
+ * transition that animates the offset of the indicator from the start of the TabRow. For
+ * example, take the following example that uses a transition to animate the offset, width, and
+ * color of the same FancyIndicator from before, also adding a physics based 'spring' effect to
+ * the indicator in the direction of motion:
+ *
+ * @sample androidx.compose.material3.samples.FancyAnimatedIndicator
+ *
+ * We can now just pass this indicator directly to TabRow:
+ *
+ * @sample androidx.compose.material3.samples.FancyIndicatorContainerTabs
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.PrimaryIndicator], using a [TabRowDefaults.tabIndicatorOffset] modifier
+ * to animate its position.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun PrimaryTabRow(
+    selectedTabIndex: Int,
+    modifier: Modifier = Modifier,
+    containerColor: Color = TabRowDefaults.primaryContainerColor,
+    contentColor: Color = TabRowDefaults.primaryContentColor,
+    indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+        if (selectedTabIndex < tabPositions.size) {
+            val width by animateDpAsState(targetValue = tabPositions[selectedTabIndex].contentWidth)
+            TabRowDefaults.PrimaryIndicator(
+                Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]),
+                width = width
+            )
+        }
+    },
+    divider: @Composable () -> Unit = @Composable {
+        HorizontalDivider()
+    },
+    tabs: @Composable () -> Unit
+) {
+    TabRowImpl(modifier, containerColor, contentColor, indicator, divider, tabs)
+}
+
+/**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Fixed Secondary tabs</a>
+ *
+ * Secondary tabs are used within a content area to further separate related content and establish
+ * hierarchy. Fixed tabs display all tabs in a set simultaneously. To navigate between fixed tabs,
+ * tap an individual tab, or swipe left or right in the content area.
+ *
+ * A TabRow contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A Fixed TabRow places its tabs evenly spaced along the entire row, with each tab
+ * taking up an equal amount of space. See [SecondaryScrollableTabRow] for a tab row that does not
+ * enforce equal size, and allows scrolling to tabs that do not fit on screen.
+ *
+ * A simple example with text tabs looks like:
+ *
+ * @sample androidx.compose.material3.samples.SecondaryTextTabs
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset]
+ * modifier to animate its position. Note that this indicator will be forced to fill up the entire
+ * tab row, so you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual
+ * drawn indicator inside this space, and provide an offset from the start.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun SecondaryTabRow(
+    selectedTabIndex: Int,
+    modifier: Modifier = Modifier,
+    containerColor: Color = TabRowDefaults.secondaryContainerColor,
+    contentColor: Color = TabRowDefaults.secondaryContentColor,
+    indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+        if (selectedTabIndex < tabPositions.size) {
+            TabRowDefaults.SecondaryIndicator(
+                Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
+            )
+        }
+    },
+    divider: @Composable () -> Unit = @Composable {
+        HorizontalDivider()
+    },
+    tabs: @Composable () -> Unit
+) {
+    TabRowImpl(modifier, containerColor, contentColor, indicator, divider, tabs)
+}
+/**
  * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design tabs</a>
  *
  * Material Design fixed tabs.
@@ -122,21 +267,26 @@
  * matching content color for [containerColor], or to the current [LocalContentColor] if
  * [containerColor] is not a color from the theme.
  * @param indicator the indicator that represents which tab is currently selected. By default this
- * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset] modifier to
- * animate its position. Note that this indicator will be forced to fill up the entire tab row, so
- * you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual drawn
- * indicator inside this space, and provide an offset from the start.
+ * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset]
+ * modifier to animate its position. Note that this indicator will be forced to fill up the entire
+ * tab row, so you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual
+ * drawn indicator inside this space, and provide an offset from the start.
  * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
  * separation between the tab row and the content displayed underneath.
  * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
  * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
  */
+@Deprecated(
+    level = DeprecationLevel.WARNING,
+    message = "This TabRow implementation is misaligned with spec. Please use PrimaryTabRow for " +
+        "primary tabs and SecondaryTabRow for secondary tabs."
+)
 @Composable
 fun TabRow(
     selectedTabIndex: Int,
     modifier: Modifier = Modifier,
-    containerColor: Color = TabRowDefaults.containerColor,
-    contentColor: Color = TabRowDefaults.contentColor,
+    containerColor: Color = TabRowDefaults.primaryContainerColor,
+    contentColor: Color = TabRowDefaults.primaryContentColor,
     indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
         if (selectedTabIndex < tabPositions.size) {
             TabRowDefaults.SecondaryIndicator(
@@ -219,6 +369,140 @@
 }
 
 /**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Scrollable Primary tabs</a>
+ *
+ * Primary tabs are placed at the top of the content pane under a top app bar. They display the main
+ * content destinations. When a set of tabs cannot fit on screen, use scrollable tabs. Scrollable
+ * tabs can use longer text labels and a larger number of tabs. They are best used for browsing on
+ * touch interfaces.
+ *
+ * A scrollable tab row contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A scrollable tab row places its tabs offset from the starting edge, and allows
+ * scrolling to tabs that are placed off screen. For a fixed tab row that does not allow
+ * scrolling, and evenly places its tabs, see [PrimaryTabRow].
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param scrollState the [ScrollState] of this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param edgePadding the padding between the starting and ending edge of the scrollable tab row,
+ * and the tabs inside the row. This padding helps inform the user that this tab row can be
+ * scrolled, unlike a [TabRow].
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.PrimaryIndicator], using a [TabRowDefaults.tabIndicatorOffset] modifier
+ * to animate its position.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun PrimaryScrollableTabRow(
+    selectedTabIndex: Int,
+    modifier: Modifier = Modifier,
+    scrollState: ScrollState = rememberScrollState(),
+    containerColor: Color = TabRowDefaults.primaryContainerColor,
+    contentColor: Color = TabRowDefaults.primaryContentColor,
+    edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
+    indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+        if (selectedTabIndex < tabPositions.size) {
+            val width by animateDpAsState(targetValue = tabPositions[selectedTabIndex].contentWidth)
+            TabRowDefaults.PrimaryIndicator(
+                Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]),
+                width = width
+            )
+        }
+    },
+    divider: @Composable () -> Unit = @Composable {
+        HorizontalDivider()
+    },
+    tabs: @Composable () -> Unit
+) {
+    ScrollableTabRowImp(
+        selectedTabIndex = selectedTabIndex,
+        indicator = indicator,
+        modifier = modifier,
+        containerColor = containerColor,
+        contentColor = contentColor,
+        edgePadding = edgePadding,
+        divider = divider,
+        tabs = tabs,
+        scrollState = scrollState,
+    )
+}
+
+/**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Scrollable Secondary tabs</a>
+ *
+ * Material Design scrollable tabs.
+ *
+ * Secondary tabs are used within a content area to further separate related content and establish
+ * hierarchy. When a set of tabs cannot fit on screen, use scrollable tabs. Scrollable tabs can use
+ * longer text labels and a larger number of tabs. They are best used for browsing on touch
+ * interfaces.
+ *
+ * A scrollabel tab row contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A scrollable tab row places its tabs offset from the starting edge, and allows
+ * scrolling to tabs that are placed off screen. For a fixed tab row that does not allow
+ * scrolling, and evenly places its tabs, see [SecondaryTabRow].
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param scrollState the [ScrollState] of this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param edgePadding the padding between the starting and ending edge of the scrollable tab row,
+ * and the tabs inside the row. This padding helps inform the user that this tab row can be
+ * scrolled, unlike a [TabRow].
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset]
+ * modifier to animate its position. Note that this indicator will be forced to fill up the entire
+ * tab row, so you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual
+ * drawn indicator inside this space, and provide an offset from the start.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun SecondaryScrollableTabRow(
+    selectedTabIndex: Int,
+    modifier: Modifier = Modifier,
+    scrollState: ScrollState = rememberScrollState(),
+    containerColor: Color = TabRowDefaults.secondaryContainerColor,
+    contentColor: Color = TabRowDefaults.secondaryContentColor,
+    edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
+    indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+        TabRowDefaults.SecondaryIndicator(
+            Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
+        )
+    },
+    divider: @Composable () -> Unit = @Composable {
+        HorizontalDivider()
+    },
+    tabs: @Composable () -> Unit
+) {
+    ScrollableTabRowImp(
+        selectedTabIndex = selectedTabIndex,
+        indicator = indicator,
+        modifier = modifier,
+        containerColor = containerColor,
+        contentColor = contentColor,
+        edgePadding = edgePadding,
+        divider = divider,
+        tabs = tabs,
+        scrollState = scrollState
+    )
+}
+
+/**
  * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design tabs</a>
  *
  * Material Design scrollable tabs.
@@ -251,13 +535,18 @@
  * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
  * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
  */
+@Deprecated(
+    level = DeprecationLevel.WARNING,
+    message = "This ScrollableTabRow implementation is misaligned with spec. Please use " +
+        "PrimaryScrollableTabRow for primary tabs and SecondaryScrollableTabRow for secondary tabs."
+)
 @Composable
 fun ScrollableTabRow(
     selectedTabIndex: Int,
     modifier: Modifier = Modifier,
-    containerColor: Color = TabRowDefaults.containerColor,
-    contentColor: Color = TabRowDefaults.contentColor,
-    edgePadding: Dp = ScrollableTabRowPadding,
+    containerColor: Color = TabRowDefaults.primaryContainerColor,
+    contentColor: Color = TabRowDefaults.primaryContentColor,
+    edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
     indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
         TabRowDefaults.SecondaryIndicator(
             Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
@@ -268,12 +557,38 @@
     },
     tabs: @Composable () -> Unit
 ) {
+    ScrollableTabRowImp(
+        selectedTabIndex = selectedTabIndex,
+        indicator = indicator,
+        modifier = modifier,
+        containerColor = containerColor,
+        contentColor = contentColor,
+        edgePadding = edgePadding,
+        divider = divider,
+        tabs = tabs,
+        scrollState = rememberScrollState()
+    )
+}
+
+@Composable
+private fun ScrollableTabRowImp(
+    selectedTabIndex: Int,
+    indicator: @Composable (tabPositions: List<TabPosition>) -> Unit,
+    modifier: Modifier = Modifier,
+    containerColor: Color = TabRowDefaults.primaryContainerColor,
+    contentColor: Color = TabRowDefaults.primaryContentColor,
+    edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
+    divider: @Composable () -> Unit = @Composable {
+        HorizontalDivider()
+    },
+    tabs: @Composable () -> Unit,
+    scrollState: ScrollState,
+) {
     Surface(
         modifier = modifier,
         color = containerColor,
         contentColor = contentColor
     ) {
-        val scrollState = rememberScrollState()
         val coroutineScope = rememberCoroutineScope()
         val scrollableTabData = remember(scrollState, coroutineScope) {
             ScrollableTabData(
@@ -412,16 +727,49 @@
  * Contains default implementations and values used for TabRow.
  */
 object TabRowDefaults {
+    /**
+     * The default padding from the starting edge before a tab in a [ScrollableTabRow].
+     */
+    val ScrollableTabRowEdgeStartPadding = 52.dp
+
     /** Default container color of a tab row. */
+    @Deprecated(
+        message = "Use TabRowDefaults.primaryContainerColor instead",
+        replaceWith = ReplaceWith("primaryContainerColor")
+    )
     val containerColor: Color
         @Composable get() =
             PrimaryNavigationTabTokens.ContainerColor.value
 
+    /** Default container color of a [PrimaryTabRow]. */
+    val primaryContainerColor: Color
+        @Composable get() =
+            PrimaryNavigationTabTokens.ContainerColor.value
+
+    /** Default container color of a [SecondaryTabRow]. */
+    val secondaryContainerColor: Color
+        @Composable get() =
+            SecondaryNavigationTabTokens.ContainerColor.value
+
     /** Default content color of a tab row. */
+    @Deprecated(
+        message = "Use TabRowDefaults.primaryContentColor instead",
+        replaceWith = ReplaceWith("primaryContentColor")
+    )
     val contentColor: Color
         @Composable get() =
             PrimaryNavigationTabTokens.ActiveLabelTextColor.value
 
+    /** Default content color of a [PrimaryTabRow]. */
+    val primaryContentColor: Color
+        @Composable get() =
+            PrimaryNavigationTabTokens.ActiveLabelTextColor.value
+
+    /** Default content color of a [SecondaryTabRow]. */
+    val secondaryContentColor: Color
+        @Composable get() =
+            SecondaryNavigationTabTokens.ActiveLabelTextColor.value
+
     /**
      * Default indicator, which will be positioned at the bottom of the [TabRow], on top of the
      * divider.
@@ -488,8 +836,7 @@
     fun SecondaryIndicator(
         modifier: Modifier = Modifier,
         height: Dp = PrimaryNavigationTabTokens.ActiveIndicatorHeight,
-        color: Color =
-            MaterialTheme.colorScheme.fromToken(PrimaryNavigationTabTokens.ActiveIndicatorColor)
+        color: Color = PrimaryNavigationTabTokens.ActiveIndicatorColor.value
     ) {
         Box(
             modifier
@@ -596,11 +943,6 @@
 private val ScrollableTabRowMinimumTabWidth = 90.dp
 
 /**
- * The default padding from the starting edge before a tab in a [ScrollableTabRow].
- */
-private val ScrollableTabRowPadding = 52.dp
-
-/**
  * [AnimationSpec] used when scrolling to a tab that is not fully visible.
  */
 private val ScrollableTabRowScrollSpec: AnimationSpec<Float> = tween(
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/pullrefresh/PullRefresh.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/pullrefresh/PullRefresh.kt
new file mode 100644
index 0000000..1f60227
--- /dev/null
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/pullrefresh/PullRefresh.kt
@@ -0,0 +1,326 @@
+/*
+ * Copyright 2023 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 androidx.compose.material3.pullrefresh
+
+import androidx.annotation.FloatRange
+import androidx.compose.animation.Crossfade
+import androidx.compose.animation.core.LinearEasing
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.tween
+import androidx.compose.foundation.Canvas
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material3.CircularIndicatorDiameter
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.contentColorFor
+import androidx.compose.material3.pullrefresh.PullRefreshDefaults.Indicator
+import androidx.compose.material3.tokens.MotionTokens
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.shadow
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.center
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Path
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.graphics.drawscope.rotate
+import androidx.compose.ui.graphics.graphicsLayer
+import androidx.compose.ui.semantics.ProgressBarRangeInfo
+import androidx.compose.ui.semantics.progressBarRangeInfo
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import kotlin.math.abs
+import kotlin.math.max
+import kotlin.math.min
+import kotlin.math.pow
+
+// TODO: Provide samples once PullRefreshState implementation lands
+/**
+ * Material Design pull refresh indicator
+ *
+ * @param state the state of this [PullRefreshContainer]
+ * @param modifier the [Modifier] to be applied to this container
+ * @param indicator The indicator placed inside of the [PullRefreshContainer]. Has access to [state]
+ * @param shape the [Shape] of this container
+ * @param containerColor the color of this container
+ * @param contentColor the color of the progress indicator
+ */
+@Composable
+@ExperimentalMaterial3Api
+@Suppress("ComposableLambdaParameterPosition")
+internal fun PullRefreshContainer(
+    state: PullRefreshState,
+    modifier: Modifier = Modifier,
+    indicator: @Composable (PullRefreshState) -> Unit = { pullRefreshState ->
+        Indicator(state = pullRefreshState)
+    },
+    shape: Shape = PullRefreshDefaults.shape,
+    containerColor: Color = PullRefreshDefaults.containerColor,
+    contentColor: Color = contentColorFor(backgroundColor = containerColor),
+) {
+    // Surface is not used here, as we do not want its input-blocking behaviour, since the indicator
+    // is typically displayed above other (possibly) interactive indicator.
+    val showElevation = remember {
+        derivedStateOf { state.refreshing || state.verticalOffset > 0.5f }
+    }
+    CompositionLocalProvider(LocalContentColor provides contentColor) {
+        Box(
+            modifier = modifier
+                .size(CircularIndicatorDiameter)
+                .graphicsLayer {
+                    translationY = state.verticalOffset - size.height
+                }
+                .shadow(
+                    // Avoid shadow when indicator is hidden
+                    elevation = if (showElevation.value) Elevation else 0.dp,
+                    shape = shape,
+                    clip = true
+                )
+                .background(color = containerColor, shape = shape)
+        ) {
+            indicator(state)
+        }
+    }
+}
+
+/**
+ * Contains the default values for [PullRefreshContainer]
+ */
+@ExperimentalMaterial3Api
+internal object PullRefreshDefaults {
+
+    /** The default shape for [PullRefreshContainer] */
+    val shape: Shape = CircleShape
+
+    /** The default container color for [PullRefreshContainer] */
+    val containerColor: Color @Composable get() = MaterialTheme.colorScheme.surfaceContainerHigh
+
+    /**
+     * The default indicator for [PullRefreshContainer].
+     */
+    @Composable
+    fun Indicator(
+        state: PullRefreshState,
+        modifier: Modifier = Modifier,
+        color: Color = LocalContentColor.current,
+    ) {
+        Crossfade(
+            targetState = state.refreshing,
+            animationSpec = tween(durationMillis = CrossfadeDurationMs)
+        ) { refreshing ->
+            Box(
+                modifier = modifier.fillMaxSize(),
+                contentAlignment = Alignment.Center
+            ) {
+                if (refreshing) {
+                    CircularProgressIndicator(
+                        strokeWidth = StrokeWidth,
+                        color = color,
+                        modifier = Modifier.size(SpinnerSize),
+                    )
+                } else {
+                    CircularArrowProgressIndicator(
+                        progress = { state.progress },
+                        color = color,
+                        strokeWidth = StrokeWidth,
+                    )
+                }
+            }
+        }
+    }
+}
+
+/**
+ * The state that is associated with a [PullRefreshContainer].
+ * Each instance of [PullRefreshContainer] should have its own [PullRefreshState].
+ */
+@Stable
+@ExperimentalMaterial3Api
+internal interface PullRefreshState {
+    /** The threshold above which, if a release occurs, a refresh will be called */
+    val positionalThreshold: Dp
+
+    /**
+     * PullRefresh progress towards [positionalThreshold]. 0.0 indicates no progress, 1.0 indicates
+     * complete progress, > 1.0 indicates overshoot beyond the provided threshold
+     */
+    @get:FloatRange(from = 0.0)
+    val progress: Float
+
+    /**
+     * Indicates whether a refresh is occurring
+     */
+    val refreshing: Boolean
+
+    /**
+     * The vertical offset (in pixels) for the [PullRefreshContainer] to consume
+     */
+    @get:FloatRange(from = 0.0)
+    val verticalOffset: Float
+}
+
+/** The default pull indicator for [PullRefreshContainer] */
+@Composable
+@Suppress("PrimitiveInLambda")
+private fun CircularArrowProgressIndicator(
+    progress: () -> Float,
+    color: Color,
+    strokeWidth: Dp,
+    modifier: Modifier = Modifier,
+) {
+    val path = remember { Path().apply { fillType = PathFillType.EvenOdd } }
+    // TODO: Consider refactoring this sub-component utilizing Modifier.Node
+    val targetAlpha by remember {
+        derivedStateOf { if (progress() >= 1f) MaxAlpha else MinAlpha }
+    }
+    val alphaState = animateFloatAsState(targetValue = targetAlpha, animationSpec = AlphaTween)
+    Canvas(
+        modifier
+            .semantics(mergeDescendants = true) {
+                progressBarRangeInfo =
+                    ProgressBarRangeInfo(progress(), 0f..1f, 0)
+            }
+            .size(SpinnerSize)
+    ) {
+        val values = ArrowValues(progress())
+        val alpha = alphaState.value
+        rotate(degrees = values.rotation) {
+            val arcRadius = ArcRadius.toPx() + strokeWidth.toPx() / 2f
+            val arcBounds = Rect(center = size.center, radius = arcRadius)
+            drawCircularIndicator(color, alpha, values, arcBounds, strokeWidth)
+            drawArrow(path, arcBounds, color, alpha, values, strokeWidth)
+        }
+    }
+}
+
+private fun DrawScope.drawCircularIndicator(
+    color: Color,
+    alpha: Float,
+    values: ArrowValues,
+    arcBounds: Rect,
+    strokeWidth: Dp
+) {
+    drawArc(
+        color = color,
+        alpha = alpha,
+        startAngle = values.startAngle,
+        sweepAngle = values.endAngle - values.startAngle,
+        useCenter = false,
+        topLeft = arcBounds.topLeft,
+        size = arcBounds.size,
+        style = Stroke(
+            width = strokeWidth.toPx(),
+            cap = StrokeCap.Square
+        )
+    )
+}
+
+@Immutable
+private class ArrowValues(
+    val rotation: Float,
+    val startAngle: Float,
+    val endAngle: Float,
+    val scale: Float
+)
+
+private fun ArrowValues(progress: Float): ArrowValues {
+    // Discard first 40% of progress. Scale remaining progress to full range between 0 and 100%.
+    val adjustedPercent = max(min(1f, progress) - 0.4f, 0f) * 5 / 3
+    // How far beyond the threshold pull has gone, as a percentage of the threshold.
+    val overshootPercent = abs(progress) - 1.0f
+    // Limit the overshoot to 200%. Linear between 0 and 200.
+    val linearTension = overshootPercent.coerceIn(0f, 2f)
+    // Non-linear tension. Increases with linearTension, but at a decreasing rate.
+    val tensionPercent = linearTension - linearTension.pow(2) / 4
+
+    // Calculations based on SwipeRefreshLayout specification.
+    val endTrim = adjustedPercent * MaxProgressArc
+    val rotation = (-0.25f + 0.4f * adjustedPercent + tensionPercent) * 0.5f
+    val startAngle = rotation * 360
+    val endAngle = (rotation + endTrim) * 360
+    val scale = min(1f, adjustedPercent)
+
+    return ArrowValues(rotation, startAngle, endAngle, scale)
+}
+
+private fun DrawScope.drawArrow(
+    arrow: Path,
+    bounds: Rect,
+    color: Color,
+    alpha: Float,
+    values: ArrowValues,
+    strokeWidth: Dp,
+) {
+    arrow.reset()
+    arrow.moveTo(0f, 0f) // Move to left corner
+    arrow.lineTo(x = ArrowWidth.toPx() * values.scale, y = 0f) // Line to right corner
+
+    // Line to tip of arrow
+    arrow.lineTo(
+        x = ArrowWidth.toPx() * values.scale / 2,
+        y = ArrowHeight.toPx() * values.scale
+    )
+
+    val radius = min(bounds.width, bounds.height) / 2f
+    val inset = ArrowWidth.toPx() * values.scale / 2f
+    arrow.translate(
+        Offset(
+            x = radius + bounds.center.x - inset,
+            y = bounds.center.y + strokeWidth.toPx() / 2f
+        )
+    )
+    arrow.close()
+    rotate(degrees = values.endAngle) {
+        drawPath(path = arrow, color = color, alpha = alpha)
+    }
+}
+
+private const val MaxProgressArc = 0.8f
+private const val CrossfadeDurationMs = MotionTokens.DurationShort2.toInt()
+
+/** The default stroke width for [Indicator] */
+private val StrokeWidth = 2.5.dp
+
+private val ArcRadius = 7.5.dp
+private val SpinnerSize = 20.dp // (ArcRadius + PullRefreshIndicatorDefaults.StrokeWidth).times(2)
+private val Elevation = 6.dp
+private val ArrowWidth = 10.dp
+private val ArrowHeight = 5.dp
+
+// Values taken from SwipeRefreshLayout
+private const val MinAlpha = 0.3f
+private const val MaxAlpha = 1f
+private val AlphaTween = tween<Float>(MotionTokens.DurationMedium2.toInt(), easing = LinearEasing)
diff --git a/compose/runtime/runtime-saveable/build.gradle b/compose/runtime/runtime-saveable/build.gradle
index ace0562..9c6d445 100644
--- a/compose/runtime/runtime-saveable/build.gradle
+++ b/compose/runtime/runtime-saveable/build.gradle
@@ -93,10 +93,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt b/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt
index b7818d3..6d1654e 100644
--- a/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt
+++ b/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt
@@ -138,8 +138,16 @@
     private var key: String,
     private var value: T,
     private var inputs: Array<out Any?>
-) : () -> Any?, SaverScope, RememberObserver {
+) : SaverScope, RememberObserver {
     private var entry: SaveableStateRegistry.Entry? = null
+    /**
+     * Value provider called by the registry.
+     */
+    private val valueProvider = {
+        with(saver) {
+            save(requireNotNull(value) { "Value should be initialized" })
+        }
+    }
 
     fun update(
         saver: Saver<T, Any>,
@@ -171,18 +179,11 @@
         val registry = registry
         require(entry == null) { "entry($entry) is not null" }
         if (registry != null) {
-            registry.requireCanBeSaved(invoke())
-            entry = registry.registerProvider(key, this)
+            registry.requireCanBeSaved(valueProvider())
+            entry = registry.registerProvider(key, valueProvider)
         }
     }
 
-    /**
-     * Value provider called by the registry.
-     */
-    override fun invoke(): Any? = with(saver) {
-        save(requireNotNull(value) { "Value should be initialized" })
-    }
-
     override fun canBeSaved(value: Any): Boolean {
         val registry = registry
         return registry == null || registry.canBeSaved(value)
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index 90d3092..069ff97 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -920,7 +920,7 @@
     property public abstract androidx.compose.runtime.SnapshotMutationPolicy<T> policy;
   }
 
-  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> java.util.RandomAccess androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public void add(int index, T element);
     method public boolean add(T element);
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index 69c5a8e..4f571e5 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -971,7 +971,7 @@
     property public abstract androidx.compose.runtime.SnapshotMutationPolicy<T> policy;
   }
 
-  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> java.util.RandomAccess androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public void add(int index, T element);
     method public boolean add(T element);
diff --git a/compose/runtime/runtime/build.gradle b/compose/runtime/runtime/build.gradle
index 9da1a17..aa06ba0 100644
--- a/compose/runtime/runtime/build.gradle
+++ b/compose/runtime/runtime/build.gradle
@@ -37,12 +37,13 @@
             dependencies {
                 implementation(libs.kotlinStdlibCommon)
                 implementation(libs.kotlinCoroutinesCore)
+                implementation(project(":collection:collection"))
             }
         }
 
         commonTest {
             dependencies {
-                implementation kotlin("test")
+                implementation kotlin("test-junit")
                 implementation(libs.kotlinCoroutinesTest)
                 implementation(libs.kotlinReflect)
             }
@@ -72,12 +73,10 @@
             }
         }
 
-
         androidMain {
             dependsOn(jvmMain)
             dependencies {
                 api(libs.kotlinCoroutinesAndroid)
-                api("androidx.annotation:annotation:1.1.0")
             }
         }
 
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
index 7334416..04cc84a 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
+++ b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
@@ -21,7 +21,6 @@
 import androidx.benchmark.ExperimentalBenchmarkConfigApi
 import androidx.benchmark.MetricCapture
 import androidx.benchmark.MicrobenchmarkConfig
-import androidx.benchmark.ProfilerConfig
 import androidx.benchmark.TimeCapture
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.compose.runtime.Composable
@@ -112,7 +111,6 @@
                     }
                 }
             ),
-            profiler = ProfilerConfig.MethodTracing(),
         )
     )
 
diff --git a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
index 42e45c5..ea749aa 100644
--- a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
+++ b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
@@ -23,7 +23,7 @@
 import androidx.compose.runtime.neverEqualPolicy
 import androidx.compose.runtime.referentialEqualityPolicy
 import androidx.compose.runtime.structuralEqualityPolicy
-import kotlin.test.assertEquals
+import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
diff --git a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt
index 0dc3606..b074391 100644
--- a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt
+++ b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt
@@ -22,7 +22,7 @@
 import androidx.compose.runtime.mutableFloatStateOf
 import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableLongStateOf
-import kotlin.test.assertEquals
+import org.junit.Assert.assertEquals
 import org.junit.Test
 
 class ParcelablePrimitiveMutableStateTests {
@@ -59,7 +59,7 @@
         state.doubleValue = 1.5
 
         val restored = recreateViaParcel(state)
-        assertEquals(1.5, restored.doubleValue)
+        assertEquals(1.5, restored.doubleValue, 0.0)
     }
 
     private inline fun <reified T> recreateViaParcel(value: T): T {
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
index e806853..d5a32ab 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
@@ -20,7 +20,7 @@
 import androidx.compose.runtime.changelist.ChangeList
 import androidx.compose.runtime.collection.IdentityArrayMap
 import androidx.compose.runtime.collection.IdentityArraySet
-import androidx.compose.runtime.collection.IdentityScopeMap
+import androidx.compose.runtime.collection.ScopeMap
 import androidx.compose.runtime.collection.fastForEach
 import androidx.compose.runtime.snapshots.fastAll
 import androidx.compose.runtime.snapshots.fastAny
@@ -471,12 +471,13 @@
      * A map of observable objects to the [RecomposeScope]s that observe the object. If the key
      * object is modified the associated scopes should be invalidated.
      */
-    private val observations = IdentityScopeMap<RecomposeScopeImpl>()
+    private val observations = ScopeMap<RecomposeScopeImpl>()
 
     /**
      * Used for testing. Returns the objects that are observed
      */
-    internal val observedObjects get() = observations.values.filterNotNull()
+    internal val observedObjects
+        @TestOnly @Suppress("AsCollectionCall") get() = observations.map.asMap().keys
 
     /**
      * A set of scopes that were invalidated conditionally (that is they were invalidated by a
@@ -489,18 +490,19 @@
     /**
      * A map of object read during derived states to the corresponding derived state.
      */
-    private val derivedStates = IdentityScopeMap<DerivedState<*>>()
+    private val derivedStates = ScopeMap<DerivedState<*>>()
 
     /**
      * Used for testing. Returns dependencies of derived states that are currently observed.
      */
-    internal val derivedStateDependencies get() = derivedStates.values.filterNotNull()
+    internal val derivedStateDependencies
+        @TestOnly @Suppress("AsCollectionCall") get() = derivedStates.map.asMap().keys
 
     /**
      * Used for testing. Returns the conditional scopes being tracked by the composer
      */
-    internal val conditionalScopes: List<RecomposeScopeImpl> get() =
-        conditionallyInvalidatedScopes.toList()
+    internal val conditionalScopes: List<RecomposeScopeImpl>
+        @TestOnly get() = conditionallyInvalidatedScopes.toList()
 
     /**
      * A list of changes calculated by [Composer] to be applied to the [Applier] and the
@@ -526,7 +528,7 @@
      * scopes that were already dismissed by composition and should be ignored in the next call
      * to [recordModificationsOf].
      */
-    private val observationsProcessed = IdentityScopeMap<RecomposeScopeImpl>()
+    private val observationsProcessed = ScopeMap<RecomposeScopeImpl>()
 
     /**
      * A map of the invalid [RecomposeScope]s. If this map is non-empty the current state of
@@ -856,21 +858,21 @@
         }
 
         if (forgetConditionalScopes && conditionallyInvalidatedScopes.isNotEmpty()) {
-            observations.removeValueIf { scope ->
+            observations.removeScopeIf { scope ->
                 scope in conditionallyInvalidatedScopes || invalidated?.let { scope in it } == true
             }
             conditionallyInvalidatedScopes.clear()
             cleanUpDerivedStateObservations()
         } else {
             invalidated?.let {
-                observations.removeValueIf { scope -> scope in it }
+                observations.removeScopeIf { scope -> scope in it }
                 cleanUpDerivedStateObservations()
             }
         }
     }
 
     private fun cleanUpDerivedStateObservations() {
-        derivedStates.removeValueIf { derivedState -> derivedState !in observations }
+        derivedStates.removeScopeIf { derivedState -> derivedState !in observations }
         if (conditionallyInvalidatedScopes.isNotEmpty()) {
             conditionallyInvalidatedScopes.removeValueIf { scope -> !scope.isConditional }
         }
@@ -979,7 +981,7 @@
             if (pendingInvalidScopes) {
                 trace("Compose:unobserve") {
                     pendingInvalidScopes = false
-                    observations.removeValueIf { scope -> !scope.valid }
+                    observations.removeScopeIf { scope -> !scope.valid }
                     cleanUpDerivedStateObservations()
                 }
             }
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt
deleted file mode 100644
index 3ee5190..0000000
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright 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 androidx.compose.runtime.collection
-
-import androidx.compose.runtime.identityHashCode
-import kotlin.contracts.ExperimentalContracts
-
-/**
- * Maps values to a set of scopes using the [identityHashCode] for both the value and the
- * scope for uniqueness.
- */
-@OptIn(ExperimentalContracts::class)
-internal class IdentityScopeMap<T : Any> {
-    /**
-     * The array of indices into [values] and [scopeSets], in the order that they are sorted
-     * in the [IdentityScopeMap]. The length of the used values is [size], and all remaining values
-     * are the unused indices in [values] and [scopeSets].
-     */
-    var valueOrder: IntArray = IntArray(50) { it }
-        private set
-
-    /**
-     * The [identityHashCode] for the keys in the collection. We never use the actual
-     * values
-     */
-    var values: Array<Any?> = arrayOfNulls(50)
-        private set
-
-    /**
-     * The [IdentityArraySet]s for values, in the same index order as [values], indexed
-     * by [valueOrder]. The consumed values may extend beyond [size] if a value has been removed.
-     */
-    var scopeSets: Array<IdentityArraySet<T>?> = arrayOfNulls(50)
-        private set
-
-    /**
-     * The number of values in the map.
-     */
-    var size = 0
-
-    /**
-     * Returns the [IdentityArraySet] for the value at the given [index] order in the map.
-     */
-    private fun scopeSetAt(index: Int): IdentityArraySet<T> {
-        return scopeSets[valueOrder[index]]!!
-    }
-
-    /**
-     * Adds a [value]/[scope] pair to the map and returns `true` if it was added or `false` if
-     * it already existed.
-     */
-    fun add(value: Any, scope: T): Boolean {
-        val valueSet = getOrCreateIdentitySet(value)
-        return valueSet.add(scope)
-    }
-
-    /**
-     * Returns true if any scopes are associated with [element]
-     */
-    operator fun contains(element: Any): Boolean = find(element) >= 0
-
-    /**
-     * Executes [block] for all scopes mapped to the given [value].
-     */
-    inline fun forEachScopeOf(value: Any, block: (scope: T) -> Unit) {
-        val index = find(value)
-        if (index >= 0) {
-            scopeSetAt(index).fastForEach(block)
-        }
-    }
-
-    /**
-     * Returns the existing [IdentityArraySet] for the given [value] or creates a new one
-     * and insertes it into the map and returns it.
-     */
-    private fun getOrCreateIdentitySet(value: Any): IdentityArraySet<T> {
-        val size = size
-        val valueOrder = valueOrder
-        val values = values
-        val scopeSets = scopeSets
-
-        val index: Int
-        if (size > 0) {
-            index = find(value)
-
-            if (index >= 0) {
-                return scopeSetAt(index)
-            }
-        } else {
-            index = -1
-        }
-
-        val insertIndex = -(index + 1)
-
-        if (size < valueOrder.size) {
-            val valueIndex = valueOrder[size]
-            values[valueIndex] = value
-            val scopeSet = scopeSets[valueIndex] ?: IdentityArraySet<T>().also {
-                scopeSets[valueIndex] = it
-            }
-
-            // insert into the right location in keyOrder
-            if (insertIndex < size) {
-                valueOrder.copyInto(
-                    destination = valueOrder,
-                    destinationOffset = insertIndex + 1,
-                    startIndex = insertIndex,
-                    endIndex = size
-                )
-            }
-            valueOrder[insertIndex] = valueIndex
-            this.size++
-            return scopeSet
-        }
-
-        // We have to increase the size of all arrays
-        val newSize = valueOrder.size * 2
-        val valueIndex = size
-        val newScopeSets = scopeSets.copyOf(newSize)
-        val scopeSet = IdentityArraySet<T>()
-        newScopeSets[valueIndex] = scopeSet
-        val newValues = values.copyOf(newSize)
-        newValues[valueIndex] = value
-
-        val newKeyOrder = IntArray(newSize)
-        for (i in size + 1 until newSize) {
-            newKeyOrder[i] = i
-        }
-
-        if (insertIndex < size) {
-            valueOrder.copyInto(
-                destination = newKeyOrder,
-                destinationOffset = insertIndex + 1,
-                startIndex = insertIndex,
-                endIndex = size
-            )
-        }
-        newKeyOrder[insertIndex] = valueIndex
-        if (insertIndex > 0) {
-            valueOrder.copyInto(
-                destination = newKeyOrder,
-                endIndex = insertIndex
-            )
-        }
-        this.scopeSets = newScopeSets
-        this.values = newValues
-        this.valueOrder = newKeyOrder
-        this.size++
-        return scopeSet
-    }
-
-    /**
-     * Removes all values and scopes from the map
-     */
-    fun clear() {
-        val scopeSets = scopeSets
-        val valueOrder = valueOrder
-        val values = values
-
-        for (i in scopeSets.indices) {
-            scopeSets[i]?.clear()
-            valueOrder[i] = i
-            values[i] = null
-        }
-
-        size = 0
-    }
-
-    /**
-     * Remove [scope] from the scope set for [value]. If the scope set is empty after [scope] has
-     * been remove the reference to [value] is removed as well.
-     *
-     * @param value the key of the scope map
-     * @param scope the scope being removed
-     * @return true if the value was removed from the scope
-     */
-    fun remove(value: Any, scope: T): Boolean {
-        val index = find(value)
-
-        val valueOrder = valueOrder
-        val scopeSets = scopeSets
-        val values = values
-        val size = size
-        if (index >= 0) {
-            val valueOrderIndex = valueOrder[index]
-            val set = scopeSets[valueOrderIndex] ?: return false
-            val removed = set.remove(scope)
-            if (set.size == 0) {
-                val startIndex = index + 1
-                val endIndex = size
-                if (startIndex < endIndex) {
-                    valueOrder.copyInto(
-                        destination = valueOrder,
-                        destinationOffset = index,
-                        startIndex = startIndex,
-                        endIndex = endIndex
-                    )
-                }
-                val newSize = size - 1
-                valueOrder[newSize] = valueOrderIndex
-                values[valueOrderIndex] = null
-                this.size = newSize
-            }
-            return removed
-        }
-        return false
-    }
-
-    /**
-     * Removes all scopes that match [predicate]. If all scopes for a given value have been
-     * removed, that value is removed also.
-     */
-    inline fun removeValueIf(predicate: (scope: T) -> Boolean) {
-        removingScopes { scopeSet ->
-            scopeSet.removeValueIf(predicate)
-        }
-    }
-
-    /**
-     * Removes given scope from all sets. If all scopes for a given value are removed, that value
-     * is removed as well.
-     */
-    fun removeScope(scope: T) {
-        removingScopes { scopeSet ->
-            scopeSet.remove(scope)
-        }
-    }
-
-    private inline fun removingScopes(removalOperation: (IdentityArraySet<T>) -> Unit) {
-        val valueOrder = valueOrder
-        val scopeSets = scopeSets
-        val values = values
-        var destinationIndex = 0
-        for (i in 0 until size) {
-            val valueIndex = valueOrder[i]
-            val set = scopeSets[valueIndex]!!
-            removalOperation(set)
-            if (set.size > 0) {
-                if (destinationIndex != i) {
-                    // We'll bubble-up the now-free key-order by swapping the index with the one
-                    // we're copying from. This means that the set can be reused later.
-                    val destinationKeyOrder = valueOrder[destinationIndex]
-                    valueOrder[destinationIndex] = valueIndex
-                    valueOrder[i] = destinationKeyOrder
-                }
-                destinationIndex++
-            }
-        }
-        // Remove hard references to values that are no longer in the map
-        for (i in destinationIndex until size) {
-            values[valueOrder[i]] = null
-        }
-        size = destinationIndex
-    }
-
-    /**
-     * Returns the index into [valueOrder] of the found [value] of the
-     * value, or the negative index - 1 of the position in which it would be if it were found.
-     */
-    private fun find(value: Any?): Int {
-        val valueIdentity = identityHashCode(value)
-        var low = 0
-        var high = size - 1
-
-        val values = values
-        val valueOrder = valueOrder
-        while (low <= high) {
-            val mid = (low + high).ushr(1)
-            val midValue = values[valueOrder[mid]]
-            val midValHash = identityHashCode(midValue)
-            when {
-                midValHash < valueIdentity -> low = mid + 1
-                midValHash > valueIdentity -> high = mid - 1
-                value === midValue -> return mid
-                else -> return findExactIndex(mid, value, valueIdentity)
-            }
-        }
-        return -(low + 1)
-    }
-
-    /**
-     * When multiple items share the same [identityHashCode], then we must find the specific
-     * index of the target item. This method assumes that [midIndex] has already been checked
-     * for an exact match for [value], but will look at nearby values to find the exact item index.
-     * If no match is found, the negative index - 1 of the position in which it would be will
-     * be returned, which is always after the last item with the same [identityHashCode].
-     */
-    private fun findExactIndex(midIndex: Int, value: Any?, valueHash: Int): Int {
-        val values = values
-        val valueOrder = valueOrder
-
-        // hunt down first
-        for (i in midIndex - 1 downTo 0) {
-            val v = values[valueOrder[i]]
-            if (v === value) {
-                return i
-            }
-            if (identityHashCode(v) != valueHash) {
-                break // we've gone too far
-            }
-        }
-
-        for (i in midIndex + 1 until size) {
-            val v = values[valueOrder[i]]
-            if (v === value) {
-                return i
-            }
-            if (identityHashCode(v) != valueHash) {
-                // We've gone too far. We should insert here.
-                return -(i + 1)
-            }
-        }
-
-        // We should insert at the end
-        return -(size + 1)
-    }
-}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ScopeMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ScopeMap.kt
new file mode 100644
index 0000000..1c3e1d8
--- /dev/null
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ScopeMap.kt
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2023 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 androidx.compose.runtime.collection
+
+import androidx.collection.MutableScatterSet
+import androidx.collection.mutableScatterMapOf
+
+/**
+ * Maps values to a set of scopes.
+ */
+internal class ScopeMap<T : Any> {
+    val map = mutableScatterMapOf<Any, Any>()
+
+    /**
+     * The number of values in the map.
+     */
+    val size get() = map.size
+
+    /**
+     * Adds a [key]/[scope] pair to the map.
+     */
+    fun add(key: Any, scope: T) {
+        map.compute(key) { _, value ->
+            when (value) {
+                null -> scope
+                is MutableScatterSet<*> -> {
+                    @Suppress("UNCHECKED_CAST")
+                    (value as MutableScatterSet<T>).add(scope)
+                    value
+                }
+
+                else -> {
+                    if (value !== scope) {
+                        val set = MutableScatterSet<T>()
+                        @Suppress("UNCHECKED_CAST")
+                        set.add(value as T)
+                        set.add(scope)
+                        set
+                    } else {
+                        value
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns true if any scopes are associated with [element]
+     */
+    operator fun contains(element: Any): Boolean = map.containsKey(element)
+
+    /**
+     * Executes [block] for all scopes mapped to the given [key].
+     */
+    inline fun forEachScopeOf(key: Any, block: (scope: T) -> Unit) {
+        when (val value = map[key]) {
+            null -> { /* do nothing */ }
+            is MutableScatterSet<*> -> {
+                @Suppress("UNCHECKED_CAST")
+                (value as MutableScatterSet<T>).forEach(block)
+            }
+            else -> {
+                @Suppress("UNCHECKED_CAST")
+                block(value as T)
+            }
+        }
+    }
+
+    /**
+     * Removes all values and scopes from the map
+     */
+    fun clear() {
+        map.clear()
+    }
+
+    /**
+     * Remove [scope] from the scope set for [key]. If the scope set is empty after [scope] has
+     * been remove the reference to [key] is removed as well.
+     *
+     * @param key the key of the scope map
+     * @param scope the scope being removed
+     * @return true if the value was removed from the scope
+     */
+    fun remove(key: Any, scope: T): Boolean {
+        val value = map[key] ?: return false
+        return when (value) {
+            is MutableScatterSet<*> -> {
+                @Suppress("UNCHECKED_CAST")
+                val set = value as MutableScatterSet<T>
+
+                val removed = set.remove(scope)
+                if (removed && set.isEmpty()) {
+                    map.remove(key)
+                }
+                return removed
+            }
+            scope -> {
+                map.remove(key)
+                true
+            }
+            else -> false
+        }
+    }
+
+    /**
+     * Removes all scopes that match [predicate]. If all scopes for a given value have been
+     * removed, that value is removed also.
+     */
+    inline fun removeScopeIf(crossinline predicate: (scope: T) -> Boolean) {
+        map.removeIf { _, value ->
+            when (value) {
+                is MutableScatterSet<*> -> {
+                    @Suppress("UNCHECKED_CAST")
+                    val set = value as MutableScatterSet<T>
+                    set.removeIf(predicate)
+                    set.isEmpty()
+                }
+                else -> {
+                    @Suppress("UNCHECKED_CAST")
+                    predicate(value as T)
+                }
+            }
+        }
+    }
+
+    /**
+     * Removes given scope from all sets. If all scopes for a given value are removed, that value
+     * is removed as well.
+     */
+    fun removeScope(scope: T) {
+        removeScopeIf { it === scope }
+    }
+}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
index 02367fb..c339e9d 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
@@ -31,7 +31,7 @@
  * @see androidx.compose.runtime.mutableStateListOf
  */
 @Stable
-class SnapshotStateList<T> : MutableList<T>, StateObject {
+class SnapshotStateList<T> : MutableList<T>, StateObject, RandomAccess {
     override var firstStateRecord: StateRecord =
         StateListStateRecord<T>(persistentListOf())
         private set
@@ -59,7 +59,7 @@
      */
     fun toList(): List<T> = readable.list
 
-    internal val modification: Int get() = withCurrent { modification }
+    internal val structure: Int get() = withCurrent { structuralChange }
 
     @Suppress("UNCHECKED_CAST")
     internal val readable: StateListStateRecord<T> get() =
@@ -72,11 +72,13 @@
         internal var list: PersistentList<T>
     ) : StateRecord() {
         internal var modification = 0
+        internal var structuralChange = 0
         override fun assign(value: StateRecord) {
             synchronized(sync) {
                 @Suppress("UNCHECKED_CAST")
                 list = (value as StateListStateRecord<T>).list
                 modification = value.modification
+                structuralChange = value.structuralChange
             }
         }
 
@@ -112,6 +114,7 @@
             synchronized(sync) {
                 list = persistentListOf()
                 modification++
+                structuralChange++
             }
         }
     }
@@ -120,7 +123,7 @@
     override fun removeAt(index: Int): T = get(index).also { update { it.removeAt(index) } }
     override fun retainAll(elements: Collection<T>) = mutateBoolean { it.retainAll(elements) }
     override fun set(index: Int, element: T): T = get(index).also {
-        update { it.set(index, element) }
+        update(structural = false) { it.set(index, element) }
     }
 
     fun removeRange(fromIndex: Int, toIndex: Int) {
@@ -174,6 +177,7 @@
                     if (modification == currentModification) {
                         list = newList
                         modification++
+                        structuralChange++
                         true
                     } else false
                 }
@@ -183,11 +187,17 @@
         return result
     }
 
-    private inline fun update(block: (PersistentList<T>) -> PersistentList<T>) {
-        conditionalUpdate(block)
+    private inline fun update(
+        structural: Boolean = true,
+        block: (PersistentList<T>) -> PersistentList<T>
+    ) {
+        conditionalUpdate(structural, block)
     }
 
-    private inline fun conditionalUpdate(block: (PersistentList<T>) -> PersistentList<T>) =
+    private inline fun conditionalUpdate(
+        structural: Boolean = true,
+        block: (PersistentList<T>) -> PersistentList<T>
+    ) =
         run {
             val result: Boolean
             while (true) {
@@ -207,6 +217,7 @@
                     synchronized(sync) {
                         if (modification == currentModification) {
                             list = newList
+                            if (structural) structuralChange++
                             modification++
                             true
                         } else false
@@ -244,12 +255,19 @@
     }
 }
 
+private fun invalidIteratorSet(): Nothing =
+    error(
+        "Cannot call set before the first call to next() or previous() " +
+            "or immediately after a call to add() or remove()"
+    )
+
 private class StateListIterator<T>(
     val list: SnapshotStateList<T>,
     offset: Int
 ) : MutableListIterator<T> {
     private var index = offset - 1
-    private var modification = list.modification
+    private var lastRequested = -1
+    private var structure = list.structure
 
     override fun hasPrevious() = index >= 0
 
@@ -258,6 +276,7 @@
     override fun previous(): T {
         validateModification()
         validateRange(index, list.size)
+        lastRequested = index
         return list[index].also { index-- }
     }
 
@@ -266,8 +285,9 @@
     override fun add(element: T) {
         validateModification()
         list.add(index + 1, element)
+        lastRequested = -1
         index++
-        modification = list.modification
+        structure = list.structure
     }
 
     override fun hasNext() = index < list.size - 1
@@ -275,6 +295,7 @@
     override fun next(): T {
         validateModification()
         val newIndex = index + 1
+        lastRequested = newIndex
         validateRange(newIndex, list.size)
         return list[newIndex].also { index = newIndex }
     }
@@ -283,17 +304,19 @@
         validateModification()
         list.removeAt(index)
         index--
-        modification = list.modification
+        lastRequested = -1
+        structure = list.structure
     }
 
     override fun set(element: T) {
         validateModification()
-        list.set(index, element)
-        modification = list.modification
+        if (lastRequested < 0) invalidIteratorSet()
+        list.set(lastRequested, element)
+        structure = list.structure
     }
 
     private fun validateModification() {
-        if (list.modification != modification) {
+        if (list.structure != structure) {
             throw ConcurrentModificationException()
         }
     }
@@ -305,7 +328,7 @@
     toIndex: Int
 ) : MutableList<T> {
     private val offset = fromIndex
-    private var modification = parentList.modification
+    private var structure = parentList.structure
     override var size = toIndex - fromIndex
         private set
 
@@ -343,7 +366,7 @@
         validateModification()
         parentList.add(offset + size, element)
         size++
-        modification = parentList.modification
+        structure = parentList.structure
         return true
     }
 
@@ -351,7 +374,7 @@
         validateModification()
         parentList.add(offset + index, element)
         size++
-        modification = parentList.modification
+        structure = parentList.structure
     }
 
     override fun addAll(index: Int, elements: Collection<T>): Boolean {
@@ -359,7 +382,7 @@
         val result = parentList.addAll(index + offset, elements)
         if (result) {
             size += elements.size
-            modification = parentList.modification
+            structure = parentList.structure
         }
         return result
     }
@@ -371,7 +394,7 @@
             validateModification()
             parentList.removeRange(offset, offset + size)
             size = 0
-            modification = parentList.modification
+            structure = parentList.structure
         }
     }
 
@@ -422,7 +445,7 @@
         validateModification()
         return parentList.removeAt(offset + index).also {
             size--
-            modification = parentList.modification
+            structure = parentList.structure
         }
     }
 
@@ -430,7 +453,7 @@
         validateModification()
         val removed = parentList.retainAllInRange(elements, offset, offset + size)
         if (removed > 0) {
-            modification = parentList.modification
+            structure = parentList.structure
             size -= removed
         }
         return removed > 0
@@ -440,7 +463,7 @@
         validateRange(index, size)
         validateModification()
         val result = parentList.set(index + offset, element)
-        modification = parentList.modification
+        structure = parentList.structure
         return result
     }
 
@@ -453,7 +476,7 @@
     }
 
     private fun validateModification() {
-        if (parentList.modification != modification) {
+        if (parentList.structure != structure) {
             throw ConcurrentModificationException()
         }
     }
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
index c346941..80c43ea 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
@@ -23,7 +23,7 @@
 import androidx.compose.runtime.collection.IdentityArrayIntMap
 import androidx.compose.runtime.collection.IdentityArrayMap
 import androidx.compose.runtime.collection.IdentityArraySet
-import androidx.compose.runtime.collection.IdentityScopeMap
+import androidx.compose.runtime.collection.ScopeMap
 import androidx.compose.runtime.collection.fastForEach
 import androidx.compose.runtime.collection.mutableVectorOf
 import androidx.compose.runtime.composeRuntimeError
@@ -378,7 +378,7 @@
         /**
          * Values that have been read during the scope's [SnapshotStateObserver.observeReads].
          */
-        private val valueToScopes = IdentityScopeMap<Any>()
+        private val valueToScopes = ScopeMap<Any>()
 
         /**
          * Reverse index (scope -> values) for faster scope invalidation.
@@ -422,7 +422,7 @@
         /**
          * Invalidation index from state objects to derived states reading them.
          */
-        private val dependencyToDerivedStates = IdentityScopeMap<DerivedState<*>>()
+        private val dependencyToDerivedStates = ScopeMap<DerivedState<*>>()
 
         /**
          * Last derived state value recorded during read.
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/ScopeMapTest.kt
similarity index 66%
rename from compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/ScopeMapTest.kt
index 01ef6a8..9c3887b 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/ScopeMapTest.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2023 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.
@@ -16,24 +16,21 @@
 
 package androidx.compose.runtime.collection
 
-import kotlin.test.AfterTest
 import kotlin.test.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertFalse
-import kotlin.test.assertNotNull
-import kotlin.test.assertNull
 import kotlin.test.assertTrue
 import kotlin.test.fail
 
-class IdentityScopeMapTest {
-    private val map = IdentityScopeMap<Scope>()
+class ScopeMapTest {
+    private val map = ScopeMap<Scope>()
 
     private val scopeList = listOf(Scope(10), Scope(12), Scope(1), Scope(30), Scope(10))
     private val valueList = listOf(Value("A"), Value("B"))
 
     @Test
     fun emptyConstruction() {
-        val m = IdentityScopeMap<Test>()
+        val m = ScopeMap<Scope>()
         assertEquals(0, m.size)
     }
 
@@ -83,8 +80,7 @@
         map.add(valueList[1], scopeList[1])
         map.clear()
         assertEquals(0, map.size)
-        assertEquals(0, map.scopeSets[0]!!.size)
-        assertEquals(0, map.scopeSets[1]!!.size)
+        assertEquals(0, map.map.size)
     }
 
     @Test
@@ -115,17 +111,16 @@
         map.add(valueC, scopeList[3])
 
         // remove a scope that won't cause any values to be removed:
-        map.removeValueIf { scope ->
+        map.removeScopeIf { scope ->
             scope === scopeList[1]
         }
         assertEquals(3, map.size)
 
         // remove the last scope in a set:
-        map.removeValueIf { scope ->
+        map.removeScopeIf { scope ->
             scope === scopeList[2]
         }
         assertEquals(2, map.size)
-        assertEquals(0, map.scopeSets[map.valueOrder[2]]!!.size)
 
         map.forEachScopeOf(valueList[1]) {
             fail("There shouldn't be any scopes for this value")
@@ -146,39 +141,6 @@
         assertFalse(Value("D") in map)
     }
 
-    /**
-     * Validate the test maintains the internal assumptions of the map.
-     */
-    @AfterTest
-    fun validateMap() {
-        // Ensure that no duplicates exist in value-order and all indexes are represented
-        val pendingRepresentation = mutableSetOf(*map.values.indices.toList().toTypedArray())
-        map.valueOrder.forEach {
-            assertTrue(it in pendingRepresentation, "Index $it was duplicated")
-            pendingRepresentation.remove(it)
-        }
-        assertTrue(pendingRepresentation.isEmpty(), "Not all indexes are in the valueOrder map")
-
-        // Ensure values are non-null and sets are not empty for index < size and values are
-        // null and sets are empty or missing for >= size
-        val size = map.size
-        map.valueOrder.forEachIndexed { index, order ->
-            val value = map.values[order]
-            val set = map.scopeSets[order]
-            if (index < size) {
-                assertNotNull(value, "A value was unexpectedly null")
-                assertNotNull(set, "A set was unexpectedly null")
-                assertTrue(set.size > 0, "An empty set wasn't collected")
-            } else {
-                assertNull(value, "A reference to a removed value was retained")
-                assertTrue(
-                    actual = set == null || set.size == 0,
-                    message = "A non-empty set was dropped"
-                )
-            }
-        }
-    }
-
-    data class Scope(val item: Int)
-    data class Value(val s: String)
+    class Scope(val item: Int)
+    class Value(val s: String)
 }
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
index d788ffe..c5727ac 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
@@ -17,6 +17,7 @@
 package androidx.compose.runtime.snapshots
 
 import androidx.compose.runtime.mutableStateListOf
+import androidx.compose.runtime.toMutableStateList
 import kotlin.test.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertFailsWith
@@ -593,10 +594,9 @@
     }
 
     @Test(timeout = 30_000)
-    @OptIn(ExperimentalCoroutinesApi::class)
     @IgnoreJsTarget // Not relevant in a single threaded environment
     fun concurrentMixingWriteApply_add(): Unit = runTest {
-        repeat(100) {
+        repeat(10) {
             val lists = Array(100) { mutableStateListOf<Int>() }.toList()
             val channel = Channel<Unit>(Channel.CONFLATED)
             coroutineScope {
@@ -722,6 +722,82 @@
         }
     }
 
+    @Test
+    fun canReverseTheList() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            list.reverse()
+        }
+    }
+
+    @Test
+    fun canReverseUsingIterators() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            val forward = list.listIterator()
+            val backward = list.listIterator(list.size)
+            val count = list.size shr 1
+            repeat(count) {
+                val forwardValue = forward.next()
+                val backwardValue = backward.previous()
+                backward.set(forwardValue)
+                forward.set(backwardValue)
+            }
+        }
+        validate(List(101) { it }.toMutableStateList()) { list ->
+            val forward = list.listIterator()
+            val backward = list.listIterator(list.size)
+            val count = list.size shr 1
+            repeat(count) {
+                val forwardValue = forward.next()
+                val backwardValue = backward.previous()
+                backward.set(forwardValue)
+                forward.set(backwardValue)
+            }
+        }
+    }
+
+    @Test
+    fun canIterateForwards() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            val forward = list.listIterator()
+            var expected = 0
+            var count = 0
+            while (forward.hasNext()) {
+                count++
+                assertEquals(expected++, forward.next())
+            }
+            assertEquals(100, count)
+        }
+    }
+
+    @Test
+    fun canIterateBackwards() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            val backward = list.listIterator(list.size)
+            var expected = 99
+            var count = 0
+            while (backward.hasPrevious()) {
+                count++
+                assertEquals(expected--, backward.previous())
+            }
+            assertEquals(100, count)
+        }
+    }
+
+    @Test
+    fun canShuffleTheList() {
+        val list = List(100) { it }.toMutableStateList()
+        list.shuffle()
+        assertEquals(100, list.distinct().size)
+    }
+
+    @Test
+    fun canSortTheList() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            list.shuffle()
+            list.sort()
+        }
+    }
+
     private fun <T> validate(list: MutableList<T>, block: (list: MutableList<T>) -> Unit) {
         val normalList = list.toMutableList()
         block(normalList)
diff --git a/compose/test-utils/build.gradle b/compose/test-utils/build.gradle
index b33c4c9..8e330f4 100644
--- a/compose/test-utils/build.gradle
+++ b/compose/test-utils/build.gradle
@@ -93,10 +93,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/ui/ui-graphics/api/current.txt b/compose/ui/ui-graphics/api/current.txt
index b4e7d7e..063c8c8 100644
--- a/compose/ui/ui-graphics/api/current.txt
+++ b/compose/ui/ui-graphics/api/current.txt
@@ -390,6 +390,60 @@
     method @ColorInt @androidx.compose.runtime.Stable public static int toArgb(long);
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorList {
+    ctor public ColorList(androidx.collection.LongList list);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.LongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline boolean none();
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.LongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorListKt {
+    method public static inline androidx.collection.LongList colorListOf();
+    method public static inline androidx.collection.LongList colorListOf(long element1);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongList emptyColorList();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2, long element3);
+  }
+
   @kotlin.jvm.JvmInline public final value class ColorMatrix {
     ctor public ColorMatrix(optional float[] values);
     method public void convertRgbToYuv();
@@ -417,6 +471,40 @@
     method public operator long invoke();
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorSet {
+    ctor public ColorSet(androidx.collection.LongSet set);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.LongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline boolean none();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.LongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorSetKt {
+    method public static inline androidx.collection.LongSet colorSetOf();
+    method public static inline androidx.collection.LongSet colorSetOf(long element1);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongSet emptyColorSet();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2, long element3);
+  }
+
   @SuppressCompatibility @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGraphicsApi {
   }
 
@@ -532,6 +620,113 @@
     method public static boolean isIdentity(float[]);
   }
 
+  @kotlin.jvm.JvmInline public final value class MutableColorList {
+    ctor public MutableColorList(androidx.collection.MutableLongList list);
+    ctor public MutableColorList(optional int initialCapacity);
+    method public inline void add(@IntRange(from=0L) int index, long element);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongList elements);
+    method public inline boolean addAll(androidx.collection.MutableLongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.LongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.MutableLongList elements);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongList asColorList();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline void ensureCapacity(int capacity);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline int getCapacity();
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.MutableLongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline operator void minusAssign(androidx.collection.LongList elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongList elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongList elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongList elements);
+    method public inline long removeAt(@IntRange(from=0L) int index);
+    method public inline void removeRange(@IntRange(from=0L) int start, @IntRange(from=0L) int end);
+    method public inline boolean retainAll(androidx.collection.LongList elements);
+    method public inline boolean retainAll(androidx.collection.MutableLongList elements);
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator long set(@IntRange(from=0L) int index, long element);
+    method public inline void trim(optional int minCapacity);
+    property public final inline int capacity;
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.MutableLongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  @kotlin.jvm.JvmInline public final value class MutableColorSet {
+    ctor public MutableColorSet(androidx.collection.MutableLongSet set);
+    ctor public MutableColorSet(optional int initialCapacity);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongSet elements);
+    method public inline boolean addAll(androidx.collection.MutableLongSet elements);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongSet asColorSet();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.MutableLongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline operator void minusAssign(androidx.collection.LongSet elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongSet elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongSet elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongSet elements);
+    method @IntRange(from=0L) public inline int trim();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.MutableLongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
   @androidx.compose.runtime.Immutable public final class OffsetEffect extends androidx.compose.ui.graphics.RenderEffect {
     ctor public OffsetEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, long offset);
     method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
diff --git a/compose/ui/ui-graphics/api/restricted_current.txt b/compose/ui/ui-graphics/api/restricted_current.txt
index c8d7b1d..9143cca 100644
--- a/compose/ui/ui-graphics/api/restricted_current.txt
+++ b/compose/ui/ui-graphics/api/restricted_current.txt
@@ -421,6 +421,60 @@
     method @ColorInt @androidx.compose.runtime.Stable public static int toArgb(long);
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorList {
+    ctor public ColorList(androidx.collection.LongList list);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.LongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline boolean none();
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.LongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorListKt {
+    method public static inline androidx.collection.LongList colorListOf();
+    method public static inline androidx.collection.LongList colorListOf(long element1);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongList emptyColorList();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2, long element3);
+  }
+
   @kotlin.jvm.JvmInline public final value class ColorMatrix {
     ctor public ColorMatrix(optional float[] values);
     method public void convertRgbToYuv();
@@ -448,6 +502,40 @@
     method public operator long invoke();
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorSet {
+    ctor public ColorSet(androidx.collection.LongSet set);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.LongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline boolean none();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.LongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorSetKt {
+    method public static inline androidx.collection.LongSet colorSetOf();
+    method public static inline androidx.collection.LongSet colorSetOf(long element1);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongSet emptyColorSet();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2, long element3);
+  }
+
   public final class DegreesKt {
     method @kotlin.PublishedApi internal static float degrees(float radians);
   }
@@ -567,6 +655,113 @@
     method public static boolean isIdentity(float[]);
   }
 
+  @kotlin.jvm.JvmInline public final value class MutableColorList {
+    ctor public MutableColorList(androidx.collection.MutableLongList list);
+    ctor public MutableColorList(optional int initialCapacity);
+    method public inline void add(@IntRange(from=0L) int index, long element);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongList elements);
+    method public inline boolean addAll(androidx.collection.MutableLongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.LongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.MutableLongList elements);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongList asColorList();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline void ensureCapacity(int capacity);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline int getCapacity();
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.MutableLongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline operator void minusAssign(androidx.collection.LongList elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongList elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongList elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongList elements);
+    method public inline long removeAt(@IntRange(from=0L) int index);
+    method public inline void removeRange(@IntRange(from=0L) int start, @IntRange(from=0L) int end);
+    method public inline boolean retainAll(androidx.collection.LongList elements);
+    method public inline boolean retainAll(androidx.collection.MutableLongList elements);
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator long set(@IntRange(from=0L) int index, long element);
+    method public inline void trim(optional int minCapacity);
+    property public final inline int capacity;
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.MutableLongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  @kotlin.jvm.JvmInline public final value class MutableColorSet {
+    ctor public MutableColorSet(androidx.collection.MutableLongSet set);
+    ctor public MutableColorSet(optional int initialCapacity);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongSet elements);
+    method public inline boolean addAll(androidx.collection.MutableLongSet elements);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongSet asColorSet();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.MutableLongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline operator void minusAssign(androidx.collection.LongSet elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongSet elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongSet elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongSet elements);
+    method @IntRange(from=0L) public inline int trim();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.MutableLongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
   @androidx.compose.runtime.Immutable public final class OffsetEffect extends androidx.compose.ui.graphics.RenderEffect {
     ctor public OffsetEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, long offset);
     method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
diff --git a/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt b/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt
index 3ad349a..875a295 100644
--- a/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt
+++ b/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt
@@ -39,7 +39,7 @@
 
     @Test
     fun xml_compose() {
-        benchmarkRule.benchmarkFirstCompose({ XmlVectorTestCase() })
+        benchmarkRule.benchmarkFirstCompose { XmlVectorTestCase() }
     }
 
     @Test
@@ -59,7 +59,7 @@
 
     @Test
     fun programmatic_compose() {
-        benchmarkRule.benchmarkFirstCompose({ ProgrammaticVectorTestCase() })
+        benchmarkRule.benchmarkFirstCompose { ProgrammaticVectorTestCase() }
     }
 
     @Test
diff --git a/compose/ui/ui-graphics/build.gradle b/compose/ui/ui-graphics/build.gradle
index 897e9f3..941a222 100644
--- a/compose/ui/ui-graphics/build.gradle
+++ b/compose/ui/ui-graphics/build.gradle
@@ -41,6 +41,7 @@
                 api(project(":compose:ui:ui-unit"))
                 implementation(project(":compose:runtime:runtime"))
                 implementation(project(":compose:ui:ui-util"))
+                implementation(project(":collection:collection"))
             }
         }
 
@@ -104,10 +105,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt
new file mode 100644
index 0000000..fe5aae1
--- /dev/null
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt
@@ -0,0 +1,938 @@
+/*
+ * Copyright 2023 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.
+ */
+
+@file:Suppress(
+    "RedundantVisibilityModifier",
+    "KotlinRedundantDiagnosticSuppress",
+    "KotlinConstantConditions",
+    "PropertyName",
+    "ConstPropertyName",
+    "PrivatePropertyName",
+    "NOTHING_TO_INLINE",
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
+)
+
+package androidx.compose.ui.graphics
+
+import androidx.collection.LongList
+import androidx.collection.MutableLongList
+import androidx.collection.emptyLongList
+import androidx.collection.mutableLongListOf
+import androidx.compose.ui.graphics.Color
+import kotlin.contracts.ExperimentalContracts
+import kotlin.contracts.contract
+import kotlin.jvm.JvmInline
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
+//
+// This file was generated from a template:
+//   collection/collection/template/ValueClassList.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the list.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+/**
+ * [ColorList] is a [List]-like collection for [Color] values. It allows retrieving
+ * the elements without boxing. [ColorList] is always backed by a [MutableColorList],
+ * its [MutableList]-like subclass.
+ *
+ * This implementation is not thread-safe: if multiple threads access this
+ * container concurrently, and one or more threads modify the structure of
+ * the list (insertion or removal for instance), the calling code must provide
+ * the appropriate synchronization. It is also not safe to mutate during reentrancy --
+ * in the middle of a [forEach], for example. However, concurrent reads are safe.
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class ColorList(val list: LongList) {
+    /**
+     * The number of elements in the [ColorList].
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int get() = list.size
+
+    /**
+     * Returns the last valid index in the [ColorList]. This can be `-1` when the list is empty.
+     */
+    @get:androidx.annotation.IntRange(from = -1)
+    public inline val lastIndex: Int get() = list.lastIndex
+
+    /**
+     * Returns an [IntRange] of the valid indices for this [ColorList].
+     */
+    public inline val indices: IntRange get() = list.indices
+
+    /**
+     * Returns `true` if the collection has no elements in it.
+     */
+    public inline fun none(): Boolean = list.none()
+
+    /**
+     * Returns `true` if there's at least one element in the collection.
+     */
+    public inline fun any(): Boolean = list.any()
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate].
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate] while
+     * iterating in the reverse order.
+     */
+    public inline fun reversedAny(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.reversedAny { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] contains [element] or `false` otherwise.
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        list.contains(element.value.toLong())
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: ColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: MutableColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns the number of elements in this list.
+     */
+    public inline fun count(): Int = list.count()
+
+    /**
+     * Counts the number of elements matching [predicate].
+     * @return The number of elements in this list for which [predicate] returns true.
+     */
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the first element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun first(): Color = Color(list.first().toULong())
+
+    /**
+     * Returns the first element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfFirst
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.first { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes current accumulator value and an element, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> fold(initial: R, operation: (acc: R, element: Color) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.fold(initial) { acc, element ->
+            operation(acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     */
+    public inline fun <R> foldIndexed(
+        initial: R,
+        operation: (index: Int, acc: R, element: Color) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldIndexed(initial) { index, acc, element ->
+            operation(index, acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes an element and the current accumulator value, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> foldRight(initial: R, operation: (element: Color, acc: R) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.foldRight(initial) { element, acc ->
+            operation(Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     */
+    public inline fun <R> foldRightIndexed(
+        initial: R,
+        operation: (index: Int, element: Color, acc: R) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldRightIndexed(initial) { index, element, acc ->
+            operation(index, Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList], in order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] in reverse order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEachReversed(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversed { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in reverse
+     * order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachReversedIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversedIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline operator fun get(
+        @androidx.annotation.IntRange(from = 0) index: Int
+    ): Color = Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline fun elementAt(@androidx.annotation.IntRange(from = 0) index: Int): Color =
+        Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or [defaultValue] if [index] is out of bounds
+     * of the collection.
+     * @param index The index of the element whose value should be returned
+     * @param defaultValue A lambda to call with [index] as a parameter to return a value at
+     * an index not in the list.
+     */
+    public inline fun elementAtOrElse(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        defaultValue: (index: Int) -> Color
+    ): Color =
+        Color(list.elementAtOrElse(index) { defaultValue(it).value.toLong() }.toULong())
+
+    /**
+     * Returns the index of [element] in the [ColorList] or `-1` if [element] is not there.
+     */
+    public inline fun indexOf(element: Color): Int =
+        list.indexOf(element.value.toLong())
+
+    /**
+     * Returns the index if the first element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfFirst(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfFirst { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the index if the last element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfLast(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfLast { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] has no elements in it or `false` otherwise.
+     */
+    public inline fun isEmpty(): Boolean = list.isEmpty()
+
+    /**
+     * Returns `true` if there are elements in the [ColorList] or `false` if it is empty.
+     */
+    public inline fun isNotEmpty(): Boolean = list.isNotEmpty()
+
+    /**
+     * Returns the last element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun last(): Color = Color(list.last().toULong())
+
+    /**
+     * Returns the last element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfLast
+     */
+    public inline fun last(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.last { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Returns the index of the last element in the [ColorList] that is the same as
+     * [element] or `-1` if no elements match.
+     */
+    public inline fun lastIndexOf(element: Color): Int =
+        list.lastIndexOf(element.value.toLong())
+
+    /**
+     * Returns a String representation of the list, surrounded by "[]" and each element
+     * separated by ", ".
+     */
+    override fun toString(): String {
+        if (isEmpty()) {
+            return "[]"
+        }
+        return buildString {
+            append('[')
+            forEachIndexed { index: Int, element: Color ->
+                if (index != 0) {
+                    append(',').append(' ')
+                }
+                append(element)
+            }
+            append(']')
+        }
+    }
+}
+
+/**
+ * [MutableColorList] is a [MutableList]-like collection for [Color] values.
+ * It allows storing and retrieving the elements without boxing. Immutable
+ * access is available through its base class [ColorList], which has a [List]-like
+ * interface.
+ *
+ * This implementation is not thread-safe: if multiple threads access this
+ * container concurrently, and one or more threads modify the structure of
+ * the list (insertion or removal for instance), the calling code must provide
+ * the appropriate synchronization. It is also not safe to mutate during reentrancy --
+ * in the middle of a [forEach], for example. However, concurrent reads are safe.
+ *
+ * @constructor Creates a [MutableColorList] with a [capacity] of `initialCapacity`.
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class MutableColorList(val list: MutableLongList) {
+    public constructor(initialCapacity: Int = 16) : this(MutableLongList(initialCapacity))
+
+    /**
+     * The number of elements in the [ColorList].
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int get() = list.size
+
+    /**
+     * Returns the last valid index in the [ColorList]. This can be `-1` when the list is empty.
+     */
+    @get:androidx.annotation.IntRange(from = -1)
+    public inline val lastIndex: Int get() = list.lastIndex
+
+    /**
+     * Returns an [IntRange] of the valid indices for this [ColorList].
+     */
+    public inline val indices: IntRange get() = list.indices
+
+    /**
+     * Returns `true` if the collection has no elements in it.
+     */
+    public inline fun none(): Boolean = list.none()
+
+    /**
+     * Returns `true` if there's at least one element in the collection.
+     */
+    public inline fun any(): Boolean = list.any()
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate].
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate] while
+     * iterating in the reverse order.
+     */
+    public inline fun reversedAny(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.reversedAny { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] contains [element] or `false` otherwise.
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        list.contains(element.value.toLong())
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: ColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: MutableColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns the number of elements in this list.
+     */
+    public inline fun count(): Int = list.count()
+
+    /**
+     * Counts the number of elements matching [predicate].
+     * @return The number of elements in this list for which [predicate] returns true.
+     */
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the first element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun first(): Color = Color(list.first().toULong())
+
+    /**
+     * Returns the first element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfFirst
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.first { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes current accumulator value and an element, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> fold(initial: R, operation: (acc: R, element: Color) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.fold(initial) { acc, element ->
+            operation(acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     */
+    public inline fun <R> foldIndexed(
+        initial: R,
+        operation: (index: Int, acc: R, element: Color) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldIndexed(initial) { index, acc, element ->
+            operation(index, acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes an element and the current accumulator value, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> foldRight(initial: R, operation: (element: Color, acc: R) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.foldRight(initial) { element, acc ->
+            operation(Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     */
+    public inline fun <R> foldRightIndexed(
+        initial: R,
+        operation: (index: Int, element: Color, acc: R) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldRightIndexed(initial) { index, element, acc ->
+            operation(index, Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList], in order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] in reverse order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEachReversed(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversed { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in reverse
+     * order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachReversedIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversedIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline operator fun get(
+        @androidx.annotation.IntRange(from = 0) index: Int
+    ): Color = Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline fun elementAt(@androidx.annotation.IntRange(from = 0) index: Int): Color =
+        Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or [defaultValue] if [index] is out of bounds
+     * of the collection.
+     * @param index The index of the element whose value should be returned
+     * @param defaultValue A lambda to call with [index] as a parameter to return a value at
+     * an index not in the list.
+     */
+    public inline fun elementAtOrElse(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        defaultValue: (index: Int) -> Color
+    ): Color =
+        Color(list.elementAtOrElse(index) { defaultValue(it).value.toLong() }.toULong())
+
+    /**
+     * Returns the index of [element] in the [ColorList] or `-1` if [element] is not there.
+     */
+    public inline fun indexOf(element: Color): Int =
+        list.indexOf(element.value.toLong())
+
+    /**
+     * Returns the index if the first element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfFirst(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfFirst { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the index if the last element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfLast(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfLast { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] has no elements in it or `false` otherwise.
+     */
+    public inline fun isEmpty(): Boolean = list.isEmpty()
+
+    /**
+     * Returns `true` if there are elements in the [ColorList] or `false` if it is empty.
+     */
+    public inline fun isNotEmpty(): Boolean = list.isNotEmpty()
+
+    /**
+     * Returns the last element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun last(): Color = Color(list.last().toULong())
+
+    /**
+     * Returns the last element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfLast
+     */
+    public inline fun last(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.last { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Returns the index of the last element in the [ColorList] that is the same as
+     * [element] or `-1` if no elements match.
+     */
+    public inline fun lastIndexOf(element: Color): Int =
+        list.lastIndexOf(element.value.toLong())
+
+    /**
+     * Returns a String representation of the list, surrounded by "[]" and each element
+     * separated by ", ".
+     */
+    override fun toString(): String = asColorList().toString()
+
+    /**
+     * Returns a read-only interface to the list.
+     */
+    public inline fun asColorList(): ColorList = ColorList(list)
+
+    /**
+     * Returns the total number of elements that can be held before the [MutableColorList] must
+     * grow.
+     *
+     * @see ensureCapacity
+     */
+    public inline val capacity: Int
+        get() = list.capacity
+
+    /**
+     * Adds [element] to the [MutableColorList] and returns `true`.
+     */
+    public inline fun add(element: Color): Boolean =
+        list.add(element.value.toLong())
+
+    /**
+     * Adds [element] to the [MutableColorList] at the given [index], shifting over any
+     * elements at [index] and after, if any.
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [size], inclusive
+     */
+    public inline fun add(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        element: Color
+    ) = list.add(index, element.value.toLong())
+
+    /**
+     * Adds all [elements] to the [MutableColorList] at the given [index], shifting over any
+     * elements at [index] and after, if any.
+     * @return `true` if the [MutableColorList] was changed or `false` if [elements] was empty
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [size], inclusive
+     */
+    public inline fun addAll(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        elements: ColorList
+    ): Boolean = list.addAll(index, elements.list)
+
+    /**
+     * Adds all [elements] to the [MutableColorList] at the given [index], shifting over any
+     * elements at [index] and after, if any.
+     * @return `true` if the [MutableColorList] was changed or `false` if [elements] was empty
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [size], inclusive
+     */
+    public inline fun addAll(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        elements: MutableColorList
+    ): Boolean = list.addAll(index, elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList] and returns `true` if the
+     * [MutableColorList] was changed or `false` if [elements] was empty.
+     */
+    public inline fun addAll(elements: ColorList): Boolean = list.addAll(elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList].
+     */
+    public inline operator fun plusAssign(elements: ColorList) =
+        list.plusAssign(elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList] and returns `true` if the
+     * [MutableColorList] was changed or `false` if [elements] was empty.
+     */
+    public inline fun addAll(elements: MutableColorList): Boolean = list.addAll(elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList].
+     */
+    public inline operator fun plusAssign(elements: MutableColorList) =
+        list.plusAssign(elements.list)
+
+    /**
+     * Removes all elements in the [MutableColorList]. The storage isn't released.
+     * @see trim
+     */
+    public inline fun clear() = list.clear()
+
+    /**
+     * Reduces the internal storage. If [capacity] is greater than [minCapacity] and [size], the
+     * internal storage is reduced to the maximum of [size] and [minCapacity].
+     * @see ensureCapacity
+     */
+    public inline fun trim(minCapacity: Int = size) = list.trim(minCapacity)
+
+    /**
+     * Ensures that there is enough space to store [capacity] elements in the [MutableColorList].
+     * @see trim
+     */
+    public inline fun ensureCapacity(capacity: Int) = list.ensureCapacity(capacity)
+
+    /**
+     * [add] [element] to the [MutableColorList].
+     */
+    public inline operator fun plusAssign(element: Color) =
+        list.plusAssign(element.value.toLong())
+
+    /**
+     * [remove] [element] from the [MutableColorList]
+     */
+    public inline operator fun minusAssign(element: Color) =
+        list.minusAssign(element.value.toLong())
+
+    /**
+     * Removes [element] from the [MutableColorList]. If [element] was in the [MutableColorList]
+     * and was removed, `true` will be returned, or `false` will be returned if the element
+     * was not found.
+     */
+    public inline fun remove(element: Color): Boolean =
+        list.remove(element.value.toLong())
+
+    /**
+     * Removes all [elements] from the [MutableColorList] and returns `true` if anything was removed.
+     */
+    public inline fun removeAll(elements: ColorList): Boolean =
+        list.removeAll(elements.list)
+
+    /**
+     * Removes all [elements] from the [MutableColorList].
+     */
+    public inline operator fun minusAssign(elements: ColorList) =
+        list.minusAssign(elements.list)
+
+    /**
+     * Removes all [elements] from the [MutableColorList] and returns `true` if anything was removed.
+     */
+    public inline fun removeAll(elements: MutableColorList): Boolean =
+        list.removeAll(elements.list)
+
+    /**
+     * Removes all [elements] from the [MutableColorList].
+     */
+    public inline operator fun minusAssign(elements: MutableColorList) =
+        list.minusAssign(elements.list)
+
+    /**
+     * Removes the element at the given [index] and returns it.
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [lastIndex], inclusive
+     */
+    public inline fun removeAt(@androidx.annotation.IntRange(from = 0) index: Int): Color =
+        Color(list.removeAt(index).toULong())
+
+    /**
+     * Removes items from index [start] (inclusive) to [end] (exclusive).
+     * @throws IndexOutOfBoundsException if [start] or [end] isn't between 0 and [size], inclusive
+     * @throws IllegalArgumentException if [start] is greater than [end]
+     */
+    public inline fun removeRange(
+        @androidx.annotation.IntRange(from = 0) start: Int,
+        @androidx.annotation.IntRange(from = 0) end: Int
+    ) = list.removeRange(start, end)
+
+    /**
+     * Keeps only [elements] in the [MutableColorList] and removes all other values.
+     * @return `true` if the [MutableColorList] has changed.
+     */
+    public inline fun retainAll(elements: ColorList): Boolean =
+        list.retainAll(elements.list)
+
+    /**
+     * Keeps only [elements] in the [MutableColorList] and removes all other values.
+     * @return `true` if the [MutableColorList] has changed.
+     */
+    public inline fun retainAll(elements: MutableColorList): Boolean =
+        list.retainAll(elements.list)
+
+    /**
+     * Sets the value at [index] to [element].
+     * @return the previous value set at [index]
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [lastIndex], inclusive
+     */
+    public inline operator fun set(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        element: Color
+    ): Color = Color(list.set(index, element.value.toLong()).toULong())
+}
+
+/**
+ * @return a read-only [ColorList] with nothing in it.
+ */
+public inline fun emptyColorList(): ColorList = ColorList(emptyLongList())
+
+/**
+ * @return a read-only [ColorList] with nothing in it.
+ */
+public inline fun colorListOf(): ColorList = ColorList(emptyLongList())
+
+/**
+ * @return a new read-only [ColorList] with [element1] as the only item in the list.
+ */
+public inline fun colorListOf(element1: Color): ColorList =
+    ColorList(mutableLongListOf(element1.value.toLong()))
+
+/**
+ * @return a new read-only [ColorList] with 2 elements, [element1] and [element2], in order.
+ */
+public inline fun colorListOf(element1: Color, element2: Color): ColorList =
+    ColorList(
+        mutableLongListOf(
+            element1.value.toLong(),
+            element2.value.toLong()
+        )
+    )
+
+/**
+ * @return a new read-only [ColorList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public inline fun colorListOf(
+        element1: Color,
+        element2: Color,
+        element3: Color
+): ColorList = ColorList(
+    mutableLongListOf(
+        element1.value.toLong(),
+        element2.value.toLong(),
+        element3.value.toLong()
+    )
+)
+
+/**
+ * @return a new empty [MutableColorList] with the default capacity.
+ */
+public inline fun mutableColorListOf(): MutableColorList =
+    MutableColorList(MutableLongList())
+
+/**
+ * @return a new [MutableColorList] with [element1] as the only item in the list.
+ */
+public inline fun mutableColorListOf(element1: Color): MutableColorList =
+    MutableColorList(mutableLongListOf(element1.value.toLong()))
+
+/**
+ * @return a new [MutableColorList] with 2 elements, [element1] and [element2], in order.
+ */
+public inline fun mutableColorListOf(
+        element1: Color,
+        element2: Color
+    ): MutableColorList = MutableColorList(
+        mutableLongListOf(
+            element1.value.toLong(),
+            element2.value.toLong()
+        )
+    )
+
+/**
+ * @return a new [MutableColorList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public inline fun mutableColorListOf(
+        element1: Color,
+        element2: Color,
+        element3: Color
+): MutableColorList = MutableColorList(
+    mutableLongListOf(
+        element1.value.toLong(),
+        element2.value.toLong(),
+        element3.value.toLong()
+    )
+)
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt
new file mode 100644
index 0000000..eb6a001
--- /dev/null
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt
@@ -0,0 +1,545 @@
+/*
+ * Copyright 2023 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.
+ */
+
+@file:Suppress(
+    "RedundantVisibilityModifier",
+    "KotlinRedundantDiagnosticSuppress",
+    "KotlinConstantConditions",
+    "PropertyName",
+    "ConstPropertyName",
+    "PrivatePropertyName",
+    "NOTHING_TO_INLINE",
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
+)
+
+package androidx.compose.ui.graphics
+
+import androidx.collection.LongSet
+import androidx.collection.MutableLongSet
+import androidx.collection.emptyLongSet
+import androidx.collection.mutableLongSetOf
+import androidx.compose.ui.graphics.Color
+import kotlin.contracts.ExperimentalContracts
+import kotlin.contracts.contract
+import kotlin.jvm.JvmInline
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
+//
+// This file was generated from a template:
+//   collection/collection/template/ValueClassSet.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the set.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+/**
+ * Returns an empty, read-only [ColorSet].
+ */
+public inline fun emptyColorSet(): ColorSet = ColorSet(emptyLongSet())
+
+/**
+ * Returns an empty, read-only [ColorSet].
+ */
+public inline fun colorSetOf(): ColorSet = ColorSet(emptyLongSet())
+
+/**
+ * Returns a new read-only [ColorSet] with only [element1] in it.
+ */
+public inline fun colorSetOf(element1: Color): ColorSet =
+    ColorSet(mutableLongSetOf(element1.value.toLong()))
+
+/**
+ * Returns a new read-only [ColorSet] with only [element1] and [element2] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun colorSetOf(
+    element1: Color,
+    element2: Color
+): ColorSet =
+    ColorSet(
+        mutableLongSetOf(
+            element1.value.toLong(),
+            element2.value.toLong(),
+        )
+    )
+
+/**
+ * Returns a new read-only [ColorSet] with only [element1], [element2], and [element3] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun colorSetOf(
+    element1: Color,
+    element2: Color,
+    element3: Color
+): ColorSet = ColorSet(
+    mutableLongSetOf(
+        element1.value.toLong(),
+        element2.value.toLong(),
+        element3.value.toLong(),
+    )
+)
+
+/**
+ * Returns a new [MutableColorSet].
+ */
+public fun mutableColorSetOf(): MutableColorSet = MutableColorSet(
+    MutableLongSet()
+)
+
+/**
+ * Returns a new [MutableColorSet] with only [element1] in it.
+ */
+public fun mutableColorSetOf(element1: Color): MutableColorSet =
+    MutableColorSet(mutableLongSetOf(element1.value.toLong()))
+
+/**
+ * Returns a new [MutableColorSet] with only [element1] and [element2] in it.
+ */
+public fun mutableColorSetOf(
+    element1: Color,
+    element2: Color
+): MutableColorSet =
+    MutableColorSet(
+        mutableLongSetOf(
+            element1.value.toLong(),
+            element2.value.toLong(),
+        )
+    )
+
+/**
+ * Returns a new [MutableColorSet] with only [element1], [element2], and [element3] in it.
+ */
+public fun mutableColorSetOf(
+    element1: Color,
+    element2: Color,
+    element3: Color
+): MutableColorSet =
+    MutableColorSet(
+        mutableLongSetOf(
+            element1.value.toLong(),
+            element2.value.toLong(),
+            element3.value.toLong(),
+        )
+    )
+
+/**
+ * [ColorSet] is a container with a [Set]-like interface designed to avoid
+ * allocations, including boxing.
+ *
+ * This implementation makes no guarantee as to the order of the elements,
+ * nor does it make guarantees that the order remains constant over time.
+ *
+ * Though [ColorSet] offers a read-only interface, it is always backed
+ * by a [MutableColorSet]. Read operations alone are thread-safe. However,
+ * any mutations done through the backing [MutableColorSet] while reading
+ * on another thread are not safe and the developer must protect the set
+ * from such changes during read operations.
+ *
+ * @see [MutableColorSet]
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class ColorSet(val set: LongSet) {
+    /**
+     * Returns the number of elements that can be stored in this set
+     * without requiring internal storage reallocation.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val capacity: Int
+        get() = set.capacity
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int
+        get() = set.size
+
+    /**
+     * Returns `true` if this set has at least one element.
+     */
+    public inline fun any(): Boolean = set.any()
+
+    /**
+     * Returns `true` if this set has no elements.
+     */
+    public inline fun none(): Boolean = set.none()
+
+    /**
+     * Indicates whether this set is empty.
+     */
+    public inline fun isEmpty(): Boolean = set.isEmpty()
+
+    /**
+     * Returns `true` if this set is not empty.
+     */
+    public inline fun isNotEmpty(): Boolean = set.isNotEmpty()
+
+    /**
+     * Returns the first element in the collection.
+     * @throws NoSuchElementException if the collection is empty
+     */
+    public inline fun first(): Color = Color(set.first().toULong())
+
+    /**
+     * Returns the first element in the collection for which [predicate] returns `true`.
+     *
+     * **Note** There is no mechanism for both determining if there is an element that matches
+     * [predicate] _and_ returning it if it exists. Developers should use [forEach] to achieve
+     * this behavior.
+     *
+     * @param predicate Called on elements of the set, returning `true` for an element that matches
+     * or `false` if it doesn't
+     * @return An element in the set for which [predicate] returns `true`.
+     * @throws NoSuchElementException if [predicate] returns `false` for all elements or the
+     * collection is empty.
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color =
+        Color(set.first { predicate(Color(it.toULong())) }.toULong())
+
+    /**
+     * Iterates over every element stored in this set by invoking
+     * the specified [block] lambda.
+     * @param block called with each element in the set
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        set.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if all elements match the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns return `true` for
+     * all elements.
+     */
+    public inline fun all(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.all { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if at least one element matches the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns `true` for any
+     * elements.
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(): Int = set.count()
+
+    /**
+     * Returns the number of elements matching the given [predicate].
+     * @param predicate Called for all elements in the set to count the number for which it returns
+     * `true`.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return set.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the specified [element] is present in this set, `false`
+     * otherwise.
+     * @param element The element to look for in this set
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        set.contains(element.value.toLong())
+
+    /**
+     * Returns a string representation of this set. The set is denoted in the
+     * string by the `{}`. Each element is separated by `, `.
+     */
+    public override fun toString(): String {
+        if (isEmpty()) {
+            return "[]"
+        }
+
+        val s = StringBuilder().append('[')
+        var index = 0
+        forEach { element ->
+            if (index++ != 0) {
+                s.append(',').append(' ')
+            }
+            s.append(element)
+        }
+        return s.append(']').toString()
+    }
+}
+
+/**
+ * [MutableColorSet] is a container with a [MutableSet]-like interface based on a flat
+ * hash table implementation. The underlying implementation is designed to avoid
+ * all allocations on insertion, removal, retrieval, and iteration. Allocations
+ * may still happen on insertion when the underlying storage needs to grow to
+ * accommodate newly added elements to the set.
+ *
+ * This implementation makes no guarantee as to the order of the elements stored,
+ * nor does it make guarantees that the order remains constant over time.
+ *
+ * This implementation is not thread-safe: if multiple threads access this
+ * container concurrently, and one or more threads modify the structure of
+ * the set (insertion or removal for instance), the calling code must provide
+ * the appropriate synchronization. Concurrent reads are however safe.
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class MutableColorSet(val set: MutableLongSet) {
+    /**
+     * Returns the number of elements that can be stored in this set
+     * without requiring internal storage reallocation.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val capacity: Int
+        get() = set.capacity
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int
+        get() = set.size
+
+    /**
+     * Returns `true` if this set has at least one element.
+     */
+    public inline fun any(): Boolean = set.any()
+
+    /**
+     * Returns `true` if this set has no elements.
+     */
+    public inline fun none(): Boolean = set.none()
+
+    /**
+     * Indicates whether this set is empty.
+     */
+    public inline fun isEmpty(): Boolean = set.isEmpty()
+
+    /**
+     * Returns `true` if this set is not empty.
+     */
+    public inline fun isNotEmpty(): Boolean = set.isNotEmpty()
+
+    /**
+     * Returns the first element in the collection.
+     * @throws NoSuchElementException if the collection is empty
+     */
+    public inline fun first(): Color = Color(set.first().toULong())
+
+    /**
+     * Returns the first element in the collection for which [predicate] returns `true`.
+     *
+     * **Note** There is no mechanism for both determining if there is an element that matches
+     * [predicate] _and_ returning it if it exists. Developers should use [forEach] to achieve
+     * this behavior.
+     *
+     * @param predicate Called on elements of the set, returning `true` for an element that matches
+     * or `false` if it doesn't
+     * @return An element in the set for which [predicate] returns `true`.
+     * @throws NoSuchElementException if [predicate] returns `false` for all elements or the
+     * collection is empty.
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color =
+        Color(set.first { predicate(Color(it.toULong())) }.toULong())
+
+    /**
+     * Iterates over every element stored in this set by invoking
+     * the specified [block] lambda.
+     * @param block called with each element in the set
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        set.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if all elements match the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns return `true` for
+     * all elements.
+     */
+    public inline fun all(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.all { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if at least one element matches the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns `true` for any
+     * elements.
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(): Int = set.count()
+
+    /**
+     * Returns the number of elements matching the given [predicate].
+     * @param predicate Called for all elements in the set to count the number for which it returns
+     * `true`.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return set.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the specified [element] is present in this set, `false`
+     * otherwise.
+     * @param element The element to look for in this set
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        set.contains(element.value.toLong())
+
+    /**
+     * Returns a string representation of this set. The set is denoted in the
+     * string by the `{}`. Each element is separated by `, `.
+     */
+    public override fun toString(): String = asColorSet().toString()
+
+    /**
+     * Creates a new [MutableColorSet]
+     * @param initialCapacity The initial desired capacity for this container.
+     * The container will honor this value by guaranteeing its internal structures
+     * can hold that many elements without requiring any allocations. The initial
+     * capacity can be set to 0.
+     */
+    public constructor(initialCapacity: Int = 6) : this(MutableLongSet(initialCapacity))
+
+    /**
+     * Returns a read-only interface to the set.
+     */
+    public inline fun asColorSet(): ColorSet = ColorSet(set)
+
+    /**
+     * Adds the specified element to the set.
+     * @param element The element to add to the set.
+     * @return `true` if the element has been added or `false` if the element is already
+     * contained within the set.
+     */
+    public inline fun add(element: Color): Boolean = set.add(element.value.toLong())
+
+    /**
+     * Adds the specified element to the set.
+     * @param element The element to add to the set.
+     */
+    public inline operator fun plusAssign(element: Color) =
+        set.plusAssign(element.value.toLong())
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     * @return `true` if any of the specified elements were added to the collection,
+     * `false` if the collection was not modified.
+     */
+    public inline fun addAll(elements: ColorSet): Boolean = set.addAll(elements.set)
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     * @return `true` if any of the specified elements were added to the collection,
+     * `false` if the collection was not modified.
+     */
+    public inline fun addAll(elements: MutableColorSet): Boolean = set.addAll(elements.set)
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     */
+    public inline operator fun plusAssign(elements: ColorSet) =
+        set.plusAssign(elements.set)
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     */
+    public inline operator fun plusAssign(elements: MutableColorSet) =
+        set.plusAssign(elements.set)
+
+    /**
+     * Removes the specified [element] from the set.
+     * @param element The element to remove from the set.
+     * @return `true` if the [element] was present in the set, or `false` if it wasn't
+     * present before removal.
+     */
+    public inline fun remove(element: Color): Boolean = set.remove(element.value.toLong())
+
+    /**
+     * Removes the specified [element] from the set if it is present.
+     * @param element The element to remove from the set.
+     */
+    public inline operator fun minusAssign(element: Color) =
+        set.minusAssign(element.value.toLong())
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     * @return `true` if the set was changed or `false` if none of the elements were present.
+     */
+    public inline fun removeAll(elements: ColorSet): Boolean = set.removeAll(elements.set)
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     * @return `true` if the set was changed or `false` if none of the elements were present.
+     */
+    public inline fun removeAll(elements: MutableColorSet): Boolean =
+        set.removeAll(elements.set)
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     */
+    public inline operator fun minusAssign(elements: ColorSet) =
+        set.minusAssign(elements.set)
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     */
+    public inline operator fun minusAssign(elements: MutableColorSet) =
+        set.minusAssign(elements.set)
+
+    /**
+     * Removes all elements from this set.
+     */
+    public inline fun clear() = set.clear()
+
+    /**
+     * Trims this [MutableColorSet]'s storage so it is sized appropriately
+     * to hold the current elements.
+     *
+     * Returns the number of empty elements removed from this set's storage.
+     * Returns 0 if no trimming is necessary or possible.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun trim(): Int = set.trim()
+}
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt
index 2ffde87..5d66cde 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt
@@ -15,7 +15,7 @@
  */
 
 @file:Suppress("NOTHING_TO_INLINE")
-@file:OptIn(ExperimentalUnsignedTypes::class)
+@file:OptIn(ExperimentalUnsignedTypes::class, ExperimentalUnsignedTypes::class)
 
 package androidx.compose.ui.graphics.vector
 
@@ -26,573 +26,563 @@
  * The original C++ implementations are licensed under Apache 2.0
  */
 
-internal class FloatResult(var value: Float = Float.NaN, var isValid: Boolean = false)
+// These two functions are technically identical to Float.fromBits()
+// and Double.fromBits(). However, since they are declared as top-
+// level functions, they do not incur the cost of a static fetch
+// through the Companion class. Using these top-level functions,
+// the generated arm64 code after dex2oat is exactly a single `fmov`
+internal expect fun floatFromBits(bits: Int): Float
 
-internal class FastFloatParser {
-    companion object {
-        private const val FloatMinExponent = -10
-        private const val FloatMaxExponent = 10
-        private const val FloatSmallestExponent = -325
-        private const val FloatMaxExponentNumber = 1024
+internal expect fun doubleFromBits(bits: Long): Double
 
-        private val PowersOfTen = floatArrayOf(
-            1e0f, 1e1f, 1e2f, 1e3f, 1e4f, 1e5f, 1e6f, 1e7f, 1e8f, 1e9f, 1e10f
-        )
+private const val FloatMinExponent = -10
+private const val FloatMaxExponent = 10
+private const val FloatSmallestExponent = -325
+private const val FloatMaxExponentNumber = 1024
 
-        /**
-         * Parses the next float in the char sequence [s], starting at offset [start], until at most
-         * the end offset [end]. The results are written in [result]. When a result is valid, the
-         * `result.isValid` is set to `true` and `result.value` contains the parsed float value. If
-         * parsing is unsuccessful, `result.isValid` is false and `result.value` is set to
-         * [Float.NaN].
-         *
-         * This function returns the offset inside the char sequence right after parsing stopped,
-         * successfully or unsuccessfully.
-         */
-        fun nextFloat(s: String, start: Int, end: Int, result: FloatResult): Int {
-            result.value = Float.NaN
-            result.isValid = false
+// internal to bypass synthetic accessor
+@Suppress("MemberVisibilityCanBePrivate")
+internal val PowersOfTen = floatArrayOf(
+    1e0f, 1e1f, 1e2f, 1e3f, 1e4f, 1e5f, 1e6f, 1e7f, 1e8f, 1e9f, 1e10f
+)
 
-            if (start == end) return start
+internal inline val Long.index get() = (this ushr 32).toInt()
+internal inline val Long.floatValue get() = floatFromBits((this and 0xFFFFFFFFL).toInt())
 
-            var index = start
-            var c = s[index]
+/**
+ * Parses the next float in the char sequence [s], starting at offset [start], until at most
+ * the end offset [end]. The result is returned as [Long] with the most significant 32 bits
+ * encoding the index in the string [s] where parsing stop, and with the least significant
+ * 32 bits encoding the parsed float value. To access these values easily, use [Long.index]
+ * and [Long.floatValue]. When parsing is unsuccessful, [Long.floatValue] returns NaN.
+ */
+internal fun nextFloat(s: String, start: Int, end: Int): Long {
+    // NOTE: It would be nice to encode invalid parsing with a NaN marker
+    // (for instance 0x7FD55555), but doing so prevents us from defining
+    // the value as a const val which causes static field accesses
+    if (start == end) return pack(start, Float.NaN)
 
-            // Check for leading negative sign
-            val isNegative = c == '-'
-            if (isNegative) {
-                index++
-                if (index == end) return index
+    var index = start
+    var c = s[index]
 
-                // Safe access, we just checked the bounds
-                c = s[index]
-                if (!c.isDigit && c != '.') return index
-            }
+    // Check for leading negative sign
+    val isNegative = c == '-'
+    if (isNegative) {
+        index++
+        if (index == end) return pack(index, Float.NaN)
 
-            // TODO: Should we use an unsigned long here?
-            var significand = 0L
-            val significandStartIndex = index
+        // Safe access, we just checked the bounds
+        c = s[index]
+        if (!c.isDigit && c != '.') return pack(index, Float.NaN)
+    }
 
-            // Parse the integer part
-            while (index != end && c.isDigit) {
-                significand = 10L * significand + (c.code - '0'.code).toLong()
-                c = charAt(s, ++index)
-            }
+    // TODO: Should we use an unsigned long here?
+    var significand = 0L
+    val significandStartIndex = index
 
-            val significandEndIndex = index
-            var digitCount = index - significandStartIndex
+    // Parse the integer part
+    val dataLength = s.length
+    while (index != end && c.isDigit) {
+        significand = 10L * significand + (c.code - '0'.code).toLong()
+        index++
+        c = if (index < dataLength) s[index] else '\u0000'
+    }
 
-            var exponent = 0
-            var exponentStartIndex = index
-            var exponentEndIndex = index
+    val significandEndIndex = index
+    var digitCount = index - significandStartIndex
 
-            // Parse the fraction
-            if (index != end && c == '.') {
-                index++
-                exponentStartIndex = index
+    var exponent = 0
+    var exponentStartIndex = index
+    var exponentEndIndex = index
 
-                while (end - index >= 4) {
-                    val digits = parseFourDigits(s, index)
-                    if (digits < 0) break
-                    significand = 10_000L * significand + digits.toLong()
-                    index += 4
-                }
+    // Parse the fraction
+    if (index != end && c == '.') {
+        index++
+        exponentStartIndex = index
 
-                c = charAt(s, index)
-                while (index != end && c.isDigit) {
-                    significand = 10L * significand + (c.code - '0'.code).toLong()
-                    c = charAt(s, ++index)
-                }
-
-                exponent = exponentStartIndex - index
-                exponentEndIndex = index
-                digitCount -= exponent
-            }
-
-            if (digitCount == 0) return index
-
-            // Parse the exponent part of the float, if present
-            var exponentNumber = 0
-            if ((c.code or 0x20) == 'e'.code) {
-                c = charAt(s, ++index)
-
-                val isExponentNegative = c == '-'
-                if (isExponentNegative || c == '+') {
-                    index++
-                }
-
-                c = s[index]
-                while (index != end && c.isDigit) {
-                    if (exponentNumber < FloatMaxExponentNumber) {
-                        exponentNumber = 10 * exponentNumber + (c.code - '0'.code)
-                    }
-                    c = charAt(s, ++index)
-                }
-
-                if (isExponentNegative) exponentNumber = -exponentNumber
-                exponent += exponentNumber
-            }
-
-            // TODO: check for f/F suffix?
-
-            var tooManyDigits = false
-
-            // If we have too many digits we need to retry differently and avoid overflows
-            if (digitCount > 19) {
-                var retryIndex = significandStartIndex
-                c = s[retryIndex]
-
-                // First check for the case where the number is 0.0000000xxxx (could be all zeroes)
-                while (index != end && (c == '0' || c == '.')) {
-                    if (c == '0') digitCount--
-                    c = charAt(s, ++retryIndex)
-                }
-
-                if (digitCount > 19) {
-                    tooManyDigits = true
-
-                    significand = 0
-                    retryIndex = significandStartIndex
-                    c = s[retryIndex]
-
-                    while (
-                        retryIndex != significandEndIndex &&
-                        significand.toULong() < 1000000000000000000UL
-                    ) {
-                        significand = 10L * significand + (c.code - '0'.code).toLong()
-                        c = charAt(s, ++retryIndex)
-                    }
-
-                    if (significand.toULong() >= 1000000000000000000UL) {
-                        exponent = significandEndIndex - retryIndex + exponentNumber
-                    } else {
-                        retryIndex = exponentStartIndex
-                        c = s[retryIndex]
-
-                        while (
-                            retryIndex != exponentEndIndex &&
-                            significand.toULong() < 1000000000000000000UL
-                        ) {
-                            significand = 10L * significand + (c.code - '0'.code).toLong()
-                            c = charAt(s, ++retryIndex)
-                        }
-                        exponent = exponentStartIndex - retryIndex + exponentNumber
-                    }
-                }
-            }
-
-            // Fast path
-            if (exponent in FloatMinExponent..FloatMaxExponent &&
-                !tooManyDigits &&
-                significand.toULong() <= 1UL shl 24
-            ) {
-                var f = significand.toFloat()
-                if (exponent < 0) {
-                    f /= PowersOfTen[-exponent]
-                } else {
-                    f *= PowersOfTen[exponent]
-                }
-
-                result.isValid = true
-                result.value = if (isNegative) -f else f
-
-                return index
-            }
-
-            // Now we need to take the slow path, please refer to the original C++ code for a
-            // complete description of the algorithm
-
-            if (significand == 0L) {
-                result.isValid = true
-                result.value = if (isNegative) -0.0f else 0.0f
-                return index
-            }
-
-            if (exponent !in -126..127) {
-                try {
-                    result.value = s.substring(start, index).toFloat()
-                } finally {
-                    result.isValid = true
-                }
-                return index
-            }
-
-            val significandFactor = Mantissa64[exponent - FloatSmallestExponent].toLong()
-            var lz = significand.countLeadingZeroBits()
-            significand = significand shl lz
-
-            val upper = fullMultiplicationHighBits(significand, significandFactor)
-            val upperBit = (upper ushr 63).toInt()
-            var mantissa = upper ushr (upperBit + 9)
-            lz += 1 xor upperBit
-
-            if (upper and 0x1ff == 0x1ffL || upper and 0x1ff == 0L && mantissa and 3L == 1L) {
-                try {
-                    result.value = s.substring(start, index).toFloat()
-                } finally {
-                    result.isValid = true
-                }
-                return index
-            }
-
-            mantissa += 1
-            mantissa = mantissa ushr 1
-
-            if (mantissa >= 1L shl 53) {
-                mantissa = 1L shl 52
-                lz--
-            }
-
-            mantissa = mantissa and (1L shl 52).inv()
-
-            val adjustedExponent = (((152170L + 65536L) * exponent) shr 16) + 1024 + 63
-            val realExponent = adjustedExponent - lz
-            if (realExponent < 1 || realExponent > 2046) {
-                try {
-                    result.value = s.substring(start, index).toFloat()
-                } finally {
-                    result.isValid = true
-                }
-                return index
-            }
-
-            mantissa = mantissa or (realExponent shl 52)
-            mantissa = mantissa or if (isNegative) 1L shl 63 else 0L
-
-            result.isValid = true
-            result.value = Double.fromBits(mantissa).toFloat()
-
-            return index
+        while (end - index >= 4) {
+            val digits = parseFourDigits(s, index)
+            if (digits < 0) break
+            significand = 10_000L * significand + digits.toLong()
+            index += 4
         }
 
-        private val Mantissa64 = ulongArrayOf(
-            0xa5ced43b7e3e9188UL, 0xcf42894a5dce35eaUL,
-            0x818995ce7aa0e1b2UL, 0xa1ebfb4219491a1fUL,
-            0xca66fa129f9b60a6UL, 0xfd00b897478238d0UL,
-            0x9e20735e8cb16382UL, 0xc5a890362fddbc62UL,
-            0xf712b443bbd52b7bUL, 0x9a6bb0aa55653b2dUL,
-            0xc1069cd4eabe89f8UL, 0xf148440a256e2c76UL,
-            0x96cd2a865764dbcaUL, 0xbc807527ed3e12bcUL,
-            0xeba09271e88d976bUL, 0x93445b8731587ea3UL,
-            0xb8157268fdae9e4cUL, 0xe61acf033d1a45dfUL,
-            0x8fd0c16206306babUL, 0xb3c4f1ba87bc8696UL,
-            0xe0b62e2929aba83cUL, 0x8c71dcd9ba0b4925UL,
-            0xaf8e5410288e1b6fUL, 0xdb71e91432b1a24aUL,
-            0x892731ac9faf056eUL, 0xab70fe17c79ac6caUL,
-            0xd64d3d9db981787dUL, 0x85f0468293f0eb4eUL,
-            0xa76c582338ed2621UL, 0xd1476e2c07286faaUL,
-            0x82cca4db847945caUL, 0xa37fce126597973cUL,
-            0xcc5fc196fefd7d0cUL, 0xff77b1fcbebcdc4fUL,
-            0x9faacf3df73609b1UL, 0xc795830d75038c1dUL,
-            0xf97ae3d0d2446f25UL, 0x9becce62836ac577UL,
-            0xc2e801fb244576d5UL, 0xf3a20279ed56d48aUL,
-            0x9845418c345644d6UL, 0xbe5691ef416bd60cUL,
-            0xedec366b11c6cb8fUL, 0x94b3a202eb1c3f39UL,
-            0xb9e08a83a5e34f07UL, 0xe858ad248f5c22c9UL,
-            0x91376c36d99995beUL, 0xb58547448ffffb2dUL,
-            0xe2e69915b3fff9f9UL, 0x8dd01fad907ffc3bUL,
-            0xb1442798f49ffb4aUL, 0xdd95317f31c7fa1dUL,
-            0x8a7d3eef7f1cfc52UL, 0xad1c8eab5ee43b66UL,
-            0xd863b256369d4a40UL, 0x873e4f75e2224e68UL,
-            0xa90de3535aaae202UL, 0xd3515c2831559a83UL,
-            0x8412d9991ed58091UL, 0xa5178fff668ae0b6UL,
-            0xce5d73ff402d98e3UL, 0x80fa687f881c7f8eUL,
-            0xa139029f6a239f72UL, 0xc987434744ac874eUL,
-            0xfbe9141915d7a922UL, 0x9d71ac8fada6c9b5UL,
-            0xc4ce17b399107c22UL, 0xf6019da07f549b2bUL,
-            0x99c102844f94e0fbUL, 0xc0314325637a1939UL,
-            0xf03d93eebc589f88UL, 0x96267c7535b763b5UL,
-            0xbbb01b9283253ca2UL, 0xea9c227723ee8bcbUL,
-            0x92a1958a7675175fUL, 0xb749faed14125d36UL,
-            0xe51c79a85916f484UL, 0x8f31cc0937ae58d2UL,
-            0xb2fe3f0b8599ef07UL, 0xdfbdcece67006ac9UL,
-            0x8bd6a141006042bdUL, 0xaecc49914078536dUL,
-            0xda7f5bf590966848UL, 0x888f99797a5e012dUL,
-            0xaab37fd7d8f58178UL, 0xd5605fcdcf32e1d6UL,
-            0x855c3be0a17fcd26UL, 0xa6b34ad8c9dfc06fUL,
-            0xd0601d8efc57b08bUL, 0x823c12795db6ce57UL,
-            0xa2cb1717b52481edUL, 0xcb7ddcdda26da268UL,
-            0xfe5d54150b090b02UL, 0x9efa548d26e5a6e1UL,
-            0xc6b8e9b0709f109aUL, 0xf867241c8cc6d4c0UL,
-            0x9b407691d7fc44f8UL, 0xc21094364dfb5636UL,
-            0xf294b943e17a2bc4UL, 0x979cf3ca6cec5b5aUL,
-            0xbd8430bd08277231UL, 0xece53cec4a314ebdUL,
-            0x940f4613ae5ed136UL, 0xb913179899f68584UL,
-            0xe757dd7ec07426e5UL, 0x9096ea6f3848984fUL,
-            0xb4bca50b065abe63UL, 0xe1ebce4dc7f16dfbUL,
-            0x8d3360f09cf6e4bdUL, 0xb080392cc4349decUL,
-            0xdca04777f541c567UL, 0x89e42caaf9491b60UL,
-            0xac5d37d5b79b6239UL, 0xd77485cb25823ac7UL,
-            0x86a8d39ef77164bcUL, 0xa8530886b54dbdebUL,
-            0xd267caa862a12d66UL, 0x8380dea93da4bc60UL,
-            0xa46116538d0deb78UL, 0xcd795be870516656UL,
-            0x806bd9714632dff6UL, 0xa086cfcd97bf97f3UL,
-            0xc8a883c0fdaf7df0UL, 0xfad2a4b13d1b5d6cUL,
-            0x9cc3a6eec6311a63UL, 0xc3f490aa77bd60fcUL,
-            0xf4f1b4d515acb93bUL, 0x991711052d8bf3c5UL,
-            0xbf5cd54678eef0b6UL, 0xef340a98172aace4UL,
-            0x9580869f0e7aac0eUL, 0xbae0a846d2195712UL,
-            0xe998d258869facd7UL, 0x91ff83775423cc06UL,
-            0xb67f6455292cbf08UL, 0xe41f3d6a7377eecaUL,
-            0x8e938662882af53eUL, 0xb23867fb2a35b28dUL,
-            0xdec681f9f4c31f31UL, 0x8b3c113c38f9f37eUL,
-            0xae0b158b4738705eUL, 0xd98ddaee19068c76UL,
-            0x87f8a8d4cfa417c9UL, 0xa9f6d30a038d1dbcUL,
-            0xd47487cc8470652bUL, 0x84c8d4dfd2c63f3bUL,
-            0xa5fb0a17c777cf09UL, 0xcf79cc9db955c2ccUL,
-            0x81ac1fe293d599bfUL, 0xa21727db38cb002fUL,
-            0xca9cf1d206fdc03bUL, 0xfd442e4688bd304aUL,
-            0x9e4a9cec15763e2eUL, 0xc5dd44271ad3cdbaUL,
-            0xf7549530e188c128UL, 0x9a94dd3e8cf578b9UL,
-            0xc13a148e3032d6e7UL, 0xf18899b1bc3f8ca1UL,
-            0x96f5600f15a7b7e5UL, 0xbcb2b812db11a5deUL,
-            0xebdf661791d60f56UL, 0x936b9fcebb25c995UL,
-            0xb84687c269ef3bfbUL, 0xe65829b3046b0afaUL,
-            0x8ff71a0fe2c2e6dcUL, 0xb3f4e093db73a093UL,
-            0xe0f218b8d25088b8UL, 0x8c974f7383725573UL,
-            0xafbd2350644eeacfUL, 0xdbac6c247d62a583UL,
-            0x894bc396ce5da772UL, 0xab9eb47c81f5114fUL,
-            0xd686619ba27255a2UL, 0x8613fd0145877585UL,
-            0xa798fc4196e952e7UL, 0xd17f3b51fca3a7a0UL,
-            0x82ef85133de648c4UL, 0xa3ab66580d5fdaf5UL,
-            0xcc963fee10b7d1b3UL, 0xffbbcfe994e5c61fUL,
-            0x9fd561f1fd0f9bd3UL, 0xc7caba6e7c5382c8UL,
-            0xf9bd690a1b68637bUL, 0x9c1661a651213e2dUL,
-            0xc31bfa0fe5698db8UL, 0xf3e2f893dec3f126UL,
-            0x986ddb5c6b3a76b7UL, 0xbe89523386091465UL,
-            0xee2ba6c0678b597fUL, 0x94db483840b717efUL,
-            0xba121a4650e4ddebUL, 0xe896a0d7e51e1566UL,
-            0x915e2486ef32cd60UL, 0xb5b5ada8aaff80b8UL,
-            0xe3231912d5bf60e6UL, 0x8df5efabc5979c8fUL,
-            0xb1736b96b6fd83b3UL, 0xddd0467c64bce4a0UL,
-            0x8aa22c0dbef60ee4UL, 0xad4ab7112eb3929dUL,
-            0xd89d64d57a607744UL, 0x87625f056c7c4a8bUL,
-            0xa93af6c6c79b5d2dUL, 0xd389b47879823479UL,
-            0x843610cb4bf160cbUL, 0xa54394fe1eedb8feUL,
-            0xce947a3da6a9273eUL, 0x811ccc668829b887UL,
-            0xa163ff802a3426a8UL, 0xc9bcff6034c13052UL,
-            0xfc2c3f3841f17c67UL, 0x9d9ba7832936edc0UL,
-            0xc5029163f384a931UL, 0xf64335bcf065d37dUL,
-            0x99ea0196163fa42eUL, 0xc06481fb9bcf8d39UL,
-            0xf07da27a82c37088UL, 0x964e858c91ba2655UL,
-            0xbbe226efb628afeaUL, 0xeadab0aba3b2dbe5UL,
-            0x92c8ae6b464fc96fUL, 0xb77ada0617e3bbcbUL,
-            0xe55990879ddcaabdUL, 0x8f57fa54c2a9eab6UL,
-            0xb32df8e9f3546564UL, 0xdff9772470297ebdUL,
-            0x8bfbea76c619ef36UL, 0xaefae51477a06b03UL,
-            0xdab99e59958885c4UL, 0x88b402f7fd75539bUL,
-            0xaae103b5fcd2a881UL, 0xd59944a37c0752a2UL,
-            0x857fcae62d8493a5UL, 0xa6dfbd9fb8e5b88eUL,
-            0xd097ad07a71f26b2UL, 0x825ecc24c873782fUL,
-            0xa2f67f2dfa90563bUL, 0xcbb41ef979346bcaUL,
-            0xfea126b7d78186bcUL, 0x9f24b832e6b0f436UL,
-            0xc6ede63fa05d3143UL, 0xf8a95fcf88747d94UL,
-            0x9b69dbe1b548ce7cUL, 0xc24452da229b021bUL,
-            0xf2d56790ab41c2a2UL, 0x97c560ba6b0919a5UL,
-            0xbdb6b8e905cb600fUL, 0xed246723473e3813UL,
-            0x9436c0760c86e30bUL, 0xb94470938fa89bceUL,
-            0xe7958cb87392c2c2UL, 0x90bd77f3483bb9b9UL,
-            0xb4ecd5f01a4aa828UL, 0xe2280b6c20dd5232UL,
-            0x8d590723948a535fUL, 0xb0af48ec79ace837UL,
-            0xdcdb1b2798182244UL, 0x8a08f0f8bf0f156bUL,
-            0xac8b2d36eed2dac5UL, 0xd7adf884aa879177UL,
-            0x86ccbb52ea94baeaUL, 0xa87fea27a539e9a5UL,
-            0xd29fe4b18e88640eUL, 0x83a3eeeef9153e89UL,
-            0xa48ceaaab75a8e2bUL, 0xcdb02555653131b6UL,
-            0x808e17555f3ebf11UL, 0xa0b19d2ab70e6ed6UL,
-            0xc8de047564d20a8bUL, 0xfb158592be068d2eUL,
-            0x9ced737bb6c4183dUL, 0xc428d05aa4751e4cUL,
-            0xf53304714d9265dfUL, 0x993fe2c6d07b7fabUL,
-            0xbf8fdb78849a5f96UL, 0xef73d256a5c0f77cUL,
-            0x95a8637627989aadUL, 0xbb127c53b17ec159UL,
-            0xe9d71b689dde71afUL, 0x9226712162ab070dUL,
-            0xb6b00d69bb55c8d1UL, 0xe45c10c42a2b3b05UL,
-            0x8eb98a7a9a5b04e3UL, 0xb267ed1940f1c61cUL,
-            0xdf01e85f912e37a3UL, 0x8b61313bbabce2c6UL,
-            0xae397d8aa96c1b77UL, 0xd9c7dced53c72255UL,
-            0x881cea14545c7575UL, 0xaa242499697392d2UL,
-            0xd4ad2dbfc3d07787UL, 0x84ec3c97da624ab4UL,
-            0xa6274bbdd0fadd61UL, 0xcfb11ead453994baUL,
-            0x81ceb32c4b43fcf4UL, 0xa2425ff75e14fc31UL,
-            0xcad2f7f5359a3b3eUL, 0xfd87b5f28300ca0dUL,
-            0x9e74d1b791e07e48UL, 0xc612062576589ddaUL,
-            0xf79687aed3eec551UL, 0x9abe14cd44753b52UL,
-            0xc16d9a0095928a27UL, 0xf1c90080baf72cb1UL,
-            0x971da05074da7beeUL, 0xbce5086492111aeaUL,
-            0xec1e4a7db69561a5UL, 0x9392ee8e921d5d07UL,
-            0xb877aa3236a4b449UL, 0xe69594bec44de15bUL,
-            0x901d7cf73ab0acd9UL, 0xb424dc35095cd80fUL,
-            0xe12e13424bb40e13UL, 0x8cbccc096f5088cbUL,
-            0xafebff0bcb24aafeUL, 0xdbe6fecebdedd5beUL,
-            0x89705f4136b4a597UL, 0xabcc77118461cefcUL,
-            0xd6bf94d5e57a42bcUL, 0x8637bd05af6c69b5UL,
-            0xa7c5ac471b478423UL, 0xd1b71758e219652bUL,
-            0x83126e978d4fdf3bUL, 0xa3d70a3d70a3d70aUL,
-            0xccccccccccccccccUL, 0x8000000000000000UL,
-            0xa000000000000000UL, 0xc800000000000000UL,
-            0xfa00000000000000UL, 0x9c40000000000000UL,
-            0xc350000000000000UL, 0xf424000000000000UL,
-            0x9896800000000000UL, 0xbebc200000000000UL,
-            0xee6b280000000000UL, 0x9502f90000000000UL,
-            0xba43b74000000000UL, 0xe8d4a51000000000UL,
-            0x9184e72a00000000UL, 0xb5e620f480000000UL,
-            0xe35fa931a0000000UL, 0x8e1bc9bf04000000UL,
-            0xb1a2bc2ec5000000UL, 0xde0b6b3a76400000UL,
-            0x8ac7230489e80000UL, 0xad78ebc5ac620000UL,
-            0xd8d726b7177a8000UL, 0x878678326eac9000UL,
-            0xa968163f0a57b400UL, 0xd3c21bcecceda100UL,
-            0x84595161401484a0UL, 0xa56fa5b99019a5c8UL,
-            0xcecb8f27f4200f3aUL, 0x813f3978f8940984UL,
-            0xa18f07d736b90be5UL, 0xc9f2c9cd04674edeUL,
-            0xfc6f7c4045812296UL, 0x9dc5ada82b70b59dUL,
-            0xc5371912364ce305UL, 0xf684df56c3e01bc6UL,
-            0x9a130b963a6c115cUL, 0xc097ce7bc90715b3UL,
-            0xf0bdc21abb48db20UL, 0x96769950b50d88f4UL,
-            0xbc143fa4e250eb31UL, 0xeb194f8e1ae525fdUL,
-            0x92efd1b8d0cf37beUL, 0xb7abc627050305adUL,
-            0xe596b7b0c643c719UL, 0x8f7e32ce7bea5c6fUL,
-            0xb35dbf821ae4f38bUL, 0xe0352f62a19e306eUL,
-            0x8c213d9da502de45UL, 0xaf298d050e4395d6UL,
-            0xdaf3f04651d47b4cUL, 0x88d8762bf324cd0fUL,
-            0xab0e93b6efee0053UL, 0xd5d238a4abe98068UL,
-            0x85a36366eb71f041UL, 0xa70c3c40a64e6c51UL,
-            0xd0cf4b50cfe20765UL, 0x82818f1281ed449fUL,
-            0xa321f2d7226895c7UL, 0xcbea6f8ceb02bb39UL,
-            0xfee50b7025c36a08UL, 0x9f4f2726179a2245UL,
-            0xc722f0ef9d80aad6UL, 0xf8ebad2b84e0d58bUL,
-            0x9b934c3b330c8577UL, 0xc2781f49ffcfa6d5UL,
-            0xf316271c7fc3908aUL, 0x97edd871cfda3a56UL,
-            0xbde94e8e43d0c8ecUL, 0xed63a231d4c4fb27UL,
-            0x945e455f24fb1cf8UL, 0xb975d6b6ee39e436UL,
-            0xe7d34c64a9c85d44UL, 0x90e40fbeea1d3a4aUL,
-            0xb51d13aea4a488ddUL, 0xe264589a4dcdab14UL,
-            0x8d7eb76070a08aecUL, 0xb0de65388cc8ada8UL,
-            0xdd15fe86affad912UL, 0x8a2dbf142dfcc7abUL,
-            0xacb92ed9397bf996UL, 0xd7e77a8f87daf7fbUL,
-            0x86f0ac99b4e8dafdUL, 0xa8acd7c0222311bcUL,
-            0xd2d80db02aabd62bUL, 0x83c7088e1aab65dbUL,
-            0xa4b8cab1a1563f52UL, 0xcde6fd5e09abcf26UL,
-            0x80b05e5ac60b6178UL, 0xa0dc75f1778e39d6UL,
-            0xc913936dd571c84cUL, 0xfb5878494ace3a5fUL,
-            0x9d174b2dcec0e47bUL, 0xc45d1df942711d9aUL,
-            0xf5746577930d6500UL, 0x9968bf6abbe85f20UL,
-            0xbfc2ef456ae276e8UL, 0xefb3ab16c59b14a2UL,
-            0x95d04aee3b80ece5UL, 0xbb445da9ca61281fUL,
-            0xea1575143cf97226UL, 0x924d692ca61be758UL,
-            0xb6e0c377cfa2e12eUL, 0xe498f455c38b997aUL,
-            0x8edf98b59a373fecUL, 0xb2977ee300c50fe7UL,
-            0xdf3d5e9bc0f653e1UL, 0x8b865b215899f46cUL,
-            0xae67f1e9aec07187UL, 0xda01ee641a708de9UL,
-            0x884134fe908658b2UL, 0xaa51823e34a7eedeUL,
-            0xd4e5e2cdc1d1ea96UL, 0x850fadc09923329eUL,
-            0xa6539930bf6bff45UL, 0xcfe87f7cef46ff16UL,
-            0x81f14fae158c5f6eUL, 0xa26da3999aef7749UL,
-            0xcb090c8001ab551cUL, 0xfdcb4fa002162a63UL,
-            0x9e9f11c4014dda7eUL, 0xc646d63501a1511dUL,
-            0xf7d88bc24209a565UL, 0x9ae757596946075fUL,
-            0xc1a12d2fc3978937UL, 0xf209787bb47d6b84UL,
-            0x9745eb4d50ce6332UL, 0xbd176620a501fbffUL,
-            0xec5d3fa8ce427affUL, 0x93ba47c980e98cdfUL,
-            0xb8a8d9bbe123f017UL, 0xe6d3102ad96cec1dUL,
-            0x9043ea1ac7e41392UL, 0xb454e4a179dd1877UL,
-            0xe16a1dc9d8545e94UL, 0x8ce2529e2734bb1dUL,
-            0xb01ae745b101e9e4UL, 0xdc21a1171d42645dUL,
-            0x899504ae72497ebaUL, 0xabfa45da0edbde69UL,
-            0xd6f8d7509292d603UL, 0x865b86925b9bc5c2UL,
-            0xa7f26836f282b732UL, 0xd1ef0244af2364ffUL,
-            0x8335616aed761f1fUL, 0xa402b9c5a8d3a6e7UL,
-            0xcd036837130890a1UL, 0x802221226be55a64UL,
-            0xa02aa96b06deb0fdUL, 0xc83553c5c8965d3dUL,
-            0xfa42a8b73abbf48cUL, 0x9c69a97284b578d7UL,
-            0xc38413cf25e2d70dUL, 0xf46518c2ef5b8cd1UL,
-            0x98bf2f79d5993802UL, 0xbeeefb584aff8603UL,
-            0xeeaaba2e5dbf6784UL, 0x952ab45cfa97a0b2UL,
-            0xba756174393d88dfUL, 0xe912b9d1478ceb17UL,
-            0x91abb422ccb812eeUL, 0xb616a12b7fe617aaUL,
-            0xe39c49765fdf9d94UL, 0x8e41ade9fbebc27dUL,
-            0xb1d219647ae6b31cUL, 0xde469fbd99a05fe3UL,
-            0x8aec23d680043beeUL, 0xada72ccc20054ae9UL,
-            0xd910f7ff28069da4UL, 0x87aa9aff79042286UL,
-            0xa99541bf57452b28UL, 0xd3fa922f2d1675f2UL,
-            0x847c9b5d7c2e09b7UL, 0xa59bc234db398c25UL,
-            0xcf02b2c21207ef2eUL, 0x8161afb94b44f57dUL,
-            0xa1ba1ba79e1632dcUL, 0xca28a291859bbf93UL,
-            0xfcb2cb35e702af78UL, 0x9defbf01b061adabUL,
-            0xc56baec21c7a1916UL, 0xf6c69a72a3989f5bUL,
-            0x9a3c2087a63f6399UL, 0xc0cb28a98fcf3c7fUL,
-            0xf0fdf2d3f3c30b9fUL, 0x969eb7c47859e743UL,
-            0xbc4665b596706114UL, 0xeb57ff22fc0c7959UL,
-            0x9316ff75dd87cbd8UL, 0xb7dcbf5354e9beceUL,
-            0xe5d3ef282a242e81UL, 0x8fa475791a569d10UL,
-            0xb38d92d760ec4455UL, 0xe070f78d3927556aUL,
-            0x8c469ab843b89562UL, 0xaf58416654a6babbUL,
-            0xdb2e51bfe9d0696aUL, 0x88fcf317f22241e2UL,
-            0xab3c2fddeeaad25aUL, 0xd60b3bd56a5586f1UL,
-            0x85c7056562757456UL, 0xa738c6bebb12d16cUL,
-            0xd106f86e69d785c7UL, 0x82a45b450226b39cUL,
-            0xa34d721642b06084UL, 0xcc20ce9bd35c78a5UL,
-            0xff290242c83396ceUL, 0x9f79a169bd203e41UL,
-            0xc75809c42c684dd1UL, 0xf92e0c3537826145UL,
-            0x9bbcc7a142b17ccbUL, 0xc2abf989935ddbfeUL,
-            0xf356f7ebf83552feUL, 0x98165af37b2153deUL,
-            0xbe1bf1b059e9a8d6UL, 0xeda2ee1c7064130cUL,
-            0x9485d4d1c63e8be7UL, 0xb9a74a0637ce2ee1UL,
-            0xe8111c87c5c1ba99UL, 0x910ab1d4db9914a0UL,
-            0xb54d5e4a127f59c8UL, 0xe2a0b5dc971f303aUL,
-            0x8da471a9de737e24UL, 0xb10d8e1456105dadUL,
-            0xdd50f1996b947518UL, 0x8a5296ffe33cc92fUL,
-            0xace73cbfdc0bfb7bUL, 0xd8210befd30efa5aUL,
-            0x8714a775e3e95c78UL, 0xa8d9d1535ce3b396UL,
-            0xd31045a8341ca07cUL, 0x83ea2b892091e44dUL,
-            0xa4e4b66b68b65d60UL, 0xce1de40642e3f4b9UL,
-            0x80d2ae83e9ce78f3UL, 0xa1075a24e4421730UL,
-            0xc94930ae1d529cfcUL, 0xfb9b7cd9a4a7443cUL,
-            0x9d412e0806e88aa5UL, 0xc491798a08a2ad4eUL,
-            0xf5b5d7ec8acb58a2UL, 0x9991a6f3d6bf1765UL,
-            0xbff610b0cc6edd3fUL, 0xeff394dcff8a948eUL,
-            0x95f83d0a1fb69cd9UL, 0xbb764c4ca7a4440fUL,
-            0xea53df5fd18d5513UL, 0x92746b9be2f8552cUL,
-            0xb7118682dbb66a77UL, 0xe4d5e82392a40515UL,
-            0x8f05b1163ba6832dUL, 0xb2c71d5bca9023f8UL,
-            0xdf78e4b2bd342cf6UL, 0x8bab8eefb6409c1aUL,
-            0xae9672aba3d0c320UL, 0xda3c0f568cc4f3e8UL,
-            0x8865899617fb1871UL, 0xaa7eebfb9df9de8dUL,
-            0xd51ea6fa85785631UL, 0x8533285c936b35deUL,
-            0xa67ff273b8460356UL, 0xd01fef10a657842cUL,
-            0x8213f56a67f6b29bUL, 0xa298f2c501f45f42UL,
-            0xcb3f2f7642717713UL, 0xfe0efb53d30dd4d7UL,
-            0x9ec95d1463e8a506UL, 0xc67bb4597ce2ce48UL,
-            0xf81aa16fdc1b81daUL, 0x9b10a4e5e9913128UL,
-            0xc1d4ce1f63f57d72UL, 0xf24a01a73cf2dccfUL,
-            0x976e41088617ca01UL, 0xbd49d14aa79dbc82UL,
-            0xec9c459d51852ba2UL, 0x93e1ab8252f33b45UL,
-            0xb8da1662e7b00a17UL, 0xe7109bfba19c0c9dUL,
-            0x906a617d450187e2UL, 0xb484f9dc9641e9daUL,
-            0xe1a63853bbd26451UL, 0x8d07e33455637eb2UL,
-            0xb049dc016abc5e5fUL, 0xdc5c5301c56b75f7UL,
-            0x89b9b3e11b6329baUL, 0xac2820d9623bf429UL,
-            0xd732290fbacaf133UL, 0x867f59a9d4bed6c0UL,
-            0xa81f301449ee8c70UL, 0xd226fc195c6a2f8cUL,
-            0x83585d8fd9c25db7UL, 0xa42e74f3d032f525UL,
-            0xcd3a1230c43fb26fUL, 0x80444b5e7aa7cf85UL,
-            0xa0555e361951c366UL, 0xc86ab5c39fa63440UL,
-            0xfa856334878fc150UL, 0x9c935e00d4b9d8d2UL,
-            0xc3b8358109e84f07UL, 0xf4a642e14c6262c8UL,
-            0x98e7e9cccfbd7dbdUL, 0xbf21e44003acdd2cUL,
-            0xeeea5d5004981478UL, 0x95527a5202df0ccbUL,
-            0xbaa718e68396cffdUL, 0xe950df20247c83fdUL,
-            0x91d28b7416cdd27eUL, 0xb6472e511c81471dUL,
-            0xe3d8f9e563a198e5UL, 0x8e679c2f5e44ff8fUL
-        )
+        c = if (index < dataLength) s[index] else '\u0000'
+        while (index != end && c.isDigit) {
+            significand = 10L * significand + (c.code - '0'.code).toLong()
+            index++
+            c = if (index < dataLength) s[index] else '\u0000'
+        }
+
+        exponent = exponentStartIndex - index
+        exponentEndIndex = index
+        digitCount -= exponent
     }
+
+    if (digitCount == 0) return pack(index, Float.NaN)
+
+    // Parse the exponent part of the float, if present
+    var exponentNumber = 0
+    if ((c.code or 0x20) == 'e'.code) {
+        index++
+        c = if (index < dataLength) s[index] else '\u0000'
+
+        val isExponentNegative = c == '-'
+        if (isExponentNegative || c == '+') {
+            index++
+        }
+
+        c = s[index]
+        while (index != end && c.isDigit) {
+            if (exponentNumber < FloatMaxExponentNumber) {
+                exponentNumber = 10 * exponentNumber + (c.code - '0'.code)
+            }
+            index++
+            c = if (index < dataLength) s[index] else '\u0000'
+        }
+
+        if (isExponentNegative) exponentNumber = -exponentNumber
+        exponent += exponentNumber
+    }
+
+    // TODO: check for f/F suffix?
+
+    var tooManyDigits = false
+
+    // If we have too many digits we need to retry differently and avoid overflows
+    if (digitCount > 19) {
+        var retryIndex = significandStartIndex
+        c = s[retryIndex]
+
+        // First check for the case where the number is 0.0000000xxxx (could be all zeroes)
+        while (index != end && (c == '0' || c == '.')) {
+            if (c == '0') digitCount--
+            retryIndex++
+            c = if (retryIndex < dataLength) s[retryIndex] else '\u0000'
+        }
+
+        if (digitCount > 19) {
+            tooManyDigits = true
+
+            significand = 0
+            retryIndex = significandStartIndex
+            c = s[retryIndex]
+
+            while (
+                retryIndex != significandEndIndex &&
+                significand.toULong() < 1000000000000000000UL
+            ) {
+                significand = 10L * significand + (c.code - '0'.code).toLong()
+                retryIndex++
+                c = if (retryIndex < dataLength) s[retryIndex] else '\u0000'
+            }
+
+            if (significand.toULong() >= 1000000000000000000UL) {
+                exponent = significandEndIndex - retryIndex + exponentNumber
+            } else {
+                retryIndex = exponentStartIndex
+                c = s[retryIndex]
+
+                while (
+                    retryIndex != exponentEndIndex &&
+                    significand.toULong() < 1000000000000000000UL
+                ) {
+                    significand = 10L * significand + (c.code - '0'.code).toLong()
+                    retryIndex++
+                    c = if (retryIndex < dataLength) s[retryIndex] else '\u0000'
+                }
+                exponent = exponentStartIndex - retryIndex + exponentNumber
+            }
+        }
+    }
+
+    // Fast path
+    if (exponent in FloatMinExponent..FloatMaxExponent &&
+        !tooManyDigits &&
+        significand.toULong() <= 1UL shl 24
+    ) {
+        var f = significand.toFloat()
+        if (exponent < 0) {
+            f /= PowersOfTen[-exponent]
+        } else {
+            f *= PowersOfTen[exponent]
+        }
+
+        return pack(index, if (isNegative) -f else f)
+    }
+
+    // Now we need to take the slow path, please refer to the original C++ code for a
+    // complete description of the algorithm
+
+    if (significand == 0L) {
+        return pack(index, if (isNegative) -0.0f else 0.0f)
+    }
+
+    if (exponent !in -126..127) {
+        return pack(index, s.substring(start, index).toFloat())
+    }
+
+    val significandFactor = Mantissa64[exponent - FloatSmallestExponent].toLong()
+    var lz = significand.countLeadingZeroBits()
+    significand = significand shl lz
+
+    val upper = fullMultiplicationHighBits(significand, significandFactor)
+    val upperBit = (upper ushr 63).toInt()
+    var mantissa = upper ushr (upperBit + 9)
+    lz += 1 xor upperBit
+
+    if (upper and 0x1ff == 0x1ffL || upper and 0x1ff == 0L && mantissa and 3L == 1L) {
+        return pack(index, s.substring(start, index).toFloat())
+    }
+
+    mantissa += 1
+    mantissa = mantissa ushr 1
+
+    if (mantissa >= 1L shl 53) {
+        mantissa = 1L shl 52
+        lz--
+    }
+
+    mantissa = mantissa and (1L shl 52).inv()
+
+    val adjustedExponent = (((152170L + 65536L) * exponent) shr 16) + 1024 + 63
+    val realExponent = adjustedExponent - lz
+    if (realExponent < 1 || realExponent > 2046) {
+        return pack(index, s.substring(start, index).toFloat())
+    }
+
+    mantissa = mantissa or (realExponent shl 52)
+    mantissa = mantissa or if (isNegative) 1L shl 63 else 0L
+
+    return pack(index, doubleFromBits(mantissa).toFloat())
 }
 
-private inline val Char.isDigit get() = (this - '0').toChar().code < 10
+// internal to bypass synthetic accessor
+@Suppress("MemberVisibilityCanBePrivate")
+internal val Mantissa64 = ulongArrayOf(
+    0xa5ced43b7e3e9188UL, 0xcf42894a5dce35eaUL,
+    0x818995ce7aa0e1b2UL, 0xa1ebfb4219491a1fUL,
+    0xca66fa129f9b60a6UL, 0xfd00b897478238d0UL,
+    0x9e20735e8cb16382UL, 0xc5a890362fddbc62UL,
+    0xf712b443bbd52b7bUL, 0x9a6bb0aa55653b2dUL,
+    0xc1069cd4eabe89f8UL, 0xf148440a256e2c76UL,
+    0x96cd2a865764dbcaUL, 0xbc807527ed3e12bcUL,
+    0xeba09271e88d976bUL, 0x93445b8731587ea3UL,
+    0xb8157268fdae9e4cUL, 0xe61acf033d1a45dfUL,
+    0x8fd0c16206306babUL, 0xb3c4f1ba87bc8696UL,
+    0xe0b62e2929aba83cUL, 0x8c71dcd9ba0b4925UL,
+    0xaf8e5410288e1b6fUL, 0xdb71e91432b1a24aUL,
+    0x892731ac9faf056eUL, 0xab70fe17c79ac6caUL,
+    0xd64d3d9db981787dUL, 0x85f0468293f0eb4eUL,
+    0xa76c582338ed2621UL, 0xd1476e2c07286faaUL,
+    0x82cca4db847945caUL, 0xa37fce126597973cUL,
+    0xcc5fc196fefd7d0cUL, 0xff77b1fcbebcdc4fUL,
+    0x9faacf3df73609b1UL, 0xc795830d75038c1dUL,
+    0xf97ae3d0d2446f25UL, 0x9becce62836ac577UL,
+    0xc2e801fb244576d5UL, 0xf3a20279ed56d48aUL,
+    0x9845418c345644d6UL, 0xbe5691ef416bd60cUL,
+    0xedec366b11c6cb8fUL, 0x94b3a202eb1c3f39UL,
+    0xb9e08a83a5e34f07UL, 0xe858ad248f5c22c9UL,
+    0x91376c36d99995beUL, 0xb58547448ffffb2dUL,
+    0xe2e69915b3fff9f9UL, 0x8dd01fad907ffc3bUL,
+    0xb1442798f49ffb4aUL, 0xdd95317f31c7fa1dUL,
+    0x8a7d3eef7f1cfc52UL, 0xad1c8eab5ee43b66UL,
+    0xd863b256369d4a40UL, 0x873e4f75e2224e68UL,
+    0xa90de3535aaae202UL, 0xd3515c2831559a83UL,
+    0x8412d9991ed58091UL, 0xa5178fff668ae0b6UL,
+    0xce5d73ff402d98e3UL, 0x80fa687f881c7f8eUL,
+    0xa139029f6a239f72UL, 0xc987434744ac874eUL,
+    0xfbe9141915d7a922UL, 0x9d71ac8fada6c9b5UL,
+    0xc4ce17b399107c22UL, 0xf6019da07f549b2bUL,
+    0x99c102844f94e0fbUL, 0xc0314325637a1939UL,
+    0xf03d93eebc589f88UL, 0x96267c7535b763b5UL,
+    0xbbb01b9283253ca2UL, 0xea9c227723ee8bcbUL,
+    0x92a1958a7675175fUL, 0xb749faed14125d36UL,
+    0xe51c79a85916f484UL, 0x8f31cc0937ae58d2UL,
+    0xb2fe3f0b8599ef07UL, 0xdfbdcece67006ac9UL,
+    0x8bd6a141006042bdUL, 0xaecc49914078536dUL,
+    0xda7f5bf590966848UL, 0x888f99797a5e012dUL,
+    0xaab37fd7d8f58178UL, 0xd5605fcdcf32e1d6UL,
+    0x855c3be0a17fcd26UL, 0xa6b34ad8c9dfc06fUL,
+    0xd0601d8efc57b08bUL, 0x823c12795db6ce57UL,
+    0xa2cb1717b52481edUL, 0xcb7ddcdda26da268UL,
+    0xfe5d54150b090b02UL, 0x9efa548d26e5a6e1UL,
+    0xc6b8e9b0709f109aUL, 0xf867241c8cc6d4c0UL,
+    0x9b407691d7fc44f8UL, 0xc21094364dfb5636UL,
+    0xf294b943e17a2bc4UL, 0x979cf3ca6cec5b5aUL,
+    0xbd8430bd08277231UL, 0xece53cec4a314ebdUL,
+    0x940f4613ae5ed136UL, 0xb913179899f68584UL,
+    0xe757dd7ec07426e5UL, 0x9096ea6f3848984fUL,
+    0xb4bca50b065abe63UL, 0xe1ebce4dc7f16dfbUL,
+    0x8d3360f09cf6e4bdUL, 0xb080392cc4349decUL,
+    0xdca04777f541c567UL, 0x89e42caaf9491b60UL,
+    0xac5d37d5b79b6239UL, 0xd77485cb25823ac7UL,
+    0x86a8d39ef77164bcUL, 0xa8530886b54dbdebUL,
+    0xd267caa862a12d66UL, 0x8380dea93da4bc60UL,
+    0xa46116538d0deb78UL, 0xcd795be870516656UL,
+    0x806bd9714632dff6UL, 0xa086cfcd97bf97f3UL,
+    0xc8a883c0fdaf7df0UL, 0xfad2a4b13d1b5d6cUL,
+    0x9cc3a6eec6311a63UL, 0xc3f490aa77bd60fcUL,
+    0xf4f1b4d515acb93bUL, 0x991711052d8bf3c5UL,
+    0xbf5cd54678eef0b6UL, 0xef340a98172aace4UL,
+    0x9580869f0e7aac0eUL, 0xbae0a846d2195712UL,
+    0xe998d258869facd7UL, 0x91ff83775423cc06UL,
+    0xb67f6455292cbf08UL, 0xe41f3d6a7377eecaUL,
+    0x8e938662882af53eUL, 0xb23867fb2a35b28dUL,
+    0xdec681f9f4c31f31UL, 0x8b3c113c38f9f37eUL,
+    0xae0b158b4738705eUL, 0xd98ddaee19068c76UL,
+    0x87f8a8d4cfa417c9UL, 0xa9f6d30a038d1dbcUL,
+    0xd47487cc8470652bUL, 0x84c8d4dfd2c63f3bUL,
+    0xa5fb0a17c777cf09UL, 0xcf79cc9db955c2ccUL,
+    0x81ac1fe293d599bfUL, 0xa21727db38cb002fUL,
+    0xca9cf1d206fdc03bUL, 0xfd442e4688bd304aUL,
+    0x9e4a9cec15763e2eUL, 0xc5dd44271ad3cdbaUL,
+    0xf7549530e188c128UL, 0x9a94dd3e8cf578b9UL,
+    0xc13a148e3032d6e7UL, 0xf18899b1bc3f8ca1UL,
+    0x96f5600f15a7b7e5UL, 0xbcb2b812db11a5deUL,
+    0xebdf661791d60f56UL, 0x936b9fcebb25c995UL,
+    0xb84687c269ef3bfbUL, 0xe65829b3046b0afaUL,
+    0x8ff71a0fe2c2e6dcUL, 0xb3f4e093db73a093UL,
+    0xe0f218b8d25088b8UL, 0x8c974f7383725573UL,
+    0xafbd2350644eeacfUL, 0xdbac6c247d62a583UL,
+    0x894bc396ce5da772UL, 0xab9eb47c81f5114fUL,
+    0xd686619ba27255a2UL, 0x8613fd0145877585UL,
+    0xa798fc4196e952e7UL, 0xd17f3b51fca3a7a0UL,
+    0x82ef85133de648c4UL, 0xa3ab66580d5fdaf5UL,
+    0xcc963fee10b7d1b3UL, 0xffbbcfe994e5c61fUL,
+    0x9fd561f1fd0f9bd3UL, 0xc7caba6e7c5382c8UL,
+    0xf9bd690a1b68637bUL, 0x9c1661a651213e2dUL,
+    0xc31bfa0fe5698db8UL, 0xf3e2f893dec3f126UL,
+    0x986ddb5c6b3a76b7UL, 0xbe89523386091465UL,
+    0xee2ba6c0678b597fUL, 0x94db483840b717efUL,
+    0xba121a4650e4ddebUL, 0xe896a0d7e51e1566UL,
+    0x915e2486ef32cd60UL, 0xb5b5ada8aaff80b8UL,
+    0xe3231912d5bf60e6UL, 0x8df5efabc5979c8fUL,
+    0xb1736b96b6fd83b3UL, 0xddd0467c64bce4a0UL,
+    0x8aa22c0dbef60ee4UL, 0xad4ab7112eb3929dUL,
+    0xd89d64d57a607744UL, 0x87625f056c7c4a8bUL,
+    0xa93af6c6c79b5d2dUL, 0xd389b47879823479UL,
+    0x843610cb4bf160cbUL, 0xa54394fe1eedb8feUL,
+    0xce947a3da6a9273eUL, 0x811ccc668829b887UL,
+    0xa163ff802a3426a8UL, 0xc9bcff6034c13052UL,
+    0xfc2c3f3841f17c67UL, 0x9d9ba7832936edc0UL,
+    0xc5029163f384a931UL, 0xf64335bcf065d37dUL,
+    0x99ea0196163fa42eUL, 0xc06481fb9bcf8d39UL,
+    0xf07da27a82c37088UL, 0x964e858c91ba2655UL,
+    0xbbe226efb628afeaUL, 0xeadab0aba3b2dbe5UL,
+    0x92c8ae6b464fc96fUL, 0xb77ada0617e3bbcbUL,
+    0xe55990879ddcaabdUL, 0x8f57fa54c2a9eab6UL,
+    0xb32df8e9f3546564UL, 0xdff9772470297ebdUL,
+    0x8bfbea76c619ef36UL, 0xaefae51477a06b03UL,
+    0xdab99e59958885c4UL, 0x88b402f7fd75539bUL,
+    0xaae103b5fcd2a881UL, 0xd59944a37c0752a2UL,
+    0x857fcae62d8493a5UL, 0xa6dfbd9fb8e5b88eUL,
+    0xd097ad07a71f26b2UL, 0x825ecc24c873782fUL,
+    0xa2f67f2dfa90563bUL, 0xcbb41ef979346bcaUL,
+    0xfea126b7d78186bcUL, 0x9f24b832e6b0f436UL,
+    0xc6ede63fa05d3143UL, 0xf8a95fcf88747d94UL,
+    0x9b69dbe1b548ce7cUL, 0xc24452da229b021bUL,
+    0xf2d56790ab41c2a2UL, 0x97c560ba6b0919a5UL,
+    0xbdb6b8e905cb600fUL, 0xed246723473e3813UL,
+    0x9436c0760c86e30bUL, 0xb94470938fa89bceUL,
+    0xe7958cb87392c2c2UL, 0x90bd77f3483bb9b9UL,
+    0xb4ecd5f01a4aa828UL, 0xe2280b6c20dd5232UL,
+    0x8d590723948a535fUL, 0xb0af48ec79ace837UL,
+    0xdcdb1b2798182244UL, 0x8a08f0f8bf0f156bUL,
+    0xac8b2d36eed2dac5UL, 0xd7adf884aa879177UL,
+    0x86ccbb52ea94baeaUL, 0xa87fea27a539e9a5UL,
+    0xd29fe4b18e88640eUL, 0x83a3eeeef9153e89UL,
+    0xa48ceaaab75a8e2bUL, 0xcdb02555653131b6UL,
+    0x808e17555f3ebf11UL, 0xa0b19d2ab70e6ed6UL,
+    0xc8de047564d20a8bUL, 0xfb158592be068d2eUL,
+    0x9ced737bb6c4183dUL, 0xc428d05aa4751e4cUL,
+    0xf53304714d9265dfUL, 0x993fe2c6d07b7fabUL,
+    0xbf8fdb78849a5f96UL, 0xef73d256a5c0f77cUL,
+    0x95a8637627989aadUL, 0xbb127c53b17ec159UL,
+    0xe9d71b689dde71afUL, 0x9226712162ab070dUL,
+    0xb6b00d69bb55c8d1UL, 0xe45c10c42a2b3b05UL,
+    0x8eb98a7a9a5b04e3UL, 0xb267ed1940f1c61cUL,
+    0xdf01e85f912e37a3UL, 0x8b61313bbabce2c6UL,
+    0xae397d8aa96c1b77UL, 0xd9c7dced53c72255UL,
+    0x881cea14545c7575UL, 0xaa242499697392d2UL,
+    0xd4ad2dbfc3d07787UL, 0x84ec3c97da624ab4UL,
+    0xa6274bbdd0fadd61UL, 0xcfb11ead453994baUL,
+    0x81ceb32c4b43fcf4UL, 0xa2425ff75e14fc31UL,
+    0xcad2f7f5359a3b3eUL, 0xfd87b5f28300ca0dUL,
+    0x9e74d1b791e07e48UL, 0xc612062576589ddaUL,
+    0xf79687aed3eec551UL, 0x9abe14cd44753b52UL,
+    0xc16d9a0095928a27UL, 0xf1c90080baf72cb1UL,
+    0x971da05074da7beeUL, 0xbce5086492111aeaUL,
+    0xec1e4a7db69561a5UL, 0x9392ee8e921d5d07UL,
+    0xb877aa3236a4b449UL, 0xe69594bec44de15bUL,
+    0x901d7cf73ab0acd9UL, 0xb424dc35095cd80fUL,
+    0xe12e13424bb40e13UL, 0x8cbccc096f5088cbUL,
+    0xafebff0bcb24aafeUL, 0xdbe6fecebdedd5beUL,
+    0x89705f4136b4a597UL, 0xabcc77118461cefcUL,
+    0xd6bf94d5e57a42bcUL, 0x8637bd05af6c69b5UL,
+    0xa7c5ac471b478423UL, 0xd1b71758e219652bUL,
+    0x83126e978d4fdf3bUL, 0xa3d70a3d70a3d70aUL,
+    0xccccccccccccccccUL, 0x8000000000000000UL,
+    0xa000000000000000UL, 0xc800000000000000UL,
+    0xfa00000000000000UL, 0x9c40000000000000UL,
+    0xc350000000000000UL, 0xf424000000000000UL,
+    0x9896800000000000UL, 0xbebc200000000000UL,
+    0xee6b280000000000UL, 0x9502f90000000000UL,
+    0xba43b74000000000UL, 0xe8d4a51000000000UL,
+    0x9184e72a00000000UL, 0xb5e620f480000000UL,
+    0xe35fa931a0000000UL, 0x8e1bc9bf04000000UL,
+    0xb1a2bc2ec5000000UL, 0xde0b6b3a76400000UL,
+    0x8ac7230489e80000UL, 0xad78ebc5ac620000UL,
+    0xd8d726b7177a8000UL, 0x878678326eac9000UL,
+    0xa968163f0a57b400UL, 0xd3c21bcecceda100UL,
+    0x84595161401484a0UL, 0xa56fa5b99019a5c8UL,
+    0xcecb8f27f4200f3aUL, 0x813f3978f8940984UL,
+    0xa18f07d736b90be5UL, 0xc9f2c9cd04674edeUL,
+    0xfc6f7c4045812296UL, 0x9dc5ada82b70b59dUL,
+    0xc5371912364ce305UL, 0xf684df56c3e01bc6UL,
+    0x9a130b963a6c115cUL, 0xc097ce7bc90715b3UL,
+    0xf0bdc21abb48db20UL, 0x96769950b50d88f4UL,
+    0xbc143fa4e250eb31UL, 0xeb194f8e1ae525fdUL,
+    0x92efd1b8d0cf37beUL, 0xb7abc627050305adUL,
+    0xe596b7b0c643c719UL, 0x8f7e32ce7bea5c6fUL,
+    0xb35dbf821ae4f38bUL, 0xe0352f62a19e306eUL,
+    0x8c213d9da502de45UL, 0xaf298d050e4395d6UL,
+    0xdaf3f04651d47b4cUL, 0x88d8762bf324cd0fUL,
+    0xab0e93b6efee0053UL, 0xd5d238a4abe98068UL,
+    0x85a36366eb71f041UL, 0xa70c3c40a64e6c51UL,
+    0xd0cf4b50cfe20765UL, 0x82818f1281ed449fUL,
+    0xa321f2d7226895c7UL, 0xcbea6f8ceb02bb39UL,
+    0xfee50b7025c36a08UL, 0x9f4f2726179a2245UL,
+    0xc722f0ef9d80aad6UL, 0xf8ebad2b84e0d58bUL,
+    0x9b934c3b330c8577UL, 0xc2781f49ffcfa6d5UL,
+    0xf316271c7fc3908aUL, 0x97edd871cfda3a56UL,
+    0xbde94e8e43d0c8ecUL, 0xed63a231d4c4fb27UL,
+    0x945e455f24fb1cf8UL, 0xb975d6b6ee39e436UL,
+    0xe7d34c64a9c85d44UL, 0x90e40fbeea1d3a4aUL,
+    0xb51d13aea4a488ddUL, 0xe264589a4dcdab14UL,
+    0x8d7eb76070a08aecUL, 0xb0de65388cc8ada8UL,
+    0xdd15fe86affad912UL, 0x8a2dbf142dfcc7abUL,
+    0xacb92ed9397bf996UL, 0xd7e77a8f87daf7fbUL,
+    0x86f0ac99b4e8dafdUL, 0xa8acd7c0222311bcUL,
+    0xd2d80db02aabd62bUL, 0x83c7088e1aab65dbUL,
+    0xa4b8cab1a1563f52UL, 0xcde6fd5e09abcf26UL,
+    0x80b05e5ac60b6178UL, 0xa0dc75f1778e39d6UL,
+    0xc913936dd571c84cUL, 0xfb5878494ace3a5fUL,
+    0x9d174b2dcec0e47bUL, 0xc45d1df942711d9aUL,
+    0xf5746577930d6500UL, 0x9968bf6abbe85f20UL,
+    0xbfc2ef456ae276e8UL, 0xefb3ab16c59b14a2UL,
+    0x95d04aee3b80ece5UL, 0xbb445da9ca61281fUL,
+    0xea1575143cf97226UL, 0x924d692ca61be758UL,
+    0xb6e0c377cfa2e12eUL, 0xe498f455c38b997aUL,
+    0x8edf98b59a373fecUL, 0xb2977ee300c50fe7UL,
+    0xdf3d5e9bc0f653e1UL, 0x8b865b215899f46cUL,
+    0xae67f1e9aec07187UL, 0xda01ee641a708de9UL,
+    0x884134fe908658b2UL, 0xaa51823e34a7eedeUL,
+    0xd4e5e2cdc1d1ea96UL, 0x850fadc09923329eUL,
+    0xa6539930bf6bff45UL, 0xcfe87f7cef46ff16UL,
+    0x81f14fae158c5f6eUL, 0xa26da3999aef7749UL,
+    0xcb090c8001ab551cUL, 0xfdcb4fa002162a63UL,
+    0x9e9f11c4014dda7eUL, 0xc646d63501a1511dUL,
+    0xf7d88bc24209a565UL, 0x9ae757596946075fUL,
+    0xc1a12d2fc3978937UL, 0xf209787bb47d6b84UL,
+    0x9745eb4d50ce6332UL, 0xbd176620a501fbffUL,
+    0xec5d3fa8ce427affUL, 0x93ba47c980e98cdfUL,
+    0xb8a8d9bbe123f017UL, 0xe6d3102ad96cec1dUL,
+    0x9043ea1ac7e41392UL, 0xb454e4a179dd1877UL,
+    0xe16a1dc9d8545e94UL, 0x8ce2529e2734bb1dUL,
+    0xb01ae745b101e9e4UL, 0xdc21a1171d42645dUL,
+    0x899504ae72497ebaUL, 0xabfa45da0edbde69UL,
+    0xd6f8d7509292d603UL, 0x865b86925b9bc5c2UL,
+    0xa7f26836f282b732UL, 0xd1ef0244af2364ffUL,
+    0x8335616aed761f1fUL, 0xa402b9c5a8d3a6e7UL,
+    0xcd036837130890a1UL, 0x802221226be55a64UL,
+    0xa02aa96b06deb0fdUL, 0xc83553c5c8965d3dUL,
+    0xfa42a8b73abbf48cUL, 0x9c69a97284b578d7UL,
+    0xc38413cf25e2d70dUL, 0xf46518c2ef5b8cd1UL,
+    0x98bf2f79d5993802UL, 0xbeeefb584aff8603UL,
+    0xeeaaba2e5dbf6784UL, 0x952ab45cfa97a0b2UL,
+    0xba756174393d88dfUL, 0xe912b9d1478ceb17UL,
+    0x91abb422ccb812eeUL, 0xb616a12b7fe617aaUL,
+    0xe39c49765fdf9d94UL, 0x8e41ade9fbebc27dUL,
+    0xb1d219647ae6b31cUL, 0xde469fbd99a05fe3UL,
+    0x8aec23d680043beeUL, 0xada72ccc20054ae9UL,
+    0xd910f7ff28069da4UL, 0x87aa9aff79042286UL,
+    0xa99541bf57452b28UL, 0xd3fa922f2d1675f2UL,
+    0x847c9b5d7c2e09b7UL, 0xa59bc234db398c25UL,
+    0xcf02b2c21207ef2eUL, 0x8161afb94b44f57dUL,
+    0xa1ba1ba79e1632dcUL, 0xca28a291859bbf93UL,
+    0xfcb2cb35e702af78UL, 0x9defbf01b061adabUL,
+    0xc56baec21c7a1916UL, 0xf6c69a72a3989f5bUL,
+    0x9a3c2087a63f6399UL, 0xc0cb28a98fcf3c7fUL,
+    0xf0fdf2d3f3c30b9fUL, 0x969eb7c47859e743UL,
+    0xbc4665b596706114UL, 0xeb57ff22fc0c7959UL,
+    0x9316ff75dd87cbd8UL, 0xb7dcbf5354e9beceUL,
+    0xe5d3ef282a242e81UL, 0x8fa475791a569d10UL,
+    0xb38d92d760ec4455UL, 0xe070f78d3927556aUL,
+    0x8c469ab843b89562UL, 0xaf58416654a6babbUL,
+    0xdb2e51bfe9d0696aUL, 0x88fcf317f22241e2UL,
+    0xab3c2fddeeaad25aUL, 0xd60b3bd56a5586f1UL,
+    0x85c7056562757456UL, 0xa738c6bebb12d16cUL,
+    0xd106f86e69d785c7UL, 0x82a45b450226b39cUL,
+    0xa34d721642b06084UL, 0xcc20ce9bd35c78a5UL,
+    0xff290242c83396ceUL, 0x9f79a169bd203e41UL,
+    0xc75809c42c684dd1UL, 0xf92e0c3537826145UL,
+    0x9bbcc7a142b17ccbUL, 0xc2abf989935ddbfeUL,
+    0xf356f7ebf83552feUL, 0x98165af37b2153deUL,
+    0xbe1bf1b059e9a8d6UL, 0xeda2ee1c7064130cUL,
+    0x9485d4d1c63e8be7UL, 0xb9a74a0637ce2ee1UL,
+    0xe8111c87c5c1ba99UL, 0x910ab1d4db9914a0UL,
+    0xb54d5e4a127f59c8UL, 0xe2a0b5dc971f303aUL,
+    0x8da471a9de737e24UL, 0xb10d8e1456105dadUL,
+    0xdd50f1996b947518UL, 0x8a5296ffe33cc92fUL,
+    0xace73cbfdc0bfb7bUL, 0xd8210befd30efa5aUL,
+    0x8714a775e3e95c78UL, 0xa8d9d1535ce3b396UL,
+    0xd31045a8341ca07cUL, 0x83ea2b892091e44dUL,
+    0xa4e4b66b68b65d60UL, 0xce1de40642e3f4b9UL,
+    0x80d2ae83e9ce78f3UL, 0xa1075a24e4421730UL,
+    0xc94930ae1d529cfcUL, 0xfb9b7cd9a4a7443cUL,
+    0x9d412e0806e88aa5UL, 0xc491798a08a2ad4eUL,
+    0xf5b5d7ec8acb58a2UL, 0x9991a6f3d6bf1765UL,
+    0xbff610b0cc6edd3fUL, 0xeff394dcff8a948eUL,
+    0x95f83d0a1fb69cd9UL, 0xbb764c4ca7a4440fUL,
+    0xea53df5fd18d5513UL, 0x92746b9be2f8552cUL,
+    0xb7118682dbb66a77UL, 0xe4d5e82392a40515UL,
+    0x8f05b1163ba6832dUL, 0xb2c71d5bca9023f8UL,
+    0xdf78e4b2bd342cf6UL, 0x8bab8eefb6409c1aUL,
+    0xae9672aba3d0c320UL, 0xda3c0f568cc4f3e8UL,
+    0x8865899617fb1871UL, 0xaa7eebfb9df9de8dUL,
+    0xd51ea6fa85785631UL, 0x8533285c936b35deUL,
+    0xa67ff273b8460356UL, 0xd01fef10a657842cUL,
+    0x8213f56a67f6b29bUL, 0xa298f2c501f45f42UL,
+    0xcb3f2f7642717713UL, 0xfe0efb53d30dd4d7UL,
+    0x9ec95d1463e8a506UL, 0xc67bb4597ce2ce48UL,
+    0xf81aa16fdc1b81daUL, 0x9b10a4e5e9913128UL,
+    0xc1d4ce1f63f57d72UL, 0xf24a01a73cf2dccfUL,
+    0x976e41088617ca01UL, 0xbd49d14aa79dbc82UL,
+    0xec9c459d51852ba2UL, 0x93e1ab8252f33b45UL,
+    0xb8da1662e7b00a17UL, 0xe7109bfba19c0c9dUL,
+    0x906a617d450187e2UL, 0xb484f9dc9641e9daUL,
+    0xe1a63853bbd26451UL, 0x8d07e33455637eb2UL,
+    0xb049dc016abc5e5fUL, 0xdc5c5301c56b75f7UL,
+    0x89b9b3e11b6329baUL, 0xac2820d9623bf429UL,
+    0xd732290fbacaf133UL, 0x867f59a9d4bed6c0UL,
+    0xa81f301449ee8c70UL, 0xd226fc195c6a2f8cUL,
+    0x83585d8fd9c25db7UL, 0xa42e74f3d032f525UL,
+    0xcd3a1230c43fb26fUL, 0x80444b5e7aa7cf85UL,
+    0xa0555e361951c366UL, 0xc86ab5c39fa63440UL,
+    0xfa856334878fc150UL, 0x9c935e00d4b9d8d2UL,
+    0xc3b8358109e84f07UL, 0xf4a642e14c6262c8UL,
+    0x98e7e9cccfbd7dbdUL, 0xbf21e44003acdd2cUL,
+    0xeeea5d5004981478UL, 0x95527a5202df0ccbUL,
+    0xbaa718e68396cffdUL, 0xe950df20247c83fdUL,
+    0x91d28b7416cdd27eUL, 0xb6472e511c81471dUL,
+    0xe3d8f9e563a198e5UL, 0x8e679c2f5e44ff8fUL
+)
 
-private inline fun charAt(s: CharSequence, index: Int) = if (index < s.length) {
-    s[index]
-} else {
-    '\u0000'
+internal inline val Char.isDigit get() = (this - '0').toChar().code < 10
+
+private inline fun pack(index: Int, value: Float): Long {
+    return (index.toLong() shl 32) or (value.toRawBits().toLong() and 0xFFFFFFFFL)
 }
 
 private inline fun fullMultiplicationHighBits(x: Long, y: Long): Long {
@@ -614,7 +604,7 @@
     return xTimesYHi + (carry ushr 32) + (xTimesYMid ushr 32)
 }
 
-private inline fun parseFourDigits(str: CharSequence, offset: Int): Int {
+private inline fun parseFourDigits(str: String, offset: Int): Int {
     val v = (str[offset].code.toLong()
         or (str[offset + 1].code.toLong() shl 16)
         or (str[offset + 2].code.toLong() shl 32)
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
index 405910e..45f38bf 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
@@ -51,7 +51,6 @@
 class PathParser {
     private val nodes = ArrayList<PathNode>()
 
-    private val floatResult = FloatResult()
     private var nodeData = FloatArray(64)
 
     fun clear() {
@@ -106,16 +105,19 @@
                         // Find the next float and add it to the data array if we got a valid result
                         // An invalid result could be a malformed float, or simply that we reached
                         // the end of the list of floats
-                        index = FastFloatParser.nextFloat(pathData, index, end, floatResult)
+                        val result = nextFloat(pathData, index, end)
+                        index = result.index
+                        val value = result.floatValue
 
-                        if (floatResult.isValid) {
-                            nodeData[dataCount++] = floatResult.value
+                        // If the number is not a NaN
+                        if (!value.isNaN()) {
+                            nodeData[dataCount++] = value
                             resizeNodeData(dataCount)
                         }
 
                         // Skip any commas
                         while (index < end && pathData[index] == ',') index++
-                    } while (index < end && floatResult.isValid)
+                    } while (index < end && !value.isNaN())
                 }
 
                 addNodes(command, nodeData, dataCount)
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt
index d83802a..b72eccf 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt
@@ -3372,5 +3372,5 @@
     "7F800000 9e40000000",
     "7F800000 9e563",
     "7F800000 9e795",
-    "7F800000 9e904",
+    "7F800000 9e904"
 )
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/compose/ui/ui-graphics/src/jvmMain/kotlin/androidx/compose/ui/graphics/vector/JvmFastFloatParser.jvm.kt
similarity index 64%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to compose/ui/ui-graphics/src/jvmMain/kotlin/androidx/compose/ui/graphics/vector/JvmFastFloatParser.jvm.kt
index 40b8f5b..8bdaab3 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/compose/ui/ui-graphics/src/jvmMain/kotlin/androidx/compose/ui/graphics/vector/JvmFastFloatParser.jvm.kt
@@ -14,7 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+@file:Suppress("NOTHING_TO_INLINE")
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+package androidx.compose.ui.graphics.vector
+
+// See explanation in FastFloatParser.kt
+internal actual inline fun floatFromBits(bits: Int): Float = java.lang.Float.intBitsToFloat(bits)
+
+internal actual inline fun doubleFromBits(bits: Long): Double =
+    java.lang.Double.longBitsToDouble(bits)
diff --git a/compose/ui/ui-test-junit4/build.gradle b/compose/ui/ui-test-junit4/build.gradle
index a65f822..b1ae030 100644
--- a/compose/ui/ui-test-junit4/build.gradle
+++ b/compose/ui/ui-test-junit4/build.gradle
@@ -108,10 +108,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
@@ -119,6 +115,7 @@
                 implementation(project(":compose:material:material"))
                 implementation(project(":compose:test-utils"))
                 implementation(libs.truth)
+                implementation(libs.robolectric)
             }
         }
 
@@ -146,12 +143,6 @@
     namespace "androidx.compose.ui.test.junit4"
 }
 
-dependencies {
-    // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
-    // leaks into instrumented tests (b/214407011)
-    testImplementation(libs.robolectric)
-}
-
 androidx {
     name = "Compose Testing for JUnit4"
     type = LibraryType.PUBLISHED_TEST_LIBRARY
diff --git a/compose/ui/ui-test/build.gradle b/compose/ui/ui-test/build.gradle
index 56b3e50..d4ba7ab 100644
--- a/compose/ui/ui-test/build.gradle
+++ b/compose/ui/ui-test/build.gradle
@@ -110,14 +110,11 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependsOn(androidCommonTest)
             dependencies {
+                implementation(libs.robolectric)
                 implementation(libs.mockitoCore4)
                 implementation(libs.mockitoKotlin4)
             }
@@ -143,12 +140,6 @@
     namespace "androidx.compose.ui.test"
 }
 
-dependencies {
-    // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
-    // leaks into instrumented tests (b/214407011)
-    testImplementation(libs.robolectric)
-}
-
 androidx {
     name = "Compose Testing"
     type = LibraryType.PUBLISHED_TEST_LIBRARY
diff --git a/compose/ui/ui-text/build.gradle b/compose/ui/ui-text/build.gradle
index d4383a4..42c6734 100644
--- a/compose/ui/ui-text/build.gradle
+++ b/compose/ui/ui-text/build.gradle
@@ -112,11 +112,6 @@
             }
         }
 
-
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
@@ -127,6 +122,8 @@
                 implementation(libs.truth)
                 implementation(libs.kotlinReflect)
                 implementation(libs.kotlinTest)
+                implementation(libs.mockitoCore4)
+                implementation(libs.mockitoKotlin4)
             }
         }
 
@@ -149,13 +146,6 @@
     }
 }
 
-dependencies {
-    // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
-    // leaks into instrumented tests (b/214407011)
-    testImplementation(libs.mockitoCore4)
-    testImplementation(libs.mockitoKotlin4)
-}
-
 androidx {
     name = "Compose UI Text"
     type = LibraryType.PUBLISHED_LIBRARY
diff --git a/compose/ui/ui-unit/build.gradle b/compose/ui/ui-unit/build.gradle
index d87b7b3..c651119 100644
--- a/compose/ui/ui-unit/build.gradle
+++ b/compose/ui/ui-unit/build.gradle
@@ -92,10 +92,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/ui/ui-util/build.gradle b/compose/ui/ui-util/build.gradle
index 1f53f9b..79dac70 100644
--- a/compose/ui/ui-util/build.gradle
+++ b/compose/ui/ui-util/build.gradle
@@ -76,10 +76,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index 0bcab0a..9489035 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -254,10 +254,7 @@
 package androidx.compose.ui.draganddrop {
 
   public final class DragAndDropEvent {
-    ctor public DragAndDropEvent(int type, android.view.DragEvent dragEvent);
-    method public int getType();
-    method public void setType(int);
-    property public final int type;
+    ctor public DragAndDropEvent(android.view.DragEvent dragEvent, optional androidx.collection.ArraySet<androidx.compose.ui.draganddrop.DragAndDropModifierNode> interestedNodes);
   }
 
   @kotlin.jvm.JvmInline public final value class DragAndDropEventType {
@@ -293,6 +290,18 @@
     property public final androidx.compose.ui.draganddrop.DragAndDropTransfer transfer;
   }
 
+  public interface DragAndDropModifierNode extends androidx.compose.ui.node.DelegatableNode androidx.compose.ui.draganddrop.DragAndDropTarget {
+    method public void drag(androidx.compose.ui.draganddrop.DragAndDropInfo dragAndDropInfo);
+  }
+
+  public final class DragAndDropNodeKt {
+    method public static androidx.compose.ui.draganddrop.DragAndDropModifierNode DragAndDropModifierNode(optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,? extends androidx.compose.ui.draganddrop.DragAndDropTarget> onDragAndDropEvent);
+  }
+
+  public fun interface DragAndDropTarget {
+    method public boolean onDragAndDropEvent(androidx.compose.ui.draganddrop.DragAndDropEvent event, int type);
+  }
+
   public final class DragAndDropTransfer {
     ctor public DragAndDropTransfer(android.content.ClipData clipData, optional Object? localState, optional int flags);
     method public android.content.ClipData getClipData();
@@ -305,6 +314,7 @@
 
   public final class DragAndDrop_androidKt {
     method public static android.view.DragEvent getDragEvent(androidx.compose.ui.draganddrop.DragAndDropEvent);
+    method public static java.util.Set<java.lang.String> mimeTypes(androidx.compose.ui.draganddrop.DragAndDropEvent);
   }
 
 }
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index a7956aa..38e9d0f 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -254,10 +254,7 @@
 package androidx.compose.ui.draganddrop {
 
   public final class DragAndDropEvent {
-    ctor public DragAndDropEvent(int type, android.view.DragEvent dragEvent);
-    method public int getType();
-    method public void setType(int);
-    property public final int type;
+    ctor public DragAndDropEvent(android.view.DragEvent dragEvent, optional androidx.collection.ArraySet<androidx.compose.ui.draganddrop.DragAndDropModifierNode> interestedNodes);
   }
 
   @kotlin.jvm.JvmInline public final value class DragAndDropEventType {
@@ -293,6 +290,18 @@
     property public final androidx.compose.ui.draganddrop.DragAndDropTransfer transfer;
   }
 
+  public interface DragAndDropModifierNode extends androidx.compose.ui.node.DelegatableNode androidx.compose.ui.draganddrop.DragAndDropTarget {
+    method public void drag(androidx.compose.ui.draganddrop.DragAndDropInfo dragAndDropInfo);
+  }
+
+  public final class DragAndDropNodeKt {
+    method public static androidx.compose.ui.draganddrop.DragAndDropModifierNode DragAndDropModifierNode(optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,? extends androidx.compose.ui.draganddrop.DragAndDropTarget> onDragAndDropEvent);
+  }
+
+  public fun interface DragAndDropTarget {
+    method public boolean onDragAndDropEvent(androidx.compose.ui.draganddrop.DragAndDropEvent event, int type);
+  }
+
   public final class DragAndDropTransfer {
     ctor public DragAndDropTransfer(android.content.ClipData clipData, optional Object? localState, optional int flags);
     method public android.content.ClipData getClipData();
@@ -305,6 +314,7 @@
 
   public final class DragAndDrop_androidKt {
     method public static android.view.DragEvent getDragEvent(androidx.compose.ui.draganddrop.DragAndDropEvent);
+    method public static java.util.Set<java.lang.String> mimeTypes(androidx.compose.ui.draganddrop.DragAndDropEvent);
   }
 
 }
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index eaa5528..2f22186 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -152,10 +152,6 @@
             }
         }
 
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
@@ -165,6 +161,9 @@
                 implementation(libs.junit)
                 implementation(libs.truth)
                 implementation(libs.kotlinTest)
+                implementation(libs.robolectric)
+                implementation(libs.mockitoCore4)
+                implementation(libs.mockitoKotlin4)
                 implementation(project(":compose:ui:ui-test-junit4"))
                 implementation(project(":internal-testutils-fonts"))
                 implementation(project(":compose:test-utils"))
@@ -211,12 +210,6 @@
 dependencies {
     lintChecks(project(":compose:ui:ui-lint"))
     lintPublish(project(":compose:ui:ui-lint"))
-
-    // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
-    // leaks into instrumented tests (b/214407011)
-    testImplementation(libs.robolectric)
-    testImplementation(libs.mockitoCore4)
-    testImplementation(libs.mockitoKotlin4)
 }
 
 androidx {
diff --git a/compose/ui/ui/lint-baseline.xml b/compose/ui/ui/lint-baseline.xml
index 0a78a98..ba27473 100644
--- a/compose/ui/ui/lint-baseline.xml
+++ b/compose/ui/ui/lint-baseline.xml
@@ -543,7 +543,7 @@
 
     <issue
         id="PrimitiveInCollection"
-        message="variable var43bc1f85 with type Map&lt;AlignmentLine, Integer>: replace with ObjectIntMap"
+        message="variable var43bc1b5b with type Map&lt;AlignmentLine, Integer>: replace with ObjectIntMap"
         errorLine1="                    val oldLines = oldAlignmentLines"
         errorLine2="                                   ^">
         <location
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
index 8185eb0..67e660b 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
@@ -4782,6 +4782,35 @@
         }
     }
 
+    @Test
+    fun canScroll_returnsFalse_whenAccessedOutsideOfMainThread() {
+        container.setContent {
+            Box(
+                Modifier.semantics(mergeDescendants = true) { }
+            ) {
+                Column(
+                    Modifier
+                        .size(50.dp)
+                        .verticalScroll(rememberScrollState())
+                ) {
+                    repeat(10) {
+                        Box(Modifier.size(30.dp))
+                    }
+                }
+            }
+        }
+
+        rule.runOnIdle {
+            androidComposeView.dispatchTouchEvent(
+                createHoverMotionEvent(MotionEvent.ACTION_DOWN, 10f, 10f)
+            )
+
+            assertTrue(androidComposeView.canScrollVertically(1))
+        }
+
+        assertFalse(androidComposeView.canScrollVertically(1))
+    }
+
     private fun eventIndex(list: List<AccessibilityEvent>, event: AccessibilityEvent): Int {
         for (i in list.indices) {
             if (ReflectionEquals(list[i], null).matches(event)) {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
index 469f38e..d68f6c8 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
@@ -42,12 +42,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.toAndroidRect
 import androidx.compose.ui.hapticfeedback.HapticFeedback
 import androidx.compose.ui.input.InputModeManager
@@ -2211,31 +2207,15 @@
         val inverseTransform = Matrix()
         return object : OwnedLayer {
             override fun updateLayerProperties(
-                scaleX: Float,
-                scaleY: Float,
-                alpha: Float,
-                translationX: Float,
-                translationY: Float,
-                shadowElevation: Float,
-                rotationX: Float,
-                rotationY: Float,
-                rotationZ: Float,
-                cameraDistance: Float,
-                transformOrigin: TransformOrigin,
-                shape: Shape,
-                clip: Boolean,
-                renderEffect: RenderEffect?,
-                ambientShadowColor: Color,
-                spotShadowColor: Color,
-                compositingStrategy: CompositingStrategy,
+                scope: ReusableGraphicsLayerScope,
                 layoutDirection: LayoutDirection,
                 density: Density
             ) {
                 transform.reset()
                 // This is not expected to be 100% accurate
-                transform.scale(scaleX, scaleY)
-                transform.rotateZ(rotationZ)
-                transform.translate(translationX, translationY)
+                transform.scale(scope.scaleX, scope.scaleY)
+                transform.rotateZ(scope.rotationZ)
+                transform.translate(scope.translationX, scope.translationY)
                 transform.invertTo(inverseTransform)
             }
 
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
index e905ca7..ed3d26d 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
@@ -57,12 +57,10 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.CompositingStrategy
-import androidx.compose.ui.graphics.DefaultShadowColor
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Path
-import androidx.compose.ui.graphics.RectangleShape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.asImageBitmap
 import androidx.compose.ui.graphics.drawscope.ContentDrawScope
 import androidx.compose.ui.graphics.drawscope.Stroke
@@ -393,27 +391,10 @@
             ViewLayerContainer(activity),
             {},
             {}).apply {
-            updateLayerProperties(
-                scaleX = 1f,
-                scaleY = 1f,
-                alpha = 1f,
-                translationX = 0f,
-                translationY = 0f,
-                shadowElevation = 0f,
-                rotationX = 0f,
-                rotationY = 0f,
-                rotationZ = 0f,
-                cameraDistance = cameraDistance,
-                transformOrigin = TransformOrigin.Center,
-                shape = RectangleShape,
-                clip = true,
-                layoutDirection = LayoutDirection.Ltr,
-                density = Density(1f),
-                renderEffect = null,
-                ambientShadowColor = DefaultShadowColor,
-                spotShadowColor = DefaultShadowColor,
-                compositingStrategy = compositingStrategy
-            )
+            val scope = ReusableGraphicsLayerScope()
+            scope.cameraDistance = cameraDistance
+            scope.compositingStrategy = compositingStrategy
+            updateLayerProperties(scope, LayoutDirection.Ltr, Density(1f))
         }
         return expectedLayerType == view.layerType &&
             expectedOverlappingRendering == view.hasOverlappingRendering()
@@ -451,27 +432,9 @@
             {},
             {}
         ).apply {
-            updateLayerProperties(
-                scaleX = 1f,
-                scaleY = 1f,
-                alpha = 1f,
-                translationX = 0f,
-                translationY = 0f,
-                shadowElevation = 0f,
-                rotationX = 0f,
-                rotationY = 0f,
-                rotationZ = 0f,
-                cameraDistance = cameraDistance,
-                transformOrigin = TransformOrigin.Center,
-                shape = RectangleShape,
-                clip = true,
-                layoutDirection = LayoutDirection.Ltr,
-                density = Density(1f),
-                renderEffect = null,
-                ambientShadowColor = DefaultShadowColor,
-                spotShadowColor = DefaultShadowColor,
-                compositingStrategy = CompositingStrategy.Auto
-            )
+            val scope = ReusableGraphicsLayerScope()
+            scope.cameraDistance = cameraDistance
+            updateLayerProperties(scope, LayoutDirection.Ltr, Density(1f))
         }
         // Verify that the camera distance is applied properly even after accounting for
         // the internal dp conversion within View
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draganddrop/AndroidDragAndDropTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draganddrop/AndroidDragAndDropTest.kt
new file mode 100644
index 0000000..e04058a
--- /dev/null
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draganddrop/AndroidDragAndDropTest.kt
@@ -0,0 +1,861 @@
+/*
+ * Copyright 2023 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 androidx.compose.ui.draganddrop
+
+import android.os.Parcel
+import android.view.DragEvent
+import android.view.ViewGroup
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.draganddrop.dragAndDropTarget
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.OpenComposeView
+import androidx.compose.ui.findAndroidComposeView
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.layout.positionInParent
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.test.TestActivity
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.dp
+import com.google.common.truth.Truth
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.kotlin.spy
+
+private val ContainerSize = 400.dp
+private val ParentSize = 150.dp
+private val ChildSize = 50.dp
+
+private val HalfContainerSize = ContainerSize / 2
+private val HalfParentSize = ParentSize / 2
+private val HalfChildSize = ChildSize / 2
+
+class DragAndDropNodeTest {
+
+    @Suppress("DEPRECATION")
+    @get:Rule
+    val rule = androidx.test.rule.ActivityTestRule(
+        TestActivity::class.java
+    )
+
+    private lateinit var container: OpenComposeView
+
+    private lateinit var acceptingTopStartDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingTopEndDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingParentBottomStartDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingInnerBottomStartDropTarget: DropTargetModifierHolder
+    private lateinit var rejectingParentBottomEndDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingInnerBottomEndDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingOffsetInnerBottomStartDropTarget: DropTargetModifierHolder
+
+    private lateinit var density: Density
+
+    /**
+     * Sets up a grid of drop targets resembling the following for testing:
+     *
+     *    accepts                 accepts
+     * ┌───────────┐           ┌───────────┐
+     * │           │           │           │
+     * │           │           │           │
+     * │           │           │           │
+     * └───────────┘           └───────────┘
+     *
+     *    accepts                 rejects
+     * ┌───────────┐  accepts  ┌───────────┐
+     * │  accepts  │  ┌─────┐  │  accepts  │
+     * │─────┐     │  │     │  │     ┌─────│
+     * │     │     │  └─────┘  │     │     │
+     * └─────┘─────┘           └─────└─────┘
+     *
+     * parent <------> child
+     *         offset
+     */
+    @Before
+    fun setup() {
+        val activity = rule.activity
+        container = spy(OpenComposeView(activity))
+
+        acceptingTopStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingTopEndDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingParentBottomStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingInnerBottomStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        rejectingParentBottomEndDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { false }
+        )
+        acceptingInnerBottomEndDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingOffsetInnerBottomStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+
+        rule.runOnUiThread {
+            activity.setContentView(
+                container,
+                ViewGroup.LayoutParams(
+                    ViewGroup.LayoutParams.WRAP_CONTENT,
+                    ViewGroup.LayoutParams.WRAP_CONTENT
+                )
+            )
+        }
+        countDown(from = 1) { latch ->
+            rule.runOnUiThread {
+                container.setContent {
+                    density = LocalDensity.current
+                    Box(
+                        modifier = Modifier
+                            .requiredSize(ContainerSize)
+                            .onGloballyPositioned { latch.countDown() }
+
+                    ) {
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.TopStart)
+                                .testDropTarget(acceptingTopStartDropTarget)
+                        )
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.TopEnd)
+                                .testDropTarget(acceptingTopEndDropTarget)
+                        )
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.BottomStart)
+                                .testDropTarget(acceptingParentBottomStartDropTarget)
+                        ) {
+                            Box(
+                                modifier = Modifier
+                                    .requiredSize(ChildSize)
+                                    .align(Alignment.BottomStart)
+                                    .testDropTarget(acceptingInnerBottomStartDropTarget)
+                            )
+                            Box(
+                                modifier = Modifier
+                                    .offset(
+                                        x = HalfContainerSize - HalfChildSize,
+                                        y = (HalfParentSize - HalfChildSize)
+                                    )
+                                    .requiredSize(ChildSize)
+                                    .testDropTarget(acceptingOffsetInnerBottomStartDropTarget)
+                            )
+                        }
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.BottomEnd)
+                                .testDropTarget(rejectingParentBottomEndDropTarget)
+                        ) {
+                            Box(
+                                modifier = Modifier
+                                    .requiredSize(ChildSize)
+                                    .align(Alignment.BottomEnd)
+                                    .testDropTarget(acceptingInnerBottomEndDropTarget)
+                            )
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_callsStartOnAllDragAndDropTargetsOn_ACTION_DRAG_STARTED() {
+        rule.runOnUiThread {
+            val dragEvent = DragEvent(
+                action = DragEvent.ACTION_DRAG_STARTED,
+                x = 0f,
+                y = 0f,
+            )
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            // Act
+            val acceptedDrag = androidComposeView.dispatchDragEvent(dragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptedDrag).isTrue()
+
+            // The following modifiers should have all seen the start event
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            // Rejected drag and drop, it should have no start offset
+            Truth.assertThat(rejectingParentBottomEndDropTarget.startOffsets.isEmpty())
+                .isEqualTo(true)
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canEnterThenMoveWithinAndExitWhenDraggedAcross() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move to the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = 0f,
+                    y = 0f,
+                ),
+                // Move across the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfParentSize.toPx() },
+                    y = 0f,
+                ),
+                // Exit the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { (ParentSize + ChildSize).toPx() },
+                    y = 0f,
+                )
+            )
+            val (initialEvent, moveStartEvent, moveEndEvent, exitEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            // Enter at top start
+            Truth.assertThat(acceptingTopStartDropTarget.enterOffsets.first())
+                .isEqualTo(moveStartEvent.offset())
+
+            // Move across top start
+            Truth.assertThat(acceptingTopStartDropTarget.moveOffsets.first())
+                .isEqualTo(moveStartEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.moveOffsets[1])
+                .isEqualTo(moveEndEvent.offset())
+
+            // Exit top start
+            Truth.assertThat(acceptingTopStartDropTarget.exitOffsets.first())
+                .isEqualTo(exitEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_ignoresRejectingParentDropTargetButReachesInnerChild() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move into bottom end
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { (ContainerSize - HalfChildSize).toPx() },
+                    y = with(density) { (ContainerSize - HalfChildSize).toPx() },
+                ),
+            )
+
+            val (initialEvent, moveEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Rejecting parent should have seen no events
+            Truth.assertThat(rejectingParentBottomEndDropTarget.startOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.enterOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.moveOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.exitOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.endedOffsets.isEmpty())
+                .isEqualTo(true)
+
+            // Inner offset child should have received events
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.enterOffsets.first())
+                .isEqualTo(moveEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_reachesInnerDropTargetOffsetOutsideImmediateParent() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move into bottom center where offset child is
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { (ContainerSize - HalfParentSize).toPx() },
+                ),
+            )
+
+            val (initialEvent, moveEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            // The Inner offset child should have seen the enter event
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(moveEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canMoveBetweenTargets() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move across the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = 0f,
+                    y = 0f,
+                ),
+                // Exit the top start and into the top right
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { ContainerSize.toPx() - ParentSize.toPx() },
+                    y = 0f,
+                )
+            )
+
+            val (initialEvent, farStartEvent, startToEndEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            Truth.assertThat(acceptingTopStartDropTarget.enterOffsets.first())
+                .isEqualTo(farStartEvent.offset())
+
+            Truth.assertThat(acceptingTopStartDropTarget.exitOffsets.first())
+                .isEqualTo(startToEndEvent.offset())
+
+            Truth.assertThat(acceptingTopEndDropTarget.enterOffsets.first())
+                .isEqualTo(startToEndEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_multicasts_ACTION_DRAG_ENDED() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // End in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_ENDED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+            )
+
+            val (initialEvent, endEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // The following modifiers should have all seen the start event
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingTopStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingTopEndDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingTopEndDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingParentBottomStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            // Rejected drag and drop, it should have no start or end offset
+            Truth.assertThat(rejectingParentBottomEndDropTarget.startOffsets.isEmpty())
+                .isEqualTo(true)
+            Truth.assertThat(rejectingParentBottomEndDropTarget.endedOffsets.isEmpty())
+                .isEqualTo(true)
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canEnterThenMoveWithinMultipleNodes() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move into top start parent
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfChildSize.toPx() },
+                    y = with(density) { HalfChildSize.toPx() },
+                ),
+                // Move into bottom start parent
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfChildSize.toPx() },
+                    y = with(density) {
+                        (ContainerSize - ChildSize - HalfChildSize).toPx()
+                    },
+                ),
+                // Move into bottom start inner child
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfChildSize.toPx() },
+                    y = with(density) { (ContainerSize - HalfChildSize).toPx() },
+                ),
+                // Move into bottom offset inner child
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { (ContainerSize - HalfParentSize).toPx() },
+                )
+
+            )
+            val (
+                initialEvent,
+                topStartParentEvent,
+                bottomStartParentEvent,
+                bottomStartInnerChildEvent,
+                bottomInnerOffsetChildEvent,
+            ) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            // Enter at top start parent
+            Truth.assertThat(acceptingTopStartDropTarget.enterOffsets.first())
+                .isEqualTo(topStartParentEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.moveOffsets.first())
+                .isEqualTo(topStartParentEvent.offset())
+
+            // Enter at bottom start parent
+            Truth.assertThat(acceptingParentBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(bottomStartParentEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.moveOffsets.first())
+                .isEqualTo(bottomStartParentEvent.offset())
+
+            // Enter at bottom start child
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(bottomStartInnerChildEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.moveOffsets.first())
+                .isEqualTo(bottomStartInnerChildEvent.offset())
+
+            // Enter at bottom offset child
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(bottomInnerOffsetChildEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.moveOffsets.first())
+                .isEqualTo(bottomInnerOffsetChildEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_ignoresNodeThatWasInterestedAndNoLongerIs() {
+        // Create UI with node placed in top start of parent
+        var shouldRenderItem by mutableStateOf(true)
+        val dropTargetHolder = DropTargetModifierHolder(
+            acceptsDragAndDrop = { shouldRenderItem }
+        )
+
+        // Set up UI
+        countDown(from = 1) { latch ->
+            rule.runOnUiThread {
+                container.setContent {
+                    density = LocalDensity.current
+                    Box(
+                        modifier = Modifier
+                            .requiredSize(ContainerSize)
+                            .testDropTarget(dropTargetHolder)
+                            .onGloballyPositioned { latch.countDown() }
+                    )
+                }
+            }
+        }
+
+        val acceptingStartEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_STARTED,
+            x = with(density) { HalfContainerSize.toPx() },
+            y = with(density) { HalfContainerSize.toPx() },
+        )
+        val acceptingEndEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_ENDED,
+            x = with(density) { ParentSize.toPx() },
+            y = with(density) { ParentSize.toPx() },
+        )
+        val rejectingStartEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_STARTED,
+            x = with(density) { HalfParentSize.toPx() },
+            y = with(density) { HalfParentSize.toPx() },
+        )
+        val rejectingEndEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_ENDED,
+            x = with(density) { ChildSize.toPx() },
+            y = with(density) { ChildSize.toPx() },
+        )
+
+        rule.runOnUiThread {
+            val androidComposeView = findAndroidComposeView(container)!!
+
+            // Dispatch accepting start and end
+            androidComposeView.dispatchDragEvent(acceptingStartEvent)
+            androidComposeView.dispatchDragEvent(acceptingEndEvent)
+
+            // Reject events
+            shouldRenderItem = false
+
+            // Dispatch rejecting start and end
+            androidComposeView.dispatchDragEvent(rejectingStartEvent)
+            androidComposeView.dispatchDragEvent(rejectingEndEvent)
+
+            // Assert accepting start and end were seen
+            Truth.assertThat(dropTargetHolder.startOffsets.first())
+                .isEqualTo(acceptingStartEvent.offset())
+            Truth.assertThat(dropTargetHolder.endedOffsets.first())
+                .isEqualTo(acceptingEndEvent.offset())
+
+            // Assert only accepting start and end were seen
+            Truth.assertThat(dropTargetHolder.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(dropTargetHolder.endedOffsets.size)
+                .isEqualTo(1)
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canReactToNodeMoves() {
+        //     start                  end
+        // ┌─────┐─────┐         ┌─────┐─────┐
+        // │     │     │         │     │     │
+        // └─────┘     │   --->  │     └─────┘
+        // │           │         │           │
+        // └───────────┘         └───────────┘
+
+        val androidComposeView = findAndroidComposeView(container)!!
+        var itemOffset by mutableStateOf(IntOffset.Zero)
+        val dropTargetHolder = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+
+        // At the center
+        val initialEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_STARTED,
+            x = with(density) { HalfContainerSize.toPx() },
+            y = with(density) { HalfContainerSize.toPx() },
+        )
+        // Close to top start
+        val eventWhereItemWas = DragEvent(
+            action = DragEvent.ACTION_DRAG_LOCATION,
+            x = with(density) { HalfParentSize.toPx() },
+            y = with(density) { HalfParentSize.toPx() },
+        )
+        // Close to top start
+        val eventWhereItemUsedToBe = DragEvent(
+            action = DragEvent.ACTION_DRAG_LOCATION,
+            x = with(density) { HalfChildSize.toPx() },
+            y = with(density) { HalfChildSize.toPx() },
+        )
+        // Close to bottom end
+        val eventWhereItemIs = DragEvent(
+            action = DragEvent.ACTION_DRAG_LOCATION,
+            x = with(density) { (ContainerSize - HalfParentSize).toPx() },
+            y = with(density) { (ContainerSize - HalfParentSize).toPx() },
+        )
+
+        // Set up UI
+        countDown(from = 2) { latch ->
+            rule.runOnUiThread {
+                // Create UI with node placed in top start of parent
+                container.setContent {
+                    density = LocalDensity.current
+                    Box(
+                        modifier = Modifier
+                            .requiredSize(ContainerSize)
+                            .onGloballyPositioned {
+                                // Start in the center
+                                androidComposeView.dispatchDragEvent(initialEvent)
+                                // Move into item
+                                androidComposeView.dispatchDragEvent(eventWhereItemWas)
+
+                                // Move item to bottom end
+                                itemOffset = IntOffset(
+                                    x = with(density) { (ContainerSize - ParentSize).roundToPx() },
+                                    y = with(density) { (ContainerSize - ParentSize).roundToPx() },
+                                )
+                            }
+
+                    ) {
+                        Box(
+                            modifier = Modifier
+                                .offset { itemOffset }
+                                .requiredSize(ParentSize)
+                                .align(Alignment.TopStart)
+                                .testDropTarget(dropTargetHolder)
+                                .onGloballyPositioned { coordinates ->
+                                    // Item has been moved
+                                    if (coordinates.positionInParent() != Offset.Zero) {
+                                        // Move where item used to be
+                                        androidComposeView.dispatchDragEvent(eventWhereItemUsedToBe)
+
+                                        // Move where item now is
+                                        androidComposeView.dispatchDragEvent(eventWhereItemIs)
+                                    }
+                                    latch.countDown()
+                                }
+                        )
+                    }
+                }
+            }
+        }
+
+        // Assertions
+        Truth.assertThat(dropTargetHolder.startOffsets.first())
+            .isEqualTo(initialEvent.offset())
+
+        // Enter at top start parent
+        Truth.assertThat(dropTargetHolder.enterOffsets.first())
+            .isEqualTo(eventWhereItemWas.offset())
+        Truth.assertThat(dropTargetHolder.moveOffsets.first())
+            .isEqualTo(eventWhereItemWas.offset())
+
+        // The next event seen in the item should be the one that entered after being moved
+        Truth.assertThat(dropTargetHolder.enterOffsets[1])
+            .isEqualTo(eventWhereItemIs.offset())
+        Truth.assertThat(dropTargetHolder.moveOffsets[1])
+            .isEqualTo(eventWhereItemIs.offset())
+
+        // The event where the item used to be should never have been seen by the item
+        Truth.assertThat(
+            dropTargetHolder.enterOffsets.none { offset ->
+                offset == eventWhereItemUsedToBe.offset()
+            }
+        )
+            .isTrue()
+        Truth.assertThat(
+            dropTargetHolder.moveOffsets.none { offset ->
+                offset == eventWhereItemUsedToBe.offset()
+            }
+        )
+            .isTrue()
+    }
+}
+
+/**
+ * Creates a [DragEvent] with the specified coordinates
+ */
+private fun DragEvent(action: Int, x: Float, y: Float): DragEvent {
+    val parcel = Parcel.obtain()
+    parcel.writeInt(action)
+    parcel.writeFloat(x)
+    parcel.writeFloat(y)
+    parcel.writeInt(0) // Result
+    parcel.writeInt(0) // No ClipData
+    parcel.writeInt(0) // No Clip Description
+
+    parcel.setDataPosition(0)
+    return DragEvent.CREATOR.createFromParcel(parcel)
+}
+
+private fun DragEvent.offset() = Offset(
+    x = x,
+    y = y
+)
+
+private fun countDown(from: Int, block: (CountDownLatch) -> Unit) {
+    val countDownLatch = CountDownLatch(from)
+    block(countDownLatch)
+    Truth.assertThat(countDownLatch.await(1, TimeUnit.SECONDS)).isTrue()
+}
+
+private fun Modifier.testDropTarget(holder: DropTargetModifierHolder) = this then holder.modifier
+private class DropTargetModifierHolder(
+    private val acceptsDragAndDrop: () -> Boolean
+) {
+    val startOffsets = mutableListOf<Offset>()
+    val enterOffsets = mutableListOf<Offset>()
+    val moveOffsets = mutableListOf<Offset>()
+    val dropOffsets = mutableListOf<Offset>()
+    val exitOffsets = mutableListOf<Offset>()
+    val endedOffsets = mutableListOf<Offset>()
+
+    @OptIn(ExperimentalFoundationApi::class)
+    val modifier = Modifier.dragAndDropTarget(
+        onStarted = {
+            val accepts = acceptsDragAndDrop()
+            if (accepts) startOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+            accepts
+        },
+        onEntered = {
+            enterOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        },
+        onMoved = {
+            moveOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        },
+        onDropped = {
+            dropOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+            true
+        },
+        onExited = {
+            exitOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        },
+        onEnded = {
+            endedOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        }
+    )
+}
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt
index cff9158..0d97c19 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt
@@ -1456,6 +1456,68 @@
         }
     }
 
+    // Repro test for b/298520326. Unfortunately, this test does not successfully reproduce the
+    // issue prior to the "fix", so is not a valid regression test. The act of calling
+    // `captureToImage()` causes the bug to disappear.
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    @Test
+    fun removingGraphicsLayerInvalidatesParentLayer2() {
+        var toggle by mutableStateOf(false)
+        val size = 100
+        rule.setContent {
+            val sizeDp = with(LocalDensity.current) { size.toDp() }
+            Box(
+                Modifier
+                    .testTag("outer")
+                    .layout { measurable, constraints ->
+                        val placeable = measurable.measure(constraints)
+                        layout(placeable.width, placeable.height) {
+                            placeable.place(0, 0)
+                        }
+                    }
+                    .then(
+                        if (toggle) Modifier
+                            .graphicsLayer(scaleX = 1f)
+                            .layout { measurable, constraints ->
+                                val placeable = measurable.measure(constraints)
+                                layout(placeable.width, placeable.height) {
+                                    placeable.place(0, 0)
+                                }
+                            }
+                        else Modifier
+                    )
+            ) {
+                Box(
+                    Modifier
+                        .background(Color.Red)
+                        .size(sizeDp)
+                )
+            }
+        }
+
+        val pt = (size * 0.5f).roundToInt()
+
+        rule.onNodeWithTag("outer").captureToImage().asAndroidBitmap().apply {
+            assertEquals(Color.Red.toArgb(), getPixel(pt, pt))
+        }
+
+        rule.runOnIdle {
+            toggle = !toggle
+        }
+
+        rule.onNodeWithTag("outer").captureToImage().asAndroidBitmap().apply {
+            assertEquals(Color.Red.toArgb(), getPixel(pt, pt))
+        }
+
+        rule.runOnIdle {
+            toggle = !toggle
+        }
+
+        rule.onNodeWithTag("outer").captureToImage().asAndroidBitmap().apply {
+            assertEquals(Color.Red.toArgb(), getPixel(pt, pt))
+        }
+    }
+
     @Test
     fun removingGraphicsLayerModifierResetsItsAction() {
         var addGraphicsLayer by mutableStateOf(true)
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
index a367f75..19a8565 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
@@ -29,12 +29,8 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.hapticfeedback.HapticFeedback
 import androidx.compose.ui.input.InputModeManager
 import androidx.compose.ui.input.key.KeyEvent
@@ -3752,23 +3748,7 @@
     ): OwnedLayer {
         return object : OwnedLayer {
             override fun updateLayerProperties(
-                scaleX: Float,
-                scaleY: Float,
-                alpha: Float,
-                translationX: Float,
-                translationY: Float,
-                shadowElevation: Float,
-                rotationX: Float,
-                rotationY: Float,
-                rotationZ: Float,
-                cameraDistance: Float,
-                transformOrigin: TransformOrigin,
-                shape: Shape,
-                clip: Boolean,
-                renderEffect: RenderEffect?,
-                ambientShadowColor: Color,
-                spotShadowColor: Color,
-                compositingStrategy: CompositingStrategy,
+                scope: ReusableGraphicsLayerScope,
                 layoutDirection: LayoutDirection,
                 density: Density
             ) {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
index a7a3aa9..7187d69 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
@@ -24,12 +24,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.hapticfeedback.HapticFeedback
 import androidx.compose.ui.input.InputModeManager
 import androidx.compose.ui.input.key.KeyEvent
@@ -543,23 +539,7 @@
 internal open class MockLayer() : OwnedLayer {
 
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
         density: Density
     ) {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt
index b23f263..bec5a59 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt
@@ -21,9 +21,10 @@
 
 /**
  * Remove the root modifier nodes as they are not relevant from the perspective of the tests.
- * There are 4 nodes: KeyInputNode, FocusTargetNode, RotaryInputNode and SemanticsNode.
+ * There are 5 nodes:
+ * KeyInputNode, FocusTargetNode, RotaryInputNode, SemanticsNode and DragAndDropNode.
  */
-internal fun <T> List<T>.trimRootModifierNodes(): List<T> = dropLast(4)
+internal fun <T> List<T>.trimRootModifierNodes(): List<T> = dropLast(5)
 
 internal fun Modifier.elementOf(node: Modifier.Node): Modifier {
     return this.then(ElementOf { node })
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt
index f0ebab1..b8c1b0b 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt
@@ -21,14 +21,12 @@
 import android.view.View
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
-import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.LayoutDirection
 
 /**
- * Draws a drag shadow for a [View.DragShadowBuilder] with a [Painter].
- * If there is no painter provided in [dragAndDropInfo], it will attempt to create a default by trying to
- * copy pixels in the rect bounded by the dragged item.
+ * Draws a drag shadow for a [View.DragShadowBuilder] with the DrawScope lambda
+ * provided by [DragAndDropInfo.onDrawDragShadow].
  */
 internal class ComposeDragShadowBuilder(
     private val density: Density,
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt
index dfe7d4e..38265fe 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt
@@ -19,6 +19,7 @@
 import android.content.ClipData
 import android.view.DragEvent
 import android.view.View
+import androidx.collection.ArraySet
 import androidx.compose.ui.geometry.Offset
 
 /**
@@ -46,17 +47,27 @@
  * Android [DragAndDropEvent] which delegates to a [DragEvent]
  */
 actual class DragAndDropEvent(
-    /**
-     * An indication of the reason the drag and drop event was sent
-     */
-    actual var type: DragAndDropEventType,
-    internal var dragEvent: DragEvent
+    internal val dragEvent: DragEvent,
+    internal actual val interestedNodes: ArraySet<DragAndDropModifierNode> = ArraySet()
 )
 
 /**
  * Returns the backing [DragEvent] to read platform specific data
  */
-val DragAndDropEvent.dragEvent get() = this.dragEvent
+val DragAndDropEvent.dragEvent: DragEvent get() = this.dragEvent
+
+/**
+ * The mime types present in a [DragAndDropEvent]
+ */
+// TODO (TJ) make this expect/actual when desktop implements
+fun DragAndDropEvent.mimeTypes(): Set<String> {
+    val clipDescription = dragEvent.clipDescription ?: return emptySet()
+    return buildSet(clipDescription.mimeTypeCount) {
+        for (i in 0 until clipDescription.mimeTypeCount) {
+            add(clipDescription.getMimeType(i))
+        }
+    }
+}
 
 internal actual val DragAndDropEvent.positionInRoot: Offset
     get() = Offset(
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
index 5859ede..0b9ce6d 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
@@ -26,6 +26,7 @@
 import android.util.Log
 import android.util.LongSparseArray
 import android.util.SparseArray
+import android.view.DragEvent
 import android.view.KeyEvent as AndroidKeyEvent
 import android.view.MotionEvent
 import android.view.MotionEvent.ACTION_CANCEL
@@ -54,6 +55,7 @@
 import androidx.annotation.DoNotInline
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
+import androidx.collection.ArraySet
 import androidx.compose.runtime.collection.mutableVectorOf
 import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
@@ -71,7 +73,11 @@
 import androidx.compose.ui.autofill.performAutofill
 import androidx.compose.ui.autofill.populateViewStructure
 import androidx.compose.ui.draganddrop.ComposeDragShadowBuilder
+import androidx.compose.ui.draganddrop.DragAndDropEvent
+import androidx.compose.ui.draganddrop.DragAndDropEventType
 import androidx.compose.ui.draganddrop.DragAndDropInfo
+import androidx.compose.ui.draganddrop.DragAndDropModifierNode
+import androidx.compose.ui.draganddrop.DragAndDropNode
 import androidx.compose.ui.focus.FocusDirection
 import androidx.compose.ui.focus.FocusDirection.Companion.Down
 import androidx.compose.ui.focus.FocusDirection.Companion.Exit
@@ -129,6 +135,7 @@
 import androidx.compose.ui.node.LayoutNode.UsageByParent
 import androidx.compose.ui.node.LayoutNodeDrawScope
 import androidx.compose.ui.node.MeasureAndLayoutDelegate
+import androidx.compose.ui.node.ModifierNodeElement
 import androidx.compose.ui.node.Nodes
 import androidx.compose.ui.node.OwnedLayer
 import androidx.compose.ui.node.Owner
@@ -230,6 +237,8 @@
         false
     }
 
+    private val dragAndDropModifierOnDragListener = DragAndDropModifierOnDragListener()
+
     private val canvasHolder = CanvasHolder()
 
     override val root = LayoutNode().also {
@@ -241,6 +250,7 @@
             .then(rotaryInputModifier)
             .then(focusOwner.modifier)
             .then(keyInputModifier)
+            .then(dragAndDropModifierOnDragListener.modifier)
     }
 
     override val rootForTest: RootForTest = this
@@ -601,6 +611,7 @@
         clipChildren = false
         ViewCompat.setAccessibilityDelegate(this, accessibilityDelegate)
         ViewRootForTest.onViewCreatedCallback?.invoke(this)
+        setOnDragListener(dragAndDropModifierOnDragListener)
         root.attach(this)
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
             // Support for this feature in Compose is tracked here: b/207654434
@@ -2211,3 +2222,54 @@
         dragAndDropInfo.transfer.flags,
     )
 }
+
+/**
+ * A Class that provides access [View.OnDragListener] APIs for a [DragAndDropNode].
+ */
+private class DragAndDropModifierOnDragListener : View.OnDragListener {
+
+    private val rootDragAndDropNode = DragAndDropNode { null }
+    // TODO (TJ): Move this into the Owner
+    private val interestedNodes = ArraySet<DragAndDropModifierNode>()
+
+    val modifier: Modifier = object : ModifierNodeElement<DragAndDropNode>() {
+        override fun create() = rootDragAndDropNode
+
+        override fun update(node: DragAndDropNode) = Unit
+
+        override fun InspectorInfo.inspectableProperties() {
+            name = "RootDragAndDropNode"
+        }
+
+        override fun hashCode(): Int = rootDragAndDropNode.hashCode()
+
+        override fun equals(other: Any?) = other === this
+    }
+
+    override fun onDrag(
+        view: View,
+        event: DragEvent
+    ): Boolean = rootDragAndDropNode.onDragAndDropEvent(
+        event = DragAndDropEvent(
+            dragEvent = event,
+            interestedNodes = interestedNodes
+        ),
+        type = when (event.action) {
+            DragEvent.ACTION_DRAG_STARTED -> DragAndDropEventType.Started
+
+            DragEvent.ACTION_DRAG_ENTERED -> DragAndDropEventType.Entered
+
+            DragEvent.ACTION_DRAG_LOCATION -> DragAndDropEventType.Moved
+
+            DragEvent.ACTION_DRAG_EXITED -> DragAndDropEventType.Exited
+
+            DragEvent.ACTION_DROP -> DragAndDropEventType.Dropped
+
+            DragEvent.ACTION_DRAG_ENDED -> DragAndDropEventType.Ended.also {
+                interestedNodes.clear()
+            }
+
+            else -> DragAndDropEventType.Unknown
+        }
+    )
+}
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
index 3646246..2988fc8 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
@@ -436,7 +436,14 @@
         vertical: Boolean,
         direction: Int,
         position: Offset
-    ): Boolean = canScroll(currentSemanticsNodes.values, vertical, direction, position)
+    ): Boolean {
+        // Workaround for access from bg thread, it is not supported by semantics (b/298159434)
+        if (Looper.getMainLooper().thread != Thread.currentThread()) {
+            return false
+        }
+
+        return canScroll(currentSemanticsNodes.values, vertical, direction, position)
+    }
 
     @VisibleForTesting
     internal fun canScroll(
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
index 2476012..3f3987c 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
@@ -24,13 +24,11 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.CanvasHolder
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
+import androidx.compose.ui.graphics.Fields
 import androidx.compose.ui.graphics.Matrix
 import androidx.compose.ui.graphics.Paint
 import androidx.compose.ui.graphics.RectangleShape
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.nativeCanvas
 import androidx.compose.ui.graphics.toArgb
@@ -107,57 +105,83 @@
         fun getUniqueDrawingId(view: View) = view.uniqueDrawingId
     }
 
+    private var mutatedFields: Int = 0
+
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     ) {
-        this.transformOrigin = transformOrigin
+        val maybeChangedFields = scope.mutatedFields or mutatedFields
+        if (maybeChangedFields and Fields.TransformOrigin != 0) {
+            this.transformOrigin = scope.transformOrigin
+        }
         val wasClippingManually = renderNode.clipToOutline && !outlineResolver.outlineClipSupported
-        renderNode.scaleX = scaleX
-        renderNode.scaleY = scaleY
-        renderNode.alpha = alpha
-        renderNode.translationX = translationX
-        renderNode.translationY = translationY
-        renderNode.elevation = shadowElevation
-        renderNode.ambientShadowColor = ambientShadowColor.toArgb()
-        renderNode.spotShadowColor = spotShadowColor.toArgb()
-        renderNode.rotationZ = rotationZ
-        renderNode.rotationX = rotationX
-        renderNode.rotationY = rotationY
-        renderNode.cameraDistance = cameraDistance
-        renderNode.pivotX = transformOrigin.pivotFractionX * renderNode.width
-        renderNode.pivotY = transformOrigin.pivotFractionY * renderNode.height
-        renderNode.clipToOutline = clip && shape !== RectangleShape
-        renderNode.clipToBounds = clip && shape === RectangleShape
-        renderNode.renderEffect = renderEffect
-        renderNode.compositingStrategy = compositingStrategy
-        val shapeChanged = outlineResolver.update(
-            shape,
-            renderNode.alpha,
-            renderNode.clipToOutline,
-            renderNode.elevation,
-            layoutDirection,
-            density
-        )
-        renderNode.setOutline(outlineResolver.outline)
-        val isClippingManually = renderNode.clipToOutline && !outlineResolver.outlineClipSupported
+        if (maybeChangedFields and Fields.ScaleX != 0) {
+            renderNode.scaleX = scope.scaleX
+        }
+        if (maybeChangedFields and Fields.ScaleY != 0) {
+            renderNode.scaleY = scope.scaleY
+        }
+        if (maybeChangedFields and Fields.Alpha != 0) {
+            renderNode.alpha = scope.alpha
+        }
+        if (maybeChangedFields and Fields.TranslationX != 0) {
+            renderNode.translationX = scope.translationX
+        }
+        if (maybeChangedFields and Fields.TranslationY != 0) {
+            renderNode.translationY = scope.translationY
+        }
+        if (maybeChangedFields and Fields.ShadowElevation != 0) {
+            renderNode.elevation = scope.shadowElevation
+        }
+        if (maybeChangedFields and Fields.AmbientShadowColor != 0) {
+            renderNode.ambientShadowColor = scope.ambientShadowColor.toArgb()
+        }
+        if (maybeChangedFields and Fields.SpotShadowColor != 0) {
+            renderNode.spotShadowColor = scope.spotShadowColor.toArgb()
+        }
+        if (maybeChangedFields and Fields.RotationZ != 0) {
+            renderNode.rotationZ = scope.rotationZ
+        }
+        if (maybeChangedFields and Fields.RotationX != 0) {
+            renderNode.rotationX = scope.rotationX
+        }
+        if (maybeChangedFields and Fields.RotationY != 0) {
+            renderNode.rotationY = scope.rotationY
+        }
+        if (maybeChangedFields and Fields.CameraDistance != 0) {
+            renderNode.cameraDistance = scope.cameraDistance
+        }
+        if (maybeChangedFields and Fields.TransformOrigin != 0) {
+            renderNode.pivotX = transformOrigin.pivotFractionX * renderNode.width
+            renderNode.pivotY = transformOrigin.pivotFractionY * renderNode.height
+        }
+        val clipToOutline = scope.clip && scope.shape !== RectangleShape
+        if (maybeChangedFields and (Fields.Clip or Fields.Shape) != 0) {
+            renderNode.clipToOutline = clipToOutline
+            renderNode.clipToBounds = scope.clip && scope.shape === RectangleShape
+        }
+        if (maybeChangedFields and Fields.RenderEffect != 0) {
+            renderNode.renderEffect = scope.renderEffect
+        }
+        if (maybeChangedFields and Fields.CompositingStrategy != 0) {
+            renderNode.compositingStrategy = scope.compositingStrategy
+        }
+        // Note that we an safely leave Fields.Alpha out of this because it
+        val shapeChanged = if (maybeChangedFields and Fields.OutlineAffectingFields != 0) {
+            outlineResolver.update(
+                scope.shape,
+                renderNode.alpha,
+                renderNode.clipToOutline,
+                renderNode.elevation,
+                layoutDirection,
+                density
+            ).also {
+                renderNode.setOutline(outlineResolver.outline)
+            }
+        } else false
+        val isClippingManually = clipToOutline && !outlineResolver.outlineClipSupported
         if (wasClippingManually != isClippingManually || (isClippingManually && shapeChanged)) {
             invalidate()
         } else {
@@ -166,7 +190,12 @@
         if (!drawnWithZ && renderNode.elevation > 0f) {
             invalidateParentLayer?.invoke()
         }
-        matrixCache.invalidate()
+
+        if (maybeChangedFields and Fields.MatrixAffectingFields != 0) {
+            matrixCache.invalidate()
+        }
+
+        mutatedFields = scope.mutatedFields
     }
 
     override fun isInLayer(position: Offset): Boolean {
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
index dbf1063..6ed59e9 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
@@ -26,13 +26,13 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.CanvasHolder
-import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.CompositingStrategy
+import androidx.compose.ui.graphics.Fields
 import androidx.compose.ui.graphics.Matrix
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.layout.GraphicLayerInfo
@@ -124,53 +124,67 @@
             cameraDistance = value * resources.displayMetrics.densityDpi
         }
 
+    private var mutatedFields: Int = 0
+
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     ) {
-        this.mTransformOrigin = transformOrigin
-        this.scaleX = scaleX
-        this.scaleY = scaleY
-        this.alpha = alpha
-        this.translationX = translationX
-        this.translationY = translationY
-        this.elevation = shadowElevation
-        this.rotation = rotationZ
-        this.rotationX = rotationX
-        this.rotationY = rotationY
-        this.pivotX = mTransformOrigin.pivotFractionX * width
-        this.pivotY = mTransformOrigin.pivotFractionY * height
-        this.cameraDistancePx = cameraDistance
-        this.clipToBounds = clip && shape === RectangleShape
-        resetClipBounds()
+        val maybeChangedFields = scope.mutatedFields or mutatedFields
+        if (maybeChangedFields and Fields.TransformOrigin != 0) {
+            this.mTransformOrigin = scope.transformOrigin
+            this.pivotX = mTransformOrigin.pivotFractionX * width
+            this.pivotY = mTransformOrigin.pivotFractionY * height
+        }
+        if (maybeChangedFields and Fields.ScaleY != 0) {
+            this.scaleX = scope.scaleX
+        }
+        if (maybeChangedFields and Fields.ScaleY != 0) {
+            this.scaleY = scope.scaleY
+        }
+        if (maybeChangedFields and Fields.Alpha != 0) {
+            this.alpha = scope.alpha
+        }
+        if (maybeChangedFields and Fields.TranslationX != 0) {
+            this.translationX = scope.translationX
+        }
+        if (maybeChangedFields and Fields.TranslationY != 0) {
+            this.translationY = scope.translationY
+        }
+        if (maybeChangedFields and Fields.ShadowElevation != 0) {
+            this.elevation = scope.shadowElevation
+        }
+        if (maybeChangedFields and Fields.RotationZ != 0) {
+            this.rotation = scope.rotationZ
+        }
+        if (maybeChangedFields and Fields.RotationX != 0) {
+            this.rotationX = scope.rotationX
+        }
+        if (maybeChangedFields and Fields.RotationY != 0) {
+            this.rotationY = scope.rotationY
+        }
+        if (maybeChangedFields and Fields.CameraDistance != 0) {
+            this.cameraDistancePx = scope.cameraDistance
+        }
         val wasClippingManually = manualClipPath != null
-        this.clipToOutline = clip && shape !== RectangleShape
-        val shapeChanged = outlineResolver.update(
-            shape,
-            this.alpha,
-            this.clipToOutline,
-            this.elevation,
-            layoutDirection,
-            density
-        )
-        updateOutlineResolver()
+        if (maybeChangedFields and (Fields.Clip or Fields.Shape) != 0) {
+            this.clipToBounds = scope.clip && scope.shape === RectangleShape
+            resetClipBounds()
+            this.clipToOutline = scope.clip && scope.shape !== RectangleShape
+        }
+        val shapeChanged = if (maybeChangedFields and Fields.OutlineAffectingFields != 0) {
+            outlineResolver.update(
+                scope.shape,
+                this.alpha,
+                this.clipToOutline,
+                this.elevation,
+                layoutDirection,
+                density
+            ).also {
+                updateOutlineResolver()
+            }
+        } else false
         val isClippingManually = manualClipPath != null
         if (wasClippingManually != isClippingManually || (isClippingManually && shapeChanged)) {
             invalidate() // have to redraw the content
@@ -178,33 +192,48 @@
         if (!drawnWithZ && elevation > 0) {
             invalidateParentLayer?.invoke()
         }
-        matrixCache.invalidate()
+        if (maybeChangedFields and Fields.MatrixAffectingFields != 0) {
+            matrixCache.invalidate()
+        }
         if (Build.VERSION.SDK_INT >= 28) {
-            ViewLayerVerificationHelper28.setOutlineAmbientShadowColor(
-                this,
-                ambientShadowColor.toArgb()
-            )
-            ViewLayerVerificationHelper28.setOutlineSpotShadowColor(this, spotShadowColor.toArgb())
+            if (maybeChangedFields and Fields.AmbientShadowColor != 0) {
+                ViewLayerVerificationHelper28.setOutlineAmbientShadowColor(
+                    this,
+                    scope.ambientShadowColor.toArgb()
+                )
+            }
+            if (maybeChangedFields and Fields.SpotShadowColor != 0) {
+                ViewLayerVerificationHelper28.setOutlineSpotShadowColor(
+                    this,
+                    scope.spotShadowColor.toArgb()
+                )
+            }
         }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
-            ViewLayerVerificationHelper31.setRenderEffect(this, renderEffect)
-        }
-
-        mHasOverlappingRendering = when (compositingStrategy) {
-            CompositingStrategy.Offscreen -> {
-                setLayerType(LAYER_TYPE_HARDWARE, null)
-                true
-            }
-
-            CompositingStrategy.ModulateAlpha -> {
-                setLayerType(LAYER_TYPE_NONE, null)
-                false
-            }
-            else -> { // CompositingStrategy.Auto
-                setLayerType(LAYER_TYPE_NONE, null)
-                true
+            if (maybeChangedFields and Fields.RenderEffect != 0) {
+                ViewLayerVerificationHelper31.setRenderEffect(this, scope.renderEffect)
             }
         }
+
+        if (maybeChangedFields and Fields.CompositingStrategy != 0) {
+            mHasOverlappingRendering = when (scope.compositingStrategy) {
+                CompositingStrategy.Offscreen -> {
+                    setLayerType(LAYER_TYPE_HARDWARE, null)
+                    true
+                }
+
+                CompositingStrategy.ModulateAlpha -> {
+                    setLayerType(LAYER_TYPE_NONE, null)
+                    false
+                }
+
+                else -> { // CompositingStrategy.Auto
+                    setLayerType(LAYER_TYPE_NONE, null)
+                    true
+                }
+            }
+        }
+        mutatedFields = scope.mutatedFields
     }
 
     override fun hasOverlappingRendering(): Boolean {
diff --git a/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt b/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
index 8a9f3ad..ab3b685 100644
--- a/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
+++ b/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
@@ -28,11 +28,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.drawscope.ContentDrawScope
 import androidx.compose.ui.graphics.graphicsLayer
@@ -2636,31 +2633,15 @@
         val inverseTransform = Matrix()
         return object : OwnedLayer {
             override fun updateLayerProperties(
-                scaleX: Float,
-                scaleY: Float,
-                alpha: Float,
-                translationX: Float,
-                translationY: Float,
-                shadowElevation: Float,
-                rotationX: Float,
-                rotationY: Float,
-                rotationZ: Float,
-                cameraDistance: Float,
-                transformOrigin: TransformOrigin,
-                shape: Shape,
-                clip: Boolean,
-                renderEffect: RenderEffect?,
-                ambientShadowColor: Color,
-                spotShadowColor: Color,
-                compositingStrategy: CompositingStrategy,
+                scope: ReusableGraphicsLayerScope,
                 layoutDirection: LayoutDirection,
                 density: Density
             ) {
                 transform.reset()
                 // This is not expected to be 100% accurate
-                transform.scale(scaleX, scaleY)
-                transform.rotateZ(rotationZ)
-                transform.translate(translationX, translationY)
+                transform.scale(scope.scaleX, scope.scaleY)
+                transform.rotateZ(scope.rotationZ)
+                transform.translate(scope.translationX, scope.translationY)
                 transform.invertTo(inverseTransform)
             }
 
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt
index de73bd3..8fca1a1 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.ui.draganddrop
 
+import androidx.collection.ArraySet
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.drawscope.DrawScope
@@ -90,11 +91,13 @@
  * A representation of an event sent by the platform during a drag and drop operation.
  */
 expect class DragAndDropEvent {
+    // TODO: Move this to the Owner interface
     /**
-     * An indication of the reason the drag and drop event was sent
+     * A collection [DragAndDropModifierNode] instances that registered interested in a
+     * drag and drop session by returning true in [DragAndDropModifierNode.onDragAndDropEvent]
+     * with a [DragAndDropEventType.Started] type.
      */
-    var type: DragAndDropEventType
-        private set
+    internal val interestedNodes: ArraySet<DragAndDropModifierNode>
 }
 
 /**
@@ -120,3 +123,28 @@
      */
     val onDrawDragShadow: DrawScope.() -> Unit,
 )
+
+/**
+ * This represents the target of a drag and drop action
+ */
+fun interface DragAndDropTarget {
+
+    /** An event has occurred in a drag and drop session.
+     * @return When the [type] is [DragAndDropEventType.Started], true indicates interest in the
+     * [DragAndDropEvent], while false indicates disinterest. A [DragAndDropTarget] that returns
+     * false for an event should no longer see future events for this drag and drop session.
+     * When the [type] is [DragAndDropEventType.Dropped], true indicates acceptance of the
+     * [DragAndDropEvent] while false a rejection of the event.
+     * For all other [DragAndDropEventType] values, false is returned.
+     */
+    fun onDragAndDropEvent(
+        /**
+         * The event containing information about the drag and drop action
+         */
+        event: DragAndDropEvent,
+        /**
+         * The type of the [DragAndDropEvent]
+         */
+        type: DragAndDropEventType
+    ): Boolean
+}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDropNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDropNode.kt
new file mode 100644
index 0000000..6253635
--- /dev/null
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDropNode.kt
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2023 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 androidx.compose.ui.draganddrop
+
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.layout.positionInRoot
+import androidx.compose.ui.node.DelegatableNode
+import androidx.compose.ui.node.TraversableNode
+import androidx.compose.ui.node.requireLayoutNode
+import androidx.compose.ui.node.requireOwner
+import androidx.compose.ui.node.traverseChildren
+import androidx.compose.ui.node.traverseSubtreeWithKey
+
+/**
+ * A [Modifier.Node] providing low level access to platform drag and drop operations.
+ * In most cases, you will want to delegate to the [DragAndDropModifierNode] returned by
+ * the eponymous factory method.
+ */
+interface DragAndDropModifierNode : DelegatableNode, DragAndDropTarget {
+    /**
+     * Begins a drag and drop operation with the contents of [dragAndDropInfo]
+     */
+    fun drag(dragAndDropInfo: DragAndDropInfo)
+}
+
+/**
+ * Creates a [Modifier.Node] for integrating with platform level drag and drop events. All
+ * [DragAndDropModifierNode] instances provided by this function may start drag and drop events
+ * by calling [DragAndDropModifierNode.drag].
+ * @param onDragAndDropEvent a provider of a [DragAndDropTarget] that allows this [Modifier.Node]
+ * receive platform drag and drop events. If one is not provided, platform drag and drop events
+ * will always be rejected.
+ */
+fun DragAndDropModifierNode(
+    onDragAndDropEvent: (event: DragAndDropEvent) -> DragAndDropTarget? = { null }
+): DragAndDropModifierNode = DragAndDropNode(onDragAndDropEvent)
+
+/**
+ * Core implementation of drag and drop. This [Modifier.Node] implements tree traversal for
+ * drag and drop, as well as hit testing and propagation of events for drag or drop gestures.
+ *
+ * It uses the [DragAndDropEvent] as a representation of a single mutable drag and drop session.
+ */
+internal class DragAndDropNode(
+    private val onDragAndDropEvent: (event: DragAndDropEvent) -> DragAndDropTarget?
+) : Modifier.Node(),
+    TraversableNode,
+    DragAndDropModifierNode {
+    companion object {
+        private object DragAndDropTraversableKey
+
+        private inline fun DragAndDropModifierNode.firstChildOrNull(
+            crossinline predicate: (DragAndDropModifierNode) -> Boolean
+        ): DragAndDropModifierNode? {
+            var match: DragAndDropModifierNode? = null
+            traverseSubtreeWithKey(DragAndDropTraversableKey) { child ->
+                if (child is DragAndDropModifierNode && predicate(child)) {
+                    match = child
+                    return@traverseSubtreeWithKey false
+                }
+                true
+            }
+            return match
+        }
+    }
+
+    override val traverseKey: Any = DragAndDropTraversableKey
+
+    /** Child currently receiving drag gestures for dropping into **/
+    private var lastChildDragAndDropModifierNode: DragAndDropModifierNode? = null
+
+    /** This as a drop target if eligible for processing **/
+    private var thisDragAndDropTarget: DragAndDropTarget? = null
+
+    // start Node
+    override fun onDetach() {
+        // Clean up
+        thisDragAndDropTarget = null
+    }
+    // end Node
+
+    // start DragSource
+
+    override fun drag(dragAndDropInfo: DragAndDropInfo) {
+        requireOwner().drag(dragAndDropInfo)
+    }
+
+    // end DragSource
+
+    // start DropTarget
+    override fun onDragAndDropEvent(event: DragAndDropEvent, type: DragAndDropEventType): Boolean {
+        when (type) {
+            DragAndDropEventType.Started -> return onStarted(event)
+            DragAndDropEventType.Dropped -> return onDropped(event)
+            DragAndDropEventType.Entered -> onEntered(event)
+            DragAndDropEventType.Moved -> onMoved(event)
+            DragAndDropEventType.Exited -> onExited(event)
+            DragAndDropEventType.Changed -> onChanged(event)
+            DragAndDropEventType.Ended -> onEnded(event)
+        }
+        return false
+    }
+
+    private fun onStarted(event: DragAndDropEvent): Boolean {
+        check(thisDragAndDropTarget == null) {
+            "DragAndDropTarget self reference must be null at the start of a drag and drop session"
+        }
+
+        // Start receiving events
+        thisDragAndDropTarget = onDragAndDropEvent(event)
+
+        var handledByChild = false
+
+        traverseChildren { child ->
+            handledByChild = handledByChild or child.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Started
+            ).also { accepted ->
+                // TODO (TJ) add interested nodes to the Owner
+                if (accepted) event.interestedNodes.add(child)
+            }
+            true
+        }
+
+        return handledByChild || thisDragAndDropTarget != null
+    }
+
+    private fun onEntered(event: DragAndDropEvent) {
+        when (val self = thisDragAndDropTarget) {
+            null -> lastChildDragAndDropModifierNode?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Entered
+            )
+
+            else -> self.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Entered
+            )
+        }
+    }
+
+    private fun onMoved(event: DragAndDropEvent) {
+        val currentChildNode: DragAndDropModifierNode? = lastChildDragAndDropModifierNode
+        val newChildNode: DragAndDropModifierNode? = when {
+            // Moved within child.
+            currentChildNode?.contains(event.positionInRoot) == true -> currentChildNode
+            // Position is now outside active child, maybe it entered a different one.
+            else -> firstChildOrNull { child ->
+                // Only dispatch to children who previously accepted the onStart gesture
+                // TODO (TJ) read interested nodes from Owner
+                event.interestedNodes.contains(child) && child.contains(event.positionInRoot)
+            }
+        }
+
+        when {
+            // Left us and went to a child.
+            newChildNode != null && currentChildNode == null -> {
+                thisDragAndDropTarget?.onDragAndDropEvent(
+                    event = event,
+                    type = DragAndDropEventType.Exited
+                )
+                newChildNode.dispatchEntered(event)
+            }
+            // Left the child and returned to us.
+            newChildNode == null && currentChildNode != null -> {
+                currentChildNode.onDragAndDropEvent(
+                    event = event,
+                    type = DragAndDropEventType.Exited
+                )
+                thisDragAndDropTarget?.dispatchEntered(event)
+            }
+            // Left one child and entered another.
+            newChildNode != currentChildNode -> {
+                currentChildNode?.onDragAndDropEvent(
+                    event = event,
+                    type = DragAndDropEventType.Exited
+                )
+                newChildNode?.dispatchEntered(event)
+            }
+            // Stayed in the same child.
+            newChildNode != null -> newChildNode.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Moved
+            )
+            // Stayed in us.
+            else -> thisDragAndDropTarget?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Moved
+            )
+        }
+
+        [email protected] = newChildNode
+    }
+
+    private fun onChanged(event: DragAndDropEvent) {
+        when (val self = thisDragAndDropTarget) {
+            null -> lastChildDragAndDropModifierNode?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Changed
+            )
+
+            else -> self.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Changed
+            )
+        }
+    }
+
+    private fun onExited(event: DragAndDropEvent) {
+        thisDragAndDropTarget?.onDragAndDropEvent(
+            event = event,
+            type = DragAndDropEventType.Exited
+        )
+        lastChildDragAndDropModifierNode?.onDragAndDropEvent(
+            event = event,
+            type = DragAndDropEventType.Exited
+        )
+        lastChildDragAndDropModifierNode = null
+    }
+
+    private fun onDropped(event: DragAndDropEvent): Boolean {
+        return when (val currentChildDropTarget = lastChildDragAndDropModifierNode) {
+            null -> thisDragAndDropTarget?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Dropped
+            ) ?: false
+
+            else -> currentChildDropTarget.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Dropped
+            )
+        }
+    }
+
+    private fun onEnded(event: DragAndDropEvent) {
+        traverseChildren { child ->
+            child.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Ended
+            )
+            true
+        }
+        thisDragAndDropTarget?.onDragAndDropEvent(
+            event = event,
+            type = DragAndDropEventType.Ended
+        )
+        thisDragAndDropTarget = null
+        lastChildDragAndDropModifierNode = null
+        // TODO (TJ) Clear interested nodes on the Owner
+        event.interestedNodes.clear()
+    }
+    // end DropTarget
+}
+
+private fun DragAndDropTarget.dispatchEntered(event: DragAndDropEvent) = run {
+    // Notify of entry
+    onDragAndDropEvent(event, DragAndDropEventType.Entered)
+    // Start move
+    onDragAndDropEvent(event, DragAndDropEventType.Moved)
+}
+
+/**
+ * Hit test for a [DragAndDropNode].
+ */
+private fun DragAndDropModifierNode.contains(position: Offset): Boolean {
+    if (!node.isAttached) return false
+    val currentCoordinates = requireLayoutNode().coordinates
+    if (!currentCoordinates.isAttached) return false
+
+    val (width, height) = currentCoordinates.size
+    val (x1, y1) = currentCoordinates.positionInRoot()
+    val x2 = x1 + width
+    val y2 = y1 + height
+
+    return position.x in x1..x2 && position.y in y1..y2
+}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
index 783a2c3..d57300c 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
@@ -222,24 +222,129 @@
  */
 fun GraphicsLayerScope(): GraphicsLayerScope = ReusableGraphicsLayerScope()
 
+internal object Fields {
+    const val ScaleX: Int = 0b1 shl 0
+    const val ScaleY: Int = 0b1 shl 1
+    const val Alpha: Int = 0b1 shl 2
+    const val TranslationX: Int = 0b1 shl 3
+    const val TranslationY: Int = 0b1 shl 4
+    const val ShadowElevation: Int = 0b1 shl 5
+    const val AmbientShadowColor: Int = 0b1 shl 6
+    const val SpotShadowColor: Int = 0b1 shl 7
+    const val RotationX: Int = 0b1 shl 8
+    const val RotationY: Int = 0b1 shl 9
+    const val RotationZ: Int = 0b1 shl 10
+    const val CameraDistance: Int = 0b1 shl 11
+    const val TransformOrigin: Int = 0b1 shl 12
+    const val Shape: Int = 0b1 shl 13
+    const val Clip: Int = 0b1 shl 14
+    const val CompositingStrategy: Int = 0b1 shl 15
+    const val Size: Int = 0b1 shl 16
+    const val RenderEffect: Int = 0b1 shl 17
+
+    const val OutlineAffectingFields = Clip or
+        Shape or
+        Alpha
+
+    const val MatrixAffectingFields = ScaleX or
+        ScaleY or
+        TranslationX or
+        TranslationY or
+        TransformOrigin or
+        RotationX or
+        RotationY or
+        RotationZ or
+        CameraDistance
+}
+
 internal class ReusableGraphicsLayerScope : GraphicsLayerScope {
+    internal var mutatedFields: Int = 0
+
     override var scaleX: Float = 1f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.ScaleX
+            field = value
+        }
     override var scaleY: Float = 1f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.ScaleY
+            field = value
+        }
     override var alpha: Float = 1f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Alpha
+            field = value
+        }
     override var translationX: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.TranslationX
+            field = value
+        }
     override var translationY: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.TranslationY
+            field = value
+        }
     override var shadowElevation: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.ShadowElevation
+            field = value
+        }
     override var ambientShadowColor: Color = DefaultShadowColor
+        set(value) {
+            mutatedFields = mutatedFields or Fields.AmbientShadowColor
+            field = value
+        }
     override var spotShadowColor: Color = DefaultShadowColor
+        set(value) {
+            mutatedFields = mutatedFields or Fields.SpotShadowColor
+            field = value
+        }
     override var rotationX: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RotationX
+            field = value
+        }
     override var rotationY: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RotationY
+            field = value
+        }
     override var rotationZ: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RotationZ
+            field = value
+        }
     override var cameraDistance: Float = DefaultCameraDistance
+        set(value) {
+            mutatedFields = mutatedFields or Fields.CameraDistance
+            field = value
+        }
     override var transformOrigin: TransformOrigin = TransformOrigin.Center
+        set(value) {
+            mutatedFields = mutatedFields or Fields.TransformOrigin
+            field = value
+        }
     override var shape: Shape = RectangleShape
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Shape
+            field = value
+        }
     override var clip: Boolean = false
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Clip
+            field = value
+        }
     override var compositingStrategy: CompositingStrategy = CompositingStrategy.Auto
+        set(value) {
+            mutatedFields = mutatedFields or Fields.CompositingStrategy
+            field = value
+        }
     override var size: Size = Size.Unspecified
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Size
+            field = value
+        }
 
     internal var graphicsDensity: Density = Density(1.0f)
 
@@ -250,8 +355,13 @@
         get() = graphicsDensity.fontScale
 
     override var renderEffect: RenderEffect? = null
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RenderEffect
+            field = value
+        }
 
     fun reset() {
+        mutatedFields = 0
         scaleX = 1f
         scaleY = 1f
         alpha = 1f
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
index 89ab17a..a094503 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
@@ -421,7 +421,9 @@
         check(focusOrderModifier is FocusOrderModifier) {
             "applyFocusProperties called on wrong node"
         }
-        focusProperties.apply(FocusOrderModifierToProperties(focusOrderModifier))
+
+        @Suppress("DEPRECATION")
+        focusOrderModifier.populateFocusOrder(FocusOrder(focusProperties))
     }
 
     override fun toString(): String = element.toString()
@@ -440,19 +442,6 @@
     it.updateModifierLocalConsumer()
 }
 
-/**
- * Used internally for FocusOrderModifiers so that we can compare the modifiers and can reuse
- * the ModifierLocalConsumerEntity and ModifierLocalProviderEntity.
- */
-@Suppress("DEPRECATION")
-private class FocusOrderModifierToProperties(
-    val modifier: FocusOrderModifier
-) : (FocusProperties) -> Unit {
-    override fun invoke(focusProperties: FocusProperties) {
-        modifier.populateFocusOrder(FocusOrder(focusProperties))
-    }
-}
-
 private fun BackwardsCompatNode.isChainUpdate(): Boolean {
     val tailNode = requireLayoutNode().nodes.tail as TailModifierNode
     return tailNode.attachHasBeenRun
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
index 21fc6f7c..3718c7b 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
@@ -57,8 +57,7 @@
     LookaheadCapablePlaceable(),
     Measurable,
     LayoutCoordinates,
-    OwnerScope,
-        (Canvas) -> Unit {
+    OwnerScope {
 
     abstract val tail: Modifier.Node
 
@@ -378,7 +377,7 @@
 
     // implementation of draw block passed to the OwnedLayer
     @Suppress("LiftReturnOrAssignment")
-    override fun invoke(canvas: Canvas) {
+    private val drawBlock: (Canvas) -> Unit = { canvas ->
         if (layoutNode.isPlaced) {
             snapshotObserver.observeReads(this, onCommitAffectingLayer) {
                 drawContainedDrawModifiers(canvas)
@@ -406,7 +405,7 @@
         if (isAttached && layerBlock != null) {
             if (layer == null) {
                 layer = layoutNode.requireOwner().createLayer(
-                    this,
+                    drawBlock,
                     invalidateParentLayer
                 ).apply {
                     resize(measuredSize)
@@ -448,25 +447,9 @@
                 ?: LayerPositionalProperties().also { layerPositionalProperties = it }
             layerPositionalProperties.copyFrom(graphicsLayerScope)
             layer.updateLayerProperties(
-                scaleX = graphicsLayerScope.scaleX,
-                scaleY = graphicsLayerScope.scaleY,
-                alpha = graphicsLayerScope.alpha,
-                translationX = graphicsLayerScope.translationX,
-                translationY = graphicsLayerScope.translationY,
-                shadowElevation = graphicsLayerScope.shadowElevation,
-                ambientShadowColor = graphicsLayerScope.ambientShadowColor,
-                spotShadowColor = graphicsLayerScope.spotShadowColor,
-                rotationX = graphicsLayerScope.rotationX,
-                rotationY = graphicsLayerScope.rotationY,
-                rotationZ = graphicsLayerScope.rotationZ,
-                cameraDistance = graphicsLayerScope.cameraDistance,
-                transformOrigin = graphicsLayerScope.transformOrigin,
-                shape = graphicsLayerScope.shape,
-                clip = graphicsLayerScope.clip,
-                renderEffect = graphicsLayerScope.renderEffect,
-                compositingStrategy = graphicsLayerScope.compositingStrategy,
-                layoutDirection = layoutNode.layoutDirection,
-                density = layoutNode.density
+                graphicsLayerScope,
+                layoutNode.layoutDirection,
+                layoutNode.density,
             )
             isClipping = graphicsLayerScope.clip
             lastLayerAlpha = graphicsLayerScope.alpha
@@ -935,6 +918,13 @@
      */
     fun onRelease() {
         released = true
+        // It is important to call invalidateParentLayer() here, even though updateLayerBlock() may
+        // call it. The reason is because we end up calling this from the bottom up, which means
+        // that if we have two layout modifiers getting removed, where the parent one has a layer
+        // and the bottom one doesn't, the parent layer gets invalidated but then removed, leaving
+        // no layers invalidated. By always calling this, we ensure that after all nodes are
+        // removed at least one layer is invalidated.
+        invalidateParentLayer()
         if (layer != null) {
             updateLayerBlock(null)
         }
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
index 79a754b..a82996a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
@@ -19,12 +19,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
@@ -39,25 +35,9 @@
      * Applies the new layer properties and causing this layer to be redrawn.
      */
     fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     )
 
     /**
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt
index c23cc36..4d89a2da 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.ui.draganddrop
 
+import androidx.collection.ArraySet
 import androidx.compose.ui.geometry.Offset
 import java.awt.dnd.DropTargetEvent as AwtDropTargetEvent
 
@@ -25,8 +26,8 @@
  * AWT [DragAndDropEvent] which delegates to a [AwtDropTargetEvent]
  */
 actual class DragAndDropEvent(
-    actual var type: DragAndDropEventType,
-    internal var dropTargetEvent: AwtDropTargetEvent
+    internal val dropTargetEvent: AwtDropTargetEvent,
+    internal actual val interestedNodes: ArraySet<DragAndDropModifierNode> = ArraySet()
 )
 
 internal actual val DragAndDropEvent.positionInRoot: Offset
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
index 2556f82..5293ba2 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
@@ -23,6 +23,7 @@
 import androidx.compose.ui.graphics.DefaultShadowColor
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.RenderEffect
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.test.junit4.createComposeRule
@@ -395,11 +396,25 @@
         renderEffect: RenderEffect? = null,
         compositingStrategy: CompositingStrategy = CompositingStrategy.Auto
     ) {
-        updateLayerProperties(
-            scaleX, scaleY, alpha, translationX, translationY, shadowElevation, rotationX,
-            rotationY, rotationZ, cameraDistance, transformOrigin, shape, clip, renderEffect,
-            ambientShadowColor, spotShadowColor, compositingStrategy, LayoutDirection.Ltr,
-            Density(1f, 1f)
-        )
+        val scope = ReusableGraphicsLayerScope()
+        scope.cameraDistance = cameraDistance
+        scope.scaleX = scaleX
+        scope.scaleY = scaleY
+        scope.alpha = alpha
+        scope.translationX = translationX
+        scope.translationY = translationY
+        scope.shadowElevation = shadowElevation
+        scope.ambientShadowColor = ambientShadowColor
+        scope.spotShadowColor = spotShadowColor
+        scope.rotationX = rotationX
+        scope.rotationY = rotationY
+        scope.rotationZ = rotationZ
+        scope.cameraDistance = cameraDistance
+        scope.transformOrigin = transformOrigin
+        scope.shape = shape
+        scope.clip = clip
+        scope.renderEffect = renderEffect
+        scope.compositingStrategy = compositingStrategy
+        updateLayerProperties(scope, LayoutDirection.Ltr, Density(1f))
     }
 }
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
index e7d9ae4..18568a9 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
@@ -26,13 +26,14 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.DefaultShadowColor
+import androidx.compose.ui.graphics.Fields
 import androidx.compose.ui.graphics.Matrix
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Paint
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.SkiaBackedCanvas
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.asComposeCanvas
@@ -145,49 +146,38 @@
             matrix
         }
     }
+    private var mutatedFields: Int = 0
 
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     ) {
-        this.transformOrigin = transformOrigin
-        this.translationX = translationX
-        this.translationY = translationY
-        this.rotationX = rotationX
-        this.rotationY = rotationY
-        this.rotationZ = rotationZ
-        this.scaleX = scaleX
-        this.scaleY = scaleY
-        this.alpha = alpha
-        this.clip = clip
-        this.shadowElevation = shadowElevation
+        val maybeChangedFields = scope.mutatedFields or mutatedFields
+        this.transformOrigin = scope.transformOrigin
+        this.translationX = scope.translationX
+        this.translationY = scope.translationY
+        this.rotationX = scope.rotationX
+        this.rotationY = scope.rotationY
+        this.rotationZ = scope.rotationZ
+        this.scaleX = scope.scaleX
+        this.scaleY = scope.scaleY
+        this.alpha = scope.alpha
+        this.clip = scope.clip
+        this.shadowElevation = scope.shadowElevation
         this.density = density
-        this.renderEffect = renderEffect
-        this.ambientShadowColor = ambientShadowColor
-        this.spotShadowColor = spotShadowColor
-        this.compositingStrategy = compositingStrategy
-        outlineCache.shape = shape
+        this.renderEffect = scope.renderEffect
+        this.ambientShadowColor = scope.ambientShadowColor
+        this.spotShadowColor = scope.spotShadowColor
+        this.compositingStrategy = scope.compositingStrategy
+        outlineCache.shape = scope.shape
         outlineCache.layoutDirection = layoutDirection
         outlineCache.density = density
-        updateMatrix()
+        if (maybeChangedFields and Fields.MatrixAffectingFields != 0) {
+            updateMatrix()
+        }
         invalidate()
+        mutatedFields = scope.mutatedFields
     }
 
     // TODO(demin): support perspective projection for rotationX/rotationY (as in Android)
diff --git a/constraintlayout/constraintlayout-compose/build.gradle b/constraintlayout/constraintlayout-compose/build.gradle
index 52093a5..c005e38 100644
--- a/constraintlayout/constraintlayout-compose/build.gradle
+++ b/constraintlayout/constraintlayout-compose/build.gradle
@@ -79,11 +79,6 @@
             }
         }
 
-
-        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
-        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
-        //  level dependencies block instead:
-        //  `dependencies { testImplementation(libs.robolectric) }`
         androidUnitTest {
             dependsOn(jvmTest)
             dependencies {
diff --git a/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml b/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml
index 529aa31..25c5e6d 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -17,6 +17,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
     <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 
     <application
         android:icon="@drawable/ic_launcher"
diff --git a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt
index bc49865..df48f8e 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt
+++ b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt
@@ -16,6 +16,8 @@
 
 package androidx.core.telecom.test
 
+import android.media.AudioManager.AudioRecordingCallback
+import android.media.AudioRecord
 import android.telecom.CallEndpoint
 import android.telecom.DisconnectCause
 import android.view.LayoutInflater
@@ -31,10 +33,13 @@
 import kotlinx.coroutines.launch
 
 @RequiresApi(34)
-class CallListAdapter(private var mList: ArrayList<CallRow>?) :
-    RecyclerView.Adapter<CallListAdapter.ViewHolder>() {
+class CallListAdapter(
+    private var mList: ArrayList<CallRow>?,
+    private var mAudioRecord: AudioRecord? = null
+) : RecyclerView.Adapter<CallListAdapter.ViewHolder>() {
     var mCallIdToViewHolder: MutableMap<String, ViewHolder> = mutableMapOf()
     private val CONTROL_ACTION_FAILED_MSG = "CurrentState=[FAILED-T]"
+    internal var mAudioRecordingCallback: AudioRecordingCallback? = null
 
     class ViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView) {
         // TextViews
@@ -79,6 +84,11 @@
 
             holder.activeButton.setOnClickListener {
                 CoroutineScope(Dispatchers.Main).launch {
+                    // If the audio is not already recording, start it up (i.e. if call was set
+                    // to inactive just before).
+                    if (mAudioRecord?.recordingState != AudioRecord.RECORDSTATE_RECORDING) {
+                        mAudioRecord?.startRecording()
+                    }
                     when (ItemsViewModel.callObject.mCallControl!!.setActive()) {
                         is CallControlResult.Success -> {
                             holder.currentState.text = "CurrentState=[active]"
@@ -93,6 +103,8 @@
 
             holder.holdButton.setOnClickListener {
                 CoroutineScope(Dispatchers.Main).launch {
+                    // Pause recording but don't clear callback
+                    mAudioRecord?.stop()
                     when (ItemsViewModel.callObject.mCallControl!!.setInactive()) {
                         is CallControlResult.Success -> {
                             holder.currentState.text = "CurrentState=[onHold]"
@@ -107,6 +119,7 @@
 
             holder.disconnectButton.setOnClickListener {
                 CoroutineScope(Dispatchers.IO).launch {
+                    endAudioRecording()
                     ItemsViewModel.callObject.mCallControl?.disconnect(
                         DisconnectCause(
                             DisconnectCause.LOCAL
@@ -184,4 +197,16 @@
             holder?.currentEndpoint?.text = "currentEndpoint=[$endpoint]"
         }
     }
+
+    private fun endAudioRecording() {
+        try {
+            // Stop audio recording
+            mAudioRecord?.stop()
+            mAudioRecord?.unregisterAudioRecordingCallback(mAudioRecordingCallback!!)
+        } catch (e: java.lang.Exception) {
+            // pass through
+        } finally {
+            mAudioRecordingCallback = null
+        }
+    }
 }
diff --git a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
index b793f38..9de9603 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
+++ b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
@@ -18,6 +18,8 @@
 
 import android.annotation.SuppressLint
 import android.app.Activity
+import android.media.AudioManager.AudioRecordingCallback
+import android.media.AudioRecord
 import android.os.Bundle
 import android.telecom.DisconnectCause
 import android.util.Log
@@ -29,6 +31,7 @@
 import androidx.core.view.WindowCompat
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import java.util.concurrent.Executors
 import kotlinx.coroutines.CoroutineExceptionHandler
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -44,10 +47,14 @@
     // Telecom
     private var mCallsManager: CallsManager? = null
 
+    // Audio Record
+    private var mAudioRecord: AudioRecord? = null
+    private var mAudioRecordingCallback: AudioRecordingCallback? = null
+
     // Call Log objects
     private var mRecyclerView: RecyclerView? = null
     private var mCallObjects: ArrayList<CallRow> = ArrayList()
-    private var mAdapter: CallListAdapter? = CallListAdapter(mCallObjects)
+    private lateinit var mAdapter: CallListAdapter
 
     override fun onCreate(savedInstanceState: Bundle?) {
         WindowCompat.setDecorFitsSystemWindows(window, false)
@@ -68,6 +75,7 @@
         val addOutgoingCallButton = findViewById<Button>(R.id.addOutgoingCall)
         addOutgoingCallButton.setOnClickListener {
             mScope.launch {
+                startAudioRecording()
                 addCallWithAttributes(Utilities.OUTGOING_CALL_ATTRIBUTES)
             }
         }
@@ -75,10 +83,15 @@
         val addIncomingCallButton = findViewById<Button>(R.id.addIncomingCall)
         addIncomingCallButton.setOnClickListener {
             mScope.launch {
+                startAudioRecording()
                 addCallWithAttributes(Utilities.INCOMING_CALL_ATTRIBUTES)
             }
         }
 
+        // Set up AudioRecord
+        mAudioRecord = Utilities.createAudioRecord(applicationContext, this)
+        mAdapter = CallListAdapter(mCallObjects, mAudioRecord)
+
         // set up the call list view holder
         mRecyclerView = findViewById(R.id.callListRecyclerView)
         mRecyclerView?.layoutManager = LinearLayoutManager(this)
@@ -96,6 +109,10 @@
                 }
             }
         }
+
+        // Clean up AudioRecord
+        mAudioRecord?.release()
+        mAudioRecord = null
     }
 
     @SuppressLint("WrongConstant")
@@ -178,7 +195,15 @@
 
     private fun updateCallList() {
         runOnUiThread {
-            mAdapter?.notifyDataSetChanged()
+            mAdapter.notifyDataSetChanged()
         }
     }
+
+    private fun startAudioRecording() {
+        mAudioRecordingCallback = Utilities.TelecomAudioRecordingCallback(mAudioRecord!!)
+        mAudioRecord?.registerAudioRecordingCallback(
+            Executors.newSingleThreadExecutor(), mAudioRecordingCallback!!)
+        mAdapter.mAudioRecordingCallback = mAudioRecordingCallback
+        mAudioRecord?.startRecording()
+    }
 }
diff --git a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt
index b1fd714..aa670ea 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt
+++ b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt
@@ -16,12 +16,23 @@
 
 package androidx.core.telecom.test
 
+import android.Manifest
+import android.content.Context
+import android.content.pm.PackageManager
+import android.media.AudioFormat
+import android.media.AudioManager.AudioRecordingCallback
+import android.media.AudioRecord
+import android.media.AudioRecordingConfiguration
+import android.media.MediaRecorder
 import android.net.Uri
+import android.util.Log
 import androidx.annotation.RequiresApi
+import androidx.core.app.ActivityCompat
 import androidx.core.telecom.CallAttributesCompat
 import androidx.core.telecom.CallAttributesCompat.Companion.CALL_TYPE_VIDEO_CALL
 import androidx.core.telecom.CallAttributesCompat.Companion.DIRECTION_INCOMING
 import androidx.core.telecom.CallAttributesCompat.Companion.DIRECTION_OUTGOING
+import androidx.core.util.Preconditions
 
 @RequiresApi(34)
 class Utilities {
@@ -50,5 +61,54 @@
                 DIRECTION_INCOMING,
                 CALL_TYPE_VIDEO_CALL,
                 ALL_CALL_CAPABILITIES)
+
+        // Audio recording config constants
+        private const val SAMPLE_RATE = 44100
+        private const val AUDIO_SOURCE = MediaRecorder.AudioSource.CAMCORDER
+        private const val CHANNEL_COUNT = 1
+        private const val AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT
+        private const val RECORD_AUDIO_REQUEST_CODE = 200
+
+        // Create AudioRecord
+        fun createAudioRecord(context: Context, mainActivity: CallingMainActivity): AudioRecord {
+            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) !=
+                PackageManager.PERMISSION_GRANTED) {
+                ActivityCompat.requestPermissions(mainActivity,
+                    arrayOf(Manifest.permission.RECORD_AUDIO), RECORD_AUDIO_REQUEST_CODE)
+            }
+            val channelMask = if (CHANNEL_COUNT == 1)
+                AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO
+            var minBufferSize = AudioRecord.getMinBufferSize(
+                SAMPLE_RATE, channelMask, AUDIO_FORMAT)
+            Preconditions.checkState(minBufferSize > 0)
+            minBufferSize *= 2
+
+            val audioFormatObj = AudioFormat.Builder()
+                .setSampleRate(SAMPLE_RATE)
+                .setChannelMask(channelMask)
+                .setEncoding(AUDIO_FORMAT)
+                .build()
+            val audioRecordBuilder: AudioRecord.Builder = AudioRecord.Builder()
+            audioRecordBuilder.setAudioSource(AUDIO_SOURCE)
+            audioRecordBuilder.setAudioFormat(audioFormatObj)
+            audioRecordBuilder.setBufferSizeInBytes(minBufferSize)
+            return audioRecordBuilder.build()
+        }
+    }
+
+    // AudioRecordingCallback implementation
+    class TelecomAudioRecordingCallback(
+        private var mAudioRecord: AudioRecord
+    ) : AudioRecordingCallback() {
+        override fun onRecordingConfigChanged(configs: List<AudioRecordingConfiguration>) {
+            for (config in configs) {
+                if (config.clientAudioSessionId == mAudioRecord.audioSessionId) {
+                    Log.i(CallingMainActivity::class.simpleName, String.format(
+                        "onRecordingConfigChanged: random: isClientSilenced=[%b], config=[%s]",
+                        config.isClientSilenced, config))
+                    break
+                }
+            }
+        }
     }
 }
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt
index 30fda2f..8ee3c06 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt
@@ -33,6 +33,9 @@
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.rule.GrantPermissionRule
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.async
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.runBlocking
 import org.junit.After
@@ -118,18 +121,8 @@
     @LargeTest
     @Test(timeout = 10000)
     fun testResolveCallExtension_CapabilityExchange() {
-        if (TestUtils.buildIsAtLeastU()) {
-            Log.w(TAG, "Setting up v2 tests for U+ device")
-            setUpV2Test()
-        } else {
-            Log.w(TAG, "Setting up backwards compatibility tests for pre-U device")
-            setUpBackwardsCompatTest()
-        }
-
         // Add EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED for pre-U testing
-        val backwardsCompatExtra = if (!TestUtils.buildIsAtLeastU())
-            Pair(CallsManager.EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED, true)
-        else null
+        val backwardsCompatExtra = configureCapabilityExchangeTypeTest()
         addAndVerifyCallExtensionType(
             TestUtils.OUTGOING_CALL_ATTRIBUTES,
             InCallServiceCompat.CAPABILITY_EXCHANGE,
@@ -140,6 +133,27 @@
     }
 
     /**
+     * Assert that for calls supporting [InCallServiceCompat.CAPABILITY_EXCHANGE] that capability
+     * exchange between the VOIP app and associated ICS is successful. This is signaled from the
+     * ICS side when the feature setup is completed via CapabilityExchange#featureSetupComplete.
+     *
+     * Note: The version codes for V is not available so we need to enforce a strict manual check
+     * to ensure the V test path is not executed by incompatible devices.
+     */
+    @LargeTest
+    @Test(timeout = 10000)
+    fun testCapabilityExchangeNegotiationSuccessful() {
+        // Add EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED for pre-U testing
+        val backwardsCompatExtra = configureCapabilityExchangeTypeTest()
+        verifyICSCapabilitiesNegotiatedWithVoipApp(
+            TestUtils.OUTGOING_CALL_ATTRIBUTES,
+            // Waiting is not required for U+ testing
+            waitForCallDetailExtras = !TestUtils.buildIsAtLeastU(),
+            extraToInclude = backwardsCompatExtra
+        )
+    }
+
+    /**
      * Assert that NONE is the extension type for calls with phone accounts that do not support
      * transactional ops. Note that the caller must have had the read phone numbers permission.
      *
@@ -198,21 +212,9 @@
         runBlocking {
             assertWithinTimeout_addCall(callAttributesCompat) {
                 launch {
-                    val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
-                    Assert.assertNotNull("The returned Call object is <NULL>", call!!)
-
                     // Enforce waiting logic to ensure that the call details extras are populated.
-                    if (waitForCallDetailExtras) {
-                        TestUtils.waitOnCallExtras(call)
-                    }
-
-                    val callDetails = call.details
-                    // Clear out extras to isolate the testing scenarios.
-                    call.details.extras?.clear()
-                    // Add extraToInclude for testing.
-                    if (extraToInclude != null) {
-                        callDetails.extras?.putBoolean(extraToInclude.first, extraToInclude.second)
-                    }
+                    val call = configureCallWithSanitizedExtras(
+                        waitForCallDetailExtras, extraToInclude)
 
                     // Assert call extension type.
                     assertEquals(expectedType, inCallServiceCompat.resolveCallExtensionsType(call))
@@ -224,4 +226,82 @@
             }
         }
     }
+
+    /**
+     * Helper to add a call via CallsManager#addCall and verify that the capabilities are properly
+     * negotiated between the VOIP app and ICS's given that the ICS supports the exchange
+     * ([InCallServiceCompat.CAPABILITY_EXCHANGE]).
+     *
+     * @param callAttributesCompat for the call.
+     * @param waitForCallDetailExtras used for waiting on the call details extras to be non-null.
+     * @param extraToInclude as part of the call extras.
+     */
+    @OptIn(DelicateCoroutinesApi::class)
+    private fun verifyICSCapabilitiesNegotiatedWithVoipApp(
+        callAttributesCompat: CallAttributesCompat,
+        waitForCallDetailExtras: Boolean = true,
+        extraToInclude: Pair<String, Boolean>? = null
+    ) {
+        runBlocking {
+            assertWithinTimeout_addCall(callAttributesCompat) {
+                launch {
+                    // Enforce waiting logic to ensure that the call details extras are populated.
+                    val call = configureCallWithSanitizedExtras(
+                        waitForCallDetailExtras, extraToInclude)
+                    // Initiate capability negotiation from ICS side with a new coroutine via
+                    // GlobalScope. This will ensure that the client/server tasks can operate
+                    // independently. Note that runBlocking uses an internal dispatcher (not the
+                    // same as Dispatchers.Main).
+                    GlobalScope.async {
+                        Assert.assertTrue(inCallServiceCompat.initiateICSCapabilityExchange(call))
+                    }.await()
+                    // Always send disconnect signal if possible.
+                    assertEquals(
+                        CallControlResult.Success(),
+                        disconnect(DisconnectCause(DisconnectCause.LOCAL)))
+                }
+            }
+        }
+    }
+
+    /**
+     * Helper to retrieve the call from MockInCallService and wait for any call detail extras
+     * to be populated, if needed.
+     */
+    private suspend fun configureCallWithSanitizedExtras(
+        waitForCallDetailExtras: Boolean,
+        extraToInclude: Pair<String, Boolean>? = null
+    ): Call {
+        val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
+        Assert.assertNotNull("The returned Call object is <NULL>", call!!)
+
+        // Enforce waiting logic to ensure that the call details extras are populated.
+        if (waitForCallDetailExtras) {
+            TestUtils.waitOnCallExtras(call)
+        }
+
+        val callDetails = call.details
+        // Clear out extras to isolate the testing scenarios.
+        call.details.extras?.clear()
+        // Add extraToInclude for testing.
+        if (extraToInclude != null) {
+            callDetails.extras?.putBoolean(extraToInclude.first, extraToInclude.second)
+        }
+        return call
+    }
+
+    private fun configureCapabilityExchangeTypeTest(): Pair<String, Boolean>? {
+        if (TestUtils.buildIsAtLeastU()) {
+            Log.w(TAG, "Setting up v2 tests for U+ device")
+            setUpV2Test()
+        } else {
+            Log.w(TAG, "Setting up backwards compatibility tests for pre-U device")
+            setUpBackwardsCompatTest()
+        }
+
+        // Add EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED for pre-U testing
+        return if (!TestUtils.buildIsAtLeastU())
+            Pair(CallsManager.EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED, true)
+        else null
+    }
 }
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt
index dc1455a..1c59acb 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt
@@ -326,22 +326,29 @@
      */
     suspend fun waitOnCallExtras(call: Call) {
         try {
-            withTimeout(TestUtils.WAIT_ON_CALL_STATE_TIMEOUT) {
-                while (isActive /* aka  within timeout window */ && (
-                        call.details?.extras == null || call.details.extras.isEmpty)) {
+            withTimeout(WAIT_ON_CALL_STATE_TIMEOUT) {
+                while (isActive /* aka  within timeout window */ && isCallDetailExtrasEmpty(call)) {
                     yield() // another mechanism to stop the while loop if the coroutine is dead
                     delay(1) // sleep x millisecond(s) instead of spamming check
                 }
             }
         } catch (e: TimeoutCancellationException) {
-            Log.i(TestUtils.LOG_TAG, "waitOnCallExtras: timeout reached")
-            TestUtils.dumpTelecom()
+            Log.i(LOG_TAG, "waitOnCallExtras: timeout reached")
+            dumpTelecom()
             MockInCallService.destroyAllCalls()
             throw AssertionError("Expected call detail extras to be non-null.")
         }
     }
 
     /**
+     * Helper used to determine if the call detail extras is empty or null, which is used as a basis
+     * for waiting in the voip app action tests (around capability exchange).
+     */
+    private fun isCallDetailExtrasEmpty(call: Call): Boolean {
+        return call.details?.extras == null || call.details.extras.isEmpty
+    }
+
+    /**
      * Used for testing in V. The build version is not available for referencing so this helper
      * performs a manual check instead.
      */
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt b/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
index 716bebc..57bb60a 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
@@ -94,6 +94,24 @@
             "android.telecom.extra.VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED"
 
         /**
+         * EVENT used by InCallService as part of sendCallEvent to notify the VOIP Application that
+         * this InCallService supports jetpack extensions
+         */
+        internal const val EVENT_JETPACK_CAPABILITY_EXCHANGE =
+            "android.telecom.event.CAPABILITY_EXCHANGE";
+
+        /**
+         * VERSION used for handling future compatibility in capability exchange.
+         */
+        internal const val EXTRA_CAPABILITY_EXCHANGE_VERSION = "CAPABILITY_EXCHANGE_VERSION"
+
+        /**
+         * BINDER used for handling capability exchange between the ICS and VOIP app sides, sent
+         * as part of sendCallEvent in the included extras.
+         */
+        internal const val EXTRA_CAPABILITY_EXCHANGE_BINDER = "CAPABILITY_EXCHANGE_BINDER"
+
+        /**
          * The connection is using transactional call APIs.
          *
          *
@@ -300,7 +318,7 @@
                 mDirectExecutor,
                 callControlOutcomeReceiver,
                 CallSession.CallControlCallbackImpl(callSession),
-                CallSession.CallEventCallbackImpl(callChannels)
+                CallSession.CallEventCallbackImpl(callChannels, coroutineContext)
             )
 
             pauseExecutionUntilCallIsReady_orTimeout(openResult)
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchange.kt b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchange.kt
new file mode 100644
index 0000000..c43cc79
--- /dev/null
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchange.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2023 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 androidx.core.telecom.extensions
+
+import androidx.annotation.RestrictTo
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.CountDownLatch
+
+@ExperimentalAppActions
+@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)
+internal class CapabilityExchange() : ICapabilityExchange.Stub() {
+    internal lateinit var capabilityExchangeListener: ICapabilityExchangeListener
+    internal lateinit var voipCapabilities: MutableList<Capability>
+    internal var hasFeatureSetupCompleted = false
+
+    internal val negotiatedCapabilitiesLatch = CountDownLatch(1)
+    internal val featureSetUpCompleteLatch = CountDownLatch(1)
+
+    override fun setListener(l: ICapabilityExchangeListener?) {
+        l?.let { capabilityExchangeListener = l }
+    }
+
+    override fun negotiateCapabilities(capabilities: MutableList<Capability>?) {
+        capabilities?.let {
+            voipCapabilities = capabilities
+            negotiatedCapabilitiesLatch.countDown()
+        }
+    }
+
+    override fun featureSetupComplete() {
+        hasFeatureSetupCompleted = true
+        featureSetUpCompleteLatch.countDown()
+    }
+}
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchangeListener.kt b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchangeListener.kt
new file mode 100644
index 0000000..b583266
--- /dev/null
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchangeListener.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2023 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 androidx.core.telecom.extensions
+
+import androidx.annotation.RestrictTo
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.CountDownLatch
+
+@ExperimentalAppActions
+@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)
+internal class CapabilityExchangeListener() : ICapabilityExchangeListener.Stub() {
+    internal val onCapabilitiesNegotiatedLatch = CountDownLatch(1)
+    internal lateinit var negotiatedCapabilities: MutableList<Capability>
+
+    override fun onCapabilitiesNegotiated(filteredCapabilities: MutableList<Capability>?) {
+        filteredCapabilities?.let {
+            negotiatedCapabilities = filteredCapabilities
+            onCapabilitiesNegotiatedLatch.countDown()
+        }
+    }
+}
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
index 00e5817..07d9fd1 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
@@ -21,11 +21,16 @@
 import android.os.ParcelUuid
 import android.telecom.CallException
 import android.telecom.DisconnectCause
+import android.util.Log
 import androidx.annotation.RequiresApi
 import androidx.core.telecom.CallControlResult
 import androidx.core.telecom.CallControlScope
 import androidx.core.telecom.CallEndpointCompat
+import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.internal.utils.CapabilityExchangeUtils
 import androidx.core.telecom.internal.utils.EndpointUtils
+import androidx.core.telecom.util.ExperimentalAppActions
 import java.util.function.Consumer
 import kotlin.coroutines.CoroutineContext
 import kotlinx.coroutines.CompletableDeferred
@@ -74,8 +79,17 @@
         }
     }
 
-    class CallEventCallbackImpl(private val callChannels: CallChannels) :
+    class CallEventCallbackImpl(
+        private val callChannels: CallChannels,
+        private val coroutineContext: CoroutineContext
+    ) :
         android.telecom.CallEventCallback {
+        private val CALL_EVENT_CALLBACK_TAG = CallEventCallbackImpl::class.simpleName
+        /**
+         * Stubbed supported capabilities for v2 connections.
+         */
+        @ExperimentalAppActions
+        private val supportedCapabilities = mutableListOf(Capability())
         override fun onCallEndpointChanged(
             endpoint: android.telecom.CallEndpoint
         ) {
@@ -100,8 +114,19 @@
             TODO("Implement with the CallStreaming code")
         }
 
+        @ExperimentalAppActions
         override fun onEvent(event: String, extras: Bundle) {
-            TODO("Implement when events are agreed upon by ICS and package")
+            // Call events are sent via Call#sendCallEvent(event, extras). Begin initial capability
+            // exchange procedure once we know that the ICS supports it.
+            if (event == CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE) {
+                Log.i(CALL_EVENT_CALLBACK_TAG, "onEvent: EVENT_JETPACK_CAPABILITY_EXCHANGE: " +
+                        "beginning capability exchange.")
+                // Launch a new coroutine from the context of the current coroutine
+                CoroutineScope(coroutineContext).launch {
+                        CapabilityExchangeUtils.initiateVoipAppCapabilityExchange(
+                            extras, supportedCapabilities, CALL_EVENT_CALLBACK_TAG)
+                }
+            }
         }
     }
 
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
index 2142201..ef45482 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
@@ -19,6 +19,7 @@
 import android.bluetooth.BluetoothDevice
 import android.os.Build
 import android.os.Build.VERSION_CODES
+import android.os.Bundle
 import android.os.ParcelUuid
 import android.telecom.Call
 import android.telecom.CallAudioState
@@ -30,7 +31,11 @@
 import androidx.core.telecom.CallControlScope
 import androidx.core.telecom.CallEndpointCompat
 import androidx.core.telecom.CallException
+import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.internal.utils.CapabilityExchangeUtils
 import androidx.core.telecom.internal.utils.EndpointUtils
+import androidx.core.telecom.util.ExperimentalAppActions
 import kotlin.coroutines.CoroutineContext
 import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.CoroutineScope
@@ -53,6 +58,12 @@
     private val TAG: String = CallSessionLegacy::class.java.simpleName
     private var mCachedBluetoothDevices: ArrayList<BluetoothDevice> = ArrayList()
 
+    /**
+     * Stubbed supported capabilities for legacy connections.
+     */
+    @ExperimentalAppActions
+    private val supportedCapabilities = mutableListOf(Capability())
+
     companion object {
         // CallStates. All these states mirror the values in the platform.
         const val STATE_INITIALIZING = 0
@@ -108,6 +119,27 @@
 
     /**
      * =========================================================================================
+     *                Call Event Updates
+     * =========================================================================================
+     */
+    @ExperimentalAppActions
+    override fun onCallEvent(event: String?, extras: Bundle?) {
+        super.onCallEvent(event, extras)
+        // Call events are sent via Call#sendCallEvent(event, extras). Begin initial capability
+        // exchange procedure once we know that the ICS supports it.
+        if (event == CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE) {
+            Log.i(TAG, "onCallEvent: EVENT_JETPACK_CAPABILITY_EXCHANGE: " +
+                "beginning capability exchange.")
+            // Launch a new coroutine from the context of the current coroutine
+            CoroutineScope(coroutineContext).launch {
+                CapabilityExchangeUtils.initiateVoipAppCapabilityExchange(
+                    extras!!, supportedCapabilities, TAG)
+            }
+        }
+    }
+
+    /**
+     * =========================================================================================
      *                CallControl
      * =========================================================================================
      */
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt
index f3063c0..6cb86aa 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt
@@ -30,14 +30,26 @@
 import androidx.annotation.RequiresApi
 import androidx.core.content.ContextCompat
 import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.extensions.CapabilityExchange
+import androidx.core.telecom.internal.utils.CapabilityExchangeUtils
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.TimeUnit
+import kotlin.coroutines.coroutineContext
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.TimeoutCancellationException
+import kotlinx.coroutines.async
+import kotlinx.coroutines.withTimeout
 
 /**
  * This class defines the Jetpack ICS layer which will be leveraged as part of supporting VOIP app
  * actions.
  */
-@RequiresApi(Build.VERSION_CODES.M)
+@ExperimentalAppActions
+@RequiresApi(Build.VERSION_CODES.O)
 internal class InCallServiceCompat(context: Context) : InCallService() {
     private val mContext: Context = context
+    private val mSupportedCapabilities = mutableListOf(Capability())
 
     companion object {
         /**
@@ -52,6 +64,11 @@
         internal const val CAPABILITY_EXCHANGE = 2
         internal const val UNKNOWN = 3
 
+        /**
+         * Current capability exchange version
+         */
+        internal const val CAPABILITY_EXCHANGE_VERSION = 1
+
         private val TAG = InCallServiceCompat::class.simpleName
     }
 
@@ -95,8 +112,6 @@
      * @return the extension type [InCallServiceCompat.CapabilityExchangeType] resolved for the
      * call.
      */
-    @RequiresApi(Build.VERSION_CODES.O)
-    @CapabilityExchangeType
     internal fun resolveCallExtensionsType(call: Call): Int {
         var callDetails = call.details
         val callExtras = callDetails?.extras ?: Bundle()
@@ -125,4 +140,80 @@
         Log.i(TAG, "Unable to resolve call extension type. Returning $UNKNOWN.")
         return UNKNOWN
     }
+
+    /**
+     * Initiate capability exchange negotiation between ICS and VOIP app. The acknowledgement begins
+     * when the ICS sends a call event with [CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE] to
+     * notify the VOIP app to begin capability exchange negotiation. At that point, 3 stages of
+     * acknowledgement are required between the two parties in order for negotiation to succeed.
+     *
+     * This entails the ICS side waiting for the VOIP app to communicate its supported capabilities,
+     * the VOIP side waiting for the ICS side to communicate its supported capabilities, and the
+     * VOIP side signaling the ICS side that feature setup (negotiation) is complete. If any one of
+     * the aforementioned stages of ACK fails (i.e. timeout), the negotiation will fail.
+     *
+     * Note: Negotiation is only supported by InCallServices that support capability exchange
+     * ([InCallServiceCompat.CAPABILITY_EXCHANGE]).
+     *
+     * @param call to initiate capability exchange for.
+     * @return the capability negotiation status.
+     * between the ICS and VOIP app.
+     */
+    internal suspend fun initiateICSCapabilityExchange(call: Call): Boolean {
+        Log.i(TAG, "initiateICSCapabilityExchange: " +
+            "Starting capability negotiation with VOIP app...")
+
+        // Initialize binder for facilitating IPC (capability exchange) between ICS and VOIP app
+        // and notify VOIP app via a call event.
+        val capExchange = CapabilityExchange()
+        val extras = Bundle()
+        extras.putBinder(CallsManager.EXTRA_CAPABILITY_EXCHANGE_BINDER, capExchange)
+        extras.putInt(CallsManager.EXTRA_CAPABILITY_EXCHANGE_VERSION, CAPABILITY_EXCHANGE_VERSION)
+        call.sendCallEvent(CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE, extras)
+
+        // Launch a new coroutine from the context of the current coroutine and wait for task to
+        // complete.
+        return CoroutineScope(coroutineContext).async {
+            beginCapabilityNegotiationAck(capExchange)
+        }.await()
+    }
+
+    /**
+     * Helper to start acknowledgement process for capability negotiation between the ICS and VOIP
+     * app.
+     */
+    private suspend fun beginCapabilityNegotiationAck(capExchange: CapabilityExchange): Boolean {
+        var negotiationAckStatus = false
+        try {
+            withTimeout(CapabilityExchangeUtils.CAPABILITY_NEGOTIATION_COROUTINE_TIMEOUT) {
+                // Wait for VOIP app to return its supported capabilities.
+                if (capExchange.negotiatedCapabilitiesLatch.await(
+                        CapabilityExchangeUtils.CAPABILITY_EXCHANGE_TIMEOUT,
+                        TimeUnit.MILLISECONDS)) {
+                    // Respond back to the VOIP app with the InCallService's supported
+                    // capabilities (stub empty capabilities until implementation is supported).
+                    capExchange.capabilityExchangeListener
+                        .onCapabilitiesNegotiated(mSupportedCapabilities)
+                    // Ensure that feature setup is signaled from VOIP app side.
+                    if (capExchange.featureSetUpCompleteLatch.await(
+                            CapabilityExchangeUtils.CAPABILITY_EXCHANGE_TIMEOUT,
+                            TimeUnit.MILLISECONDS)) {
+                        Log.i(TAG, "initiateICSCapabilityExchange: " +
+                            "Completed capability exchange feature set up.")
+                        negotiationAckStatus = true
+                    }
+                }
+
+                // Report negotiation acknowledgement failure, if it occurred.
+                if (!negotiationAckStatus) {
+                    Log.i(TAG, "initiateICSCapabilityExchange: Unable to complete capability " +
+                            "exchange feature set up.")
+                }
+            }
+        } catch (e: TimeoutCancellationException) {
+            Log.i(TAG, "initiateICSCapabilityExchange: Capability negotiation job timed " +
+                "out in ICS side.")
+        }
+        return negotiationAckStatus
+    }
 }
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
index e1fe957..7d43f6a 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
@@ -197,6 +197,9 @@
             )
         }
 
+        // Explicitly set voip audio mode on connection side
+        jetpackConnection.audioModeIsVoip = true
+
         targetRequest.completableDeferred?.complete(jetpackConnection)
         mPendingConnectionRequests.remove(targetRequest)
         return jetpackConnection
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/CapabilityExchangeUtils.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/CapabilityExchangeUtils.kt
new file mode 100644
index 0000000..7f876d7
--- /dev/null
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/CapabilityExchangeUtils.kt
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2023 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 androidx.core.telecom.internal.utils
+
+import android.os.Build
+import android.os.Bundle
+import android.util.Log
+import androidx.annotation.RequiresApi
+import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.extensions.CapabilityExchange
+import androidx.core.telecom.extensions.CapabilityExchangeListener
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.TimeUnit
+import kotlinx.coroutines.TimeoutCancellationException
+import kotlinx.coroutines.withTimeout
+
+@ExperimentalAppActions
+@RequiresApi(Build.VERSION_CODES.O)
+internal class CapabilityExchangeUtils {
+    companion object {
+        private val TAG = Companion::class.java.simpleName
+
+        /**
+         * Timeouts to help facilitate capability exchange negotiation between ICS and VOIP app.
+         */
+        internal const val CAPABILITY_EXCHANGE_TIMEOUT = 1000L
+        internal const val CAPABILITY_NEGOTIATION_COROUTINE_TIMEOUT = 3000L
+
+        /**
+         * Internal helper to help facilitate acknowledgement for capability negotiation between
+         * the VOIP app and ICS. This helper is invoked on the VOIP side where negotiation begins
+         * when we are notified via a call event (containing
+         * [CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE]). The VOIP side is responsible for
+         * informing the ICS of its supported capabilities, receiving the ICS's supported
+         * capabilities (ACK), and informing the ICS that negotiation has completed. If the VOIP
+         * side is unable to receive the ICS supported capabilities, feature setup will fail and
+         * the ICS will report the status for negotiation as successful.
+         *
+         * @param extras received from call event.
+         * @param supportedCapabilities for the VOIP app.
+         * @param logTag to help identify if legacy or v2 APIs are being used.
+         */
+        internal suspend fun initiateVoipAppCapabilityExchange(
+            extras: Bundle,
+            supportedCapabilities: MutableList<Capability>,
+            logTag: String? = TAG
+        ) {
+            try {
+                withTimeout(CAPABILITY_NEGOTIATION_COROUTINE_TIMEOUT) {
+                    Log.i(logTag, "Starting capability negotiation with ICS...")
+                    var isFeatureSetupComplete = false
+                    // Retrieve binder from ICS.
+                    val capabilityExchange: CapabilityExchange? = extras.getBinder(
+                        CallsManager.EXTRA_CAPABILITY_EXCHANGE_BINDER) as CapabilityExchange?
+
+                    // Initialize capability exchange listener and set it on binder
+                    val capabilityExchangeListener = CapabilityExchangeListener()
+                    capabilityExchange?.let {
+                        capabilityExchange.setListener(capabilityExchangeListener)
+                        // Negotiate the supported VOIP app capabilities to the ICS (stub with empty
+                        // capabilities until the implementation is supported).
+                        capabilityExchange.negotiateCapabilities(supportedCapabilities)
+                        // Wait for the ICS to return its supported capabilities and notify that the
+                        // setup is complete.
+                        if (capabilityExchangeListener.onCapabilitiesNegotiatedLatch
+                                .await(CAPABILITY_EXCHANGE_TIMEOUT, TimeUnit.MILLISECONDS)) {
+                            capabilityExchange.featureSetupComplete()
+                            isFeatureSetupComplete = true
+                            Log.i(logTag, "Capability negotiation with ICS has completed.")
+                        }
+                    }
+
+                    if (!isFeatureSetupComplete) {
+                        Log.i(logTag, "Unable to receive supported capabilities from (ICS) client.")
+                    }
+                }
+            } catch (e: TimeoutCancellationException) {
+                Log.i(logTag, "Capability negotiation job timed out in VOIP app side.")
+            }
+        }
+    }
+}
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt
index 47121d6..32eca7c 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt
@@ -77,6 +77,7 @@
             }
         }
 
+        @RequiresApi(VERSION_CODES.O)
         fun remapJetpackCapabilitiesToPlatformCapabilities(
             @CallsManager.Companion.Capability clientBitmapSelection: Int
         ): Int {
@@ -100,10 +101,12 @@
             return (bitMap.and(targetCapability)) == targetCapability
         }
 
+        @RequiresApi(VERSION_CODES.O)
         private fun hasJetpackVideoCallingCapability(bitMap: Int): Boolean {
             return hasCapability(CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING, bitMap)
         }
 
+        @RequiresApi(VERSION_CODES.O)
         private fun hasJetpackSteamingCapability(bitMap: Int): Boolean {
             return hasCapability(CallsManager.CAPABILITY_SUPPORTS_CALL_STREAMING, bitMap)
         }
diff --git a/core/core/api/api_lint.ignore b/core/core/api/api_lint.ignore
index 2a14724..842f89f 100644
--- a/core/core/api/api_lint.ignore
+++ b/core/core/api/api_lint.ignore
@@ -537,6 +537,8 @@
     Missing nullability on parameter `in` in method `createFromParcel`
 MissingNullability: androidx.core.os.ParcelableCompatCreatorCallbacks#createFromParcel(android.os.Parcel, ClassLoader) parameter #1:
     Missing nullability on parameter `loader` in method `createFromParcel`
+MissingNullability: androidx.core.os.ParcelableCompatCreatorCallbacks#newArray(int):
+    Missing nullability on method `newArray` return
 MissingNullability: androidx.core.provider.FontsContractCompat.FontFamilyResult#getFonts():
     Missing nullability on method `getFonts` return
 MissingNullability: androidx.core.provider.FontsContractCompat.FontRequestCallback#onTypefaceRetrieved(android.graphics.Typeface) parameter #0:
@@ -611,6 +613,8 @@
     Missing nullability on parameter `tag` in method `getSpanFlags`
 MissingNullability: androidx.core.text.PrecomputedTextCompat#getSpanStart(Object) parameter #0:
     Missing nullability on parameter `tag` in method `getSpanStart`
+MissingNullability: androidx.core.text.PrecomputedTextCompat#getSpans(int, int, Class<T>):
+    Missing nullability on method `getSpans` return
 MissingNullability: androidx.core.text.PrecomputedTextCompat#getSpans(int, int, Class<T>) parameter #2:
     Missing nullability on parameter `type` in method `getSpans`
 MissingNullability: androidx.core.text.PrecomputedTextCompat#getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor):
diff --git a/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt b/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt
index 4c92a70..90e8665 100644
--- a/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt
@@ -21,7 +21,6 @@
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import org.junit.Assert.assertNotNull
-import org.junit.Assert.assertSame
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -41,9 +40,6 @@
     fun testGetInstance() {
         val displayManagerA = DisplayManagerCompat.getInstance(context)
         assertNotNull(displayManagerA)
-
-        val displayManagerB = DisplayManagerCompat.getInstance(context)
-        assertSame(displayManagerA, displayManagerB)
     }
 
     @Test
diff --git a/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java b/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java
index e0caa0f..170471c 100644
--- a/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java
@@ -436,7 +436,7 @@
 
     @Test
     public void testAddLinks_doesNotMatchUrlsWithoutProtocolAndWithUnknownTld() {
-        String url = "thank.you";
+        String url = "thank.unknowntld";
         verifyAddLinksWithWebUrlFails("Should not match URL that does not start with a protocol "
                 + "and does not contain a known TLD", url);
     }
@@ -449,7 +449,7 @@
 
     @Test
     public void testAddLinks_doesNotMatchUrlsWithEmojiWithoutProtocolAndWithoutKnownTld() {
-        String url = "Thank\u263A.you";
+        String url = "Thank\u263A.unknowntld";
         verifyAddLinksWithWebUrlFails("Should not match URLs containing emoji and with unknown "
                 + "TLD", url);
     }
diff --git a/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java b/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java
index 97225b2..059881b 100644
--- a/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java
@@ -374,7 +374,7 @@
     @Test
     public void testAutoLinkWebUrl_doesNotMatchUrlsWithoutProtocolAndWithUnknownTld()
             throws Exception {
-        String url = "thank.you";
+        String url = "thank.unknowntld";
         assertFalse("Should not match URL that does not start with a protocol and " +
                         "does not contain a known TLD",
                 PatternsCompat.AUTOLINK_WEB_URL.matcher(url).matches());
@@ -397,7 +397,7 @@
     @Test
     public void testAutoLinkWebUrl_doesNotMatchUrlsWithEmojiWithoutProtocolAndWithoutKnownTld()
             throws Exception {
-        String url = "Thank\u263A.you";
+        String url = "Thank\u263A.unknowntld";
         assertFalse("Should not match URLs containing emoji and with unknown TLD",
                 PatternsCompat.AUTOLINK_WEB_URL.matcher(url).matches());
     }
diff --git a/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java b/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java
index 214c8b5..4f6a511 100644
--- a/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java
@@ -27,16 +27,11 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 
-import java.lang.ref.WeakReference;
-import java.util.WeakHashMap;
-
 /**
  * Helper for accessing features in {@link android.hardware.display.DisplayManager}.
  */
 @SuppressWarnings("unused")
 public final class DisplayManagerCompat {
-    private static final WeakHashMap<Context, WeakReference<DisplayManagerCompat>> sInstances =
-            new WeakHashMap<>();
 
     /**
      * Display category: Presentation displays.
@@ -63,14 +58,7 @@
      */
     @NonNull
     public static DisplayManagerCompat getInstance(@NonNull Context context) {
-        synchronized (sInstances) {
-            WeakReference<DisplayManagerCompat> instance = sInstances.get(context);
-            if (instance == null || instance.get() == null) {
-                instance = new WeakReference<>(new DisplayManagerCompat(context));
-                sInstances.put(context, instance);
-            }
-            return instance.get();
-        }
+        return new DisplayManagerCompat(context);
     }
 
     /**
diff --git a/core/core/src/main/java/androidx/core/util/PatternsCompat.java b/core/core/src/main/java/androidx/core/util/PatternsCompat.java
index be438ad..16c9e50 100644
--- a/core/core/src/main/java/androidx/core/util/PatternsCompat.java
+++ b/core/core/src/main/java/androidx/core/util/PatternsCompat.java
@@ -29,126 +29,173 @@
     /**
      *  Regular expression to match all IANA top-level domains.
      *
-     *  List accurate as of 2015/11/24.  List taken from:
+     *  List accurate as of 2023/09/11.  List taken from:
      *  http://data.iana.org/TLD/tlds-alpha-by-domain.txt
      *  This pattern is auto-generated by frameworks/ex/common/tools/make-iana-tld-pattern.py
      */
     static final String IANA_TOP_LEVEL_DOMAINS =
         "(?:"
-        + "(?:aaa|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active"
-        + "|actor|ads|adult|aeg|aero|afl|agency|aig|airforce|airtel|allfinanz|alsace|amica|amsterdam"
-        + "|android|apartments|app|apple|aquarelle|aramco|archi|army|arpa|arte|asia|associates"
-        + "|attorney|auction|audio|auto|autos|axa|azure|a[cdefgilmoqrstuwxz])"
-        + "|(?:band|bank|bar|barcelona|barclaycard|barclays|bargains|bauhaus|bayern|bbc|bbva"
-        + "|bcn|beats|beer|bentley|berlin|best|bet|bharti|bible|bid|bike|bing|bingo|bio|biz|black"
-        + "|blackfriday|bloomberg|blue|bms|bmw|bnl|bnpparibas|boats|bom|bond|boo|boots|boutique"
-        + "|bradesco|bridgestone|broadway|broker|brother|brussels|budapest|build|builders|business"
-        + "|buzz|bzh|b[abdefghijmnorstvwyz])"
-        + "|(?:cab|cafe|cal|camera|camp|cancerresearch|canon|capetown|capital|car|caravan|cards"
-        + "|care|career|careers|cars|cartier|casa|cash|casino|cat|catering|cba|cbn|ceb|center|ceo"
-        + "|cern|cfa|cfd|chanel|channel|chat|cheap|chloe|christmas|chrome|church|cipriani|cisco"
-        + "|citic|city|cityeats|claims|cleaning|click|clinic|clothing|cloud|club|clubmed|coach"
-        + "|codes|coffee|college|cologne|com|commbank|community|company|computer|comsec|condos"
-        + "|construction|consulting|contractors|cooking|cool|coop|corsica|country|coupons|courses"
-        + "|credit|creditcard|creditunion|cricket|crown|crs|cruises|csc|cuisinella|cymru|cyou|c[acdfghiklmnoruvwxyz])"
-        + "|(?:dabur|dad|dance|date|dating|datsun|day|dclk|deals|degree|delivery|dell|delta"
-        + "|democrat|dental|dentist|desi|design|dev|diamonds|diet|digital|direct|directory|discount"
-        + "|dnp|docs|dog|doha|domains|doosan|download|drive|durban|dvag|d[ejkmoz])"
-        + "|(?:earth|eat|edu|education|email|emerck|energy|engineer|engineering|enterprises"
-        + "|epson|equipment|erni|esq|estate|eurovision|eus|events|everbank|exchange|expert|exposed"
-        + "|express|e[cegrstu])"
-        + "|(?:fage|fail|fairwinds|faith|family|fan|fans|farm|fashion|feedback|ferrero|film"
-        + "|final|finance|financial|firmdale|fish|fishing|fit|fitness|flights|florist|flowers|flsmidth"
-        + "|fly|foo|football|forex|forsale|forum|foundation|frl|frogans|fund|furniture|futbol|fyi"
-        + "|f[ijkmor])"
-        + "|(?:gal|gallery|game|garden|gbiz|gdn|gea|gent|genting|ggee|gift|gifts|gives|giving"
-        + "|glass|gle|global|globo|gmail|gmo|gmx|gold|goldpoint|golf|goo|goog|google|gop|gov|grainger"
-        + "|graphics|gratis|green|gripe|group|gucci|guge|guide|guitars|guru|g[abdefghilmnpqrstuwy])"
-        + "|(?:hamburg|hangout|haus|healthcare|help|here|hermes|hiphop|hitachi|hiv|hockey|holdings"
-        + "|holiday|homedepot|homes|honda|horse|host|hosting|hoteles|hotmail|house|how|hsbc|hyundai"
-        + "|h[kmnrtu])"
-        + "|(?:ibm|icbc|ice|icu|ifm|iinet|immo|immobilien|industries|infiniti|info|ing|ink|institute"
-        + "|insure|int|international|investments|ipiranga|irish|ist|istanbul|itau|iwc|i[delmnoqrst])"
-        + "|(?:jaguar|java|jcb|jetzt|jewelry|jlc|jll|jobs|joburg|jprs|juegos|j[emop])"
-        + "|(?:kaufen|kddi|kia|kim|kinder|kitchen|kiwi|koeln|komatsu|krd|kred|kyoto|k[eghimnprwyz])"
-        + "|(?:lacaixa|lancaster|land|landrover|lasalle|lat|latrobe|law|lawyer|lds|lease|leclerc"
-        + "|legal|lexus|lgbt|liaison|lidl|life|lifestyle|lighting|limited|limo|linde|link|live"
-        + "|lixil|loan|loans|lol|london|lotte|lotto|love|ltd|ltda|lupin|luxe|luxury|l[abcikrstuvy])"
-        + "|(?:madrid|maif|maison|man|management|mango|market|marketing|markets|marriott|mba"
-        + "|media|meet|melbourne|meme|memorial|men|menu|meo|miami|microsoft|mil|mini|mma|mobi|moda"
-        + "|moe|moi|mom|monash|money|montblanc|mormon|mortgage|moscow|motorcycles|mov|movie|movistar"
-        + "|mtn|mtpc|mtr|museum|mutuelle|m[acdeghklmnopqrstuvwxyz])"
-        + "|(?:nadex|nagoya|name|navy|nec|net|netbank|network|neustar|new|news|nexus|ngo|nhk"
-        + "|nico|ninja|nissan|nokia|nra|nrw|ntt|nyc|n[acefgilopruz])"
-        + "|(?:obi|office|okinawa|omega|one|ong|onl|online|ooo|oracle|orange|org|organic|osaka"
-        + "|otsuka|ovh|om)"
-        + "|(?:page|panerai|paris|partners|parts|party|pet|pharmacy|philips|photo|photography"
-        + "|photos|physio|piaget|pics|pictet|pictures|ping|pink|pizza|place|play|playstation|plumbing"
-        + "|plus|pohl|poker|porn|post|praxi|press|pro|prod|productions|prof|properties|property"
-        + "|protection|pub|p[aefghklmnrstwy])"
-        + "|(?:qpon|quebec|qa)"
-        + "|(?:racing|realtor|realty|recipes|red|redstone|rehab|reise|reisen|reit|ren|rent|rentals"
-        + "|repair|report|republican|rest|restaurant|review|reviews|rich|ricoh|rio|rip|rocher|rocks"
-        + "|rodeo|rsvp|ruhr|run|rwe|ryukyu|r[eosuw])"
-        + "|(?:saarland|sakura|sale|samsung|sandvik|sandvikcoromant|sanofi|sap|sapo|sarl|saxo"
-        + "|sbs|sca|scb|schmidt|scholarships|school|schule|schwarz|science|scor|scot|seat|security"
-        + "|seek|sener|services|seven|sew|sex|sexy|shiksha|shoes|show|shriram|singles|site|ski"
-        + "|sky|skype|sncf|soccer|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting"
-        + "|srl|stada|starhub|statoil|stc|stcgroup|stockholm|studio|study|style|sucks|supplies"
-        + "|supply|support|surf|surgery|suzuki|swatch|swiss|sydney|systems|s[abcdeghijklmnortuvxyz])"
-        + "|(?:tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica"
-        + "|temasek|tennis|thd|theater|theatre|tickets|tienda|tips|tires|tirol|today|tokyo|tools"
-        + "|top|toray|toshiba|tours|town|toyota|toys|trade|trading|training|travel|trust|tui|t[cdfghjklmnortvwz])"
-        + "|(?:ubs|university|uno|uol|u[agksyz])"
-        + "|(?:vacations|vana|vegas|ventures|versicherung|vet|viajes|video|villas|vin|virgin"
-        + "|vision|vista|vistaprint|viva|vlaanderen|vodka|vote|voting|voto|voyage|v[aceginu])"
-        + "|(?:wales|walter|wang|watch|webcam|website|wed|wedding|weir|whoswho|wien|wiki|williamhill"
-        + "|win|windows|wine|wme|work|works|world|wtc|wtf|w[fs])"
-        + "|(?:\u03b5\u03bb|\u0431\u0435\u043b|\u0434\u0435\u0442\u0438|\u043a\u043e\u043c|\u043c\u043a\u0434"
+        + "(?:aaa|aarp|abb|abbott|abbvie|abc|able|abogado|abudhabi|academy|accenture|accountant"
+        + "|accountants|aco|actor|ads|adult|aeg|aero|aetna|afl|africa|agakhan|agency|aig|airbus"
+        + "|airforce|airtel|akdn|alibaba|alipay|allfinanz|allstate|ally|alsace|alstom|amazon|americanexpress"
+        + "|americanfamily|amex|amfam|amica|amsterdam|analytics|android|anquan|anz|aol|apartments"
+        + "|app|apple|aquarelle|arab|aramco|archi|army|arpa|art|arte|asda|asia|associates|athleta"
+        + "|attorney|auction|audi|audible|audio|auspost|author|auto|autos|avianca|aws|axa|azure"
+        + "|a[cdefgilmoqrstuwxz])"
+        + "|(?:baby|baidu|banamex|bananarepublic|band|bank|bar|barcelona|barclaycard|barclays"
+        + "|barefoot|bargains|baseball|basketball|bauhaus|bayern|bbc|bbt|bbva|bcg|bcn|beats|beauty"
+        + "|beer|bentley|berlin|best|bestbuy|bet|bharti|bible|bid|bike|bing|bingo|bio|biz|black"
+        + "|blackfriday|blockbuster|blog|bloomberg|blue|bms|bmw|bnpparibas|boats|boehringer|bofa"
+        + "|bom|bond|boo|book|booking|bosch|bostik|boston|bot|boutique|box|bradesco|bridgestone"
+        + "|broadway|broker|brother|brussels|build|builders|business|buy|buzz|bzh|b[abdefghijmnorstvwyz])"
+        + "|(?:cab|cafe|cal|call|calvinklein|cam|camera|camp|canon|capetown|capital|capitalone"
+        + "|car|caravan|cards|care|career|careers|cars|casa|case|cash|casino|cat|catering|catholic"
+        + "|cba|cbn|cbre|cbs|center|ceo|cern|cfa|cfd|chanel|channel|charity|chase|chat|cheap|chintai"
+        + "|christmas|chrome|church|cipriani|circle|cisco|citadel|citi|citic|city|cityeats|claims"
+        + "|cleaning|click|clinic|clinique|clothing|cloud|club|clubmed|coach|codes|coffee|college"
+        + "|cologne|com|comcast|commbank|community|company|compare|computer|comsec|condos|construction"
+        + "|consulting|contact|contractors|cooking|cool|coop|corsica|country|coupon|coupons|courses"
+        + "|cpa|credit|creditcard|creditunion|cricket|crown|crs|cruise|cruises|cuisinella|cymru"
+        + "|cyou|c[acdfghiklmnoruvwxyz])"
+        + "|(?:dabur|dad|dance|data|date|dating|datsun|day|dclk|dds|deal|dealer|deals|degree"
+        + "|delivery|dell|deloitte|delta|democrat|dental|dentist|desi|design|dev|dhl|diamonds|diet"
+        + "|digital|direct|directory|discount|discover|dish|diy|dnp|docs|doctor|dog|domains|dot"
+        + "|download|drive|dtv|dubai|dunlop|dupont|durban|dvag|dvr|d[ejkmoz])"
+        + "|(?:earth|eat|eco|edeka|edu|education|email|emerck|energy|engineer|engineering|enterprises"
+        + "|epson|equipment|ericsson|erni|esq|estate|etisalat|eurovision|eus|events|exchange|expert"
+        + "|exposed|express|extraspace|e[cegrstu])"
+        + "|(?:fage|fail|fairwinds|faith|family|fan|fans|farm|farmers|fashion|fast|fedex|feedback"
+        + "|ferrari|ferrero|fidelity|fido|film|final|finance|financial|fire|firestone|firmdale"
+        + "|fish|fishing|fit|fitness|flickr|flights|flir|florist|flowers|fly|foo|food|football"
+        + "|ford|forex|forsale|forum|foundation|fox|free|fresenius|frl|frogans|frontdoor|frontier"
+        + "|ftr|fujitsu|fun|fund|furniture|futbol|fyi|f[ijkmor])"
+        + "|(?:gal|gallery|gallo|gallup|game|games|gap|garden|gay|gbiz|gdn|gea|gent|genting"
+        + "|george|ggee|gift|gifts|gives|giving|glass|gle|global|globo|gmail|gmbh|gmo|gmx|godaddy"
+        + "|gold|goldpoint|golf|goo|goodyear|goog|google|gop|got|gov|grainger|graphics|gratis|green"
+        + "|gripe|grocery|group|guardian|gucci|guge|guide|guitars|guru|g[abdefghilmnpqrstuwy])"
+        + "|(?:hair|hamburg|hangout|haus|hbo|hdfc|hdfcbank|health|healthcare|help|helsinki|here"
+        + "|hermes|hiphop|hisamitsu|hitachi|hiv|hkt|hockey|holdings|holiday|homedepot|homegoods"
+        + "|homes|homesense|honda|horse|hospital|host|hosting|hot|hotels|hotmail|house|how|hsbc"
+        + "|hughes|hyatt|hyundai|h[kmnrtu])"
+        + "|(?:ibm|icbc|ice|icu|ieee|ifm|ikano|imamat|imdb|immo|immobilien|inc|industries|infiniti"
+        + "|info|ing|ink|institute|insurance|insure|int|international|intuit|investments|ipiranga"
+        + "|irish|ismaili|ist|istanbul|itau|itv|i[delmnoqrst])"
+        + "|(?:jaguar|java|jcb|jeep|jetzt|jewelry|jio|jll|jmp|jnj|jobs|joburg|jot|joy|jpmorgan"
+        + "|jprs|juegos|juniper|j[emop])"
+        + "|(?:kaufen|kddi|kerryhotels|kerrylogistics|kerryproperties|kfh|kia|kids|kim|kinder"
+        + "|kindle|kitchen|kiwi|koeln|komatsu|kosher|kpmg|kpn|krd|kred|kuokgroup|kyoto|k[eghimnprwyz])"
+        + "|(?:lacaixa|lamborghini|lamer|lancaster|land|landrover|lanxess|lasalle|lat|latino"
+        + "|latrobe|law|lawyer|lds|lease|leclerc|lefrak|legal|lego|lexus|lgbt|lidl|life|lifeinsurance"
+        + "|lifestyle|lighting|like|lilly|limited|limo|lincoln|link|lipsy|live|living|llc|llp|loan"
+        + "|loans|locker|locus|lol|london|lotte|lotto|love|lpl|lplfinancial|ltd|ltda|lundbeck|luxe"
+        + "|luxury|l[abcikrstuvy])"
+        + "|(?:madrid|maif|maison|makeup|man|management|mango|map|market|marketing|markets|marriott"
+        + "|marshalls|mattel|mba|mckinsey|med|media|meet|melbourne|meme|memorial|men|menu|merckmsd"
+        + "|miami|microsoft|mil|mini|mint|mit|mitsubishi|mlb|mls|mma|mobi|mobile|moda|moe|moi|mom"
+        + "|monash|money|monster|mormon|mortgage|moscow|moto|motorcycles|mov|movie|msd|mtn|mtr"
+        + "|museum|music|m[acdeghklmnopqrstuvwxyz])"
+        + "|(?:nab|nagoya|name|natura|navy|nba|nec|net|netbank|netflix|network|neustar|new|news"
+        + "|next|nextdirect|nexus|nfl|ngo|nhk|nico|nike|nikon|ninja|nissan|nissay|nokia|norton"
+        + "|now|nowruz|nowtv|nra|nrw|ntt|nyc|n[acefgilopruz])"
+        + "|(?:obi|observer|office|okinawa|olayan|olayangroup|oldnavy|ollo|omega|one|ong|onl"
+        + "|online|ooo|open|oracle|orange|org|organic|origins|osaka|otsuka|ott|ovh|om)"
+        + "|(?:page|panasonic|paris|pars|partners|parts|party|pay|pccw|pet|pfizer|pharmacy|phd"
+        + "|philips|phone|photo|photography|photos|physio|pics|pictet|pictures|pid|pin|ping|pink"
+        + "|pioneer|pizza|place|play|playstation|plumbing|plus|pnc|pohl|poker|politie|porn|post"
+        + "|pramerica|praxi|press|prime|pro|prod|productions|prof|progressive|promo|properties"
+        + "|property|protection|pru|prudential|pub|pwc|p[aefghklmnrstwy])"
+        + "|(?:qpon|quebec|quest|qa)"
+        + "|(?:racing|radio|read|realestate|realtor|realty|recipes|red|redstone|redumbrella"
+        + "|rehab|reise|reisen|reit|reliance|ren|rent|rentals|repair|report|republican|rest|restaurant"
+        + "|review|reviews|rexroth|rich|richardli|ricoh|ril|rio|rip|rocher|rocks|rodeo|rogers|room"
+        + "|rsvp|rugby|ruhr|run|rwe|ryukyu|r[eosuw])"
+        + "|(?:saarland|safe|safety|sakura|sale|salon|samsclub|samsung|sandvik|sandvikcoromant"
+        + "|sanofi|sap|sarl|sas|save|saxo|sbi|sbs|sca|scb|schaeffler|schmidt|scholarships|school"
+        + "|schule|schwarz|science|scot|search|seat|secure|security|seek|select|sener|services"
+        + "|seven|sew|sex|sexy|sfr|shangrila|sharp|shaw|shell|shia|shiksha|shoes|shop|shopping"
+        + "|shouji|show|showtime|silk|sina|singles|site|ski|skin|sky|skype|sling|smart|smile|sncf"
+        + "|soccer|social|softbank|software|sohu|solar|solutions|song|sony|soy|spa|space|sport"
+        + "|spot|srl|stada|staples|star|statebank|statefarm|stc|stcgroup|stockholm|storage|store"
+        + "|stream|studio|study|style|sucks|supplies|supply|support|surf|surgery|suzuki|swatch"
+        + "|swiss|sydney|systems|s[abcdeghijklmnorstuvxyz])"
+        + "|(?:tab|taipei|talk|taobao|target|tatamotors|tatar|tattoo|tax|taxi|tci|tdk|team|tech"
+        + "|technology|tel|temasek|tennis|teva|thd|theater|theatre|tiaa|tickets|tienda|tips|tires"
+        + "|tirol|tjmaxx|tjx|tkmaxx|tmall|today|tokyo|tools|top|toray|toshiba|total|tours|town"
+        + "|toyota|toys|trade|trading|training|travel|travelers|travelersinsurance|trust|trv|tube"
+        + "|tui|tunes|tushu|tvs|t[cdfghjklmnortvwz])"
+        + "|(?:ubank|ubs|unicom|university|uno|uol|ups|u[agksyz])"
+        + "|(?:vacations|vana|vanguard|vegas|ventures|verisign|versicherung|vet|viajes|video"
+        + "|vig|viking|villas|vin|vip|virgin|visa|vision|viva|vivo|vlaanderen|vodka|volkswagen"
+        + "|volvo|vote|voting|voto|voyage|v[aceginu])"
+        + "|(?:wales|walmart|walter|wang|wanggou|watch|watches|weather|weatherchannel|webcam"
+        + "|weber|website|wed|wedding|weibo|weir|whoswho|wien|wiki|williamhill|win|windows|wine"
+        + "|winners|wme|wolterskluwer|woodside|work|works|world|wow|wtc|wtf|w[fs])"
+        + "|(?:\u03b5\u03bb|\u03b5\u03c5|\u0431\u0433|\u0431\u0435\u043b|\u0434\u0435\u0442\u0438"
+        + "|\u0435\u044e|\u043a\u0430\u0442\u043e\u043b\u0438\u043a|\u043a\u043e\u043c|\u043c\u043a\u0434"
         + "|\u043c\u043e\u043d|\u043c\u043e\u0441\u043a\u0432\u0430|\u043e\u043d\u043b\u0430\u0439\u043d"
         + "|\u043e\u0440\u0433|\u0440\u0443\u0441|\u0440\u0444|\u0441\u0430\u0439\u0442|\u0441\u0440\u0431"
-        + "|\u0443\u043a\u0440|\u049b\u0430\u0437|\u0570\u0561\u0575|\u05e7\u05d5\u05dd|\u0627\u0631\u0627\u0645\u0643\u0648"
-        + "|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629"
-        + "|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0627\u06cc\u0631\u0627\u0646"
-        + "|\u0628\u0627\u0632\u0627\u0631|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633"
-        + "|\u0633\u0648\u062f\u0627\u0646|\u0633\u0648\u0631\u064a\u0629|\u0634\u0628\u0643\u0629"
-        + "|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0641\u0644\u0633\u0637\u064a\u0646"
-        + "|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0645\u0644\u064a\u0633\u064a\u0627"
-        + "|\u0645\u0648\u0642\u0639|\u0915\u0949\u092e|\u0928\u0947\u091f|\u092d\u093e\u0930\u0924"
-        + "|\u0938\u0902\u0917\u0920\u0928|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4"
-        + "|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd"
-        + "|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22"
-        + "|\u10d2\u10d4|\u307f\u3093\u306a|\u30b0\u30fc\u30b0\u30eb|\u30b3\u30e0|\u4e16\u754c"
-        + "|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4e2d\u6587\u7f51|\u4f01\u4e1a|\u4f5b\u5c71"
-        + "|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063"
-        + "|\u5546\u57ce|\u5546\u5e97|\u5546\u6807|\u5728\u7ebf|\u5927\u62ff|\u5a31\u4e50|\u5de5\u884c"
-        + "|\u5e7f\u4e1c|\u6148\u5584|\u6211\u7231\u4f60|\u624b\u673a|\u653f\u52a1|\u653f\u5e9c"
-        + "|\u65b0\u52a0\u5761|\u65b0\u95fb|\u65f6\u5c1a|\u673a\u6784|\u6de1\u9a6c\u9521|\u6e38\u620f"
-        + "|\u70b9\u770b|\u79fb\u52a8|\u7ec4\u7ec7\u673a\u6784|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7edc"
-        + "|\u8c37\u6b4c|\u96c6\u56e2|\u98de\u5229\u6d66|\u9910\u5385|\u9999\u6e2f|\ub2f7\ub137"
-        + "|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d|xbox"
-        + "|xerox|xin|xn\\-\\-11b4c3d|xn\\-\\-1qqw23a|xn\\-\\-30rr7y|xn\\-\\-3bst00m|xn\\-\\-3ds443g"
-        + "|xn\\-\\-3e0b707e|xn\\-\\-3pxu8k|xn\\-\\-42c2d9a|xn\\-\\-45brj9c|xn\\-\\-45q11c|xn\\-\\-4gbrim"
-        + "|xn\\-\\-55qw42g|xn\\-\\-55qx5d|xn\\-\\-6frz82g|xn\\-\\-6qq986b3xl|xn\\-\\-80adxhks"
-        + "|xn\\-\\-80ao21a|xn\\-\\-80asehdb|xn\\-\\-80aswg|xn\\-\\-90a3ac|xn\\-\\-90ais|xn\\-\\-9dbq2a"
-        + "|xn\\-\\-9et52u|xn\\-\\-b4w605ferd|xn\\-\\-c1avg|xn\\-\\-c2br7g|xn\\-\\-cg4bki|xn\\-\\-clchc0ea0b2g2a9gcd"
-        + "|xn\\-\\-czr694b|xn\\-\\-czrs0t|xn\\-\\-czru2d|xn\\-\\-d1acj3b|xn\\-\\-d1alf|xn\\-\\-efvy88h"
-        + "|xn\\-\\-estv75g|xn\\-\\-fhbei|xn\\-\\-fiq228c5hs|xn\\-\\-fiq64b|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s"
-        + "|xn\\-\\-fjq720a|xn\\-\\-flw351e|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-gecrj9c"
-        + "|xn\\-\\-h2brj9c|xn\\-\\-hxt814e|xn\\-\\-i1b6b1a6a2e|xn\\-\\-imr513n|xn\\-\\-io0a7i"
-        + "|xn\\-\\-j1aef|xn\\-\\-j1amh|xn\\-\\-j6w193g|xn\\-\\-kcrx77d1x4a|xn\\-\\-kprw13d|xn\\-\\-kpry57d"
+        + "|\u0443\u043a\u0440|\u049b\u0430\u0437|\u0570\u0561\u0575|\u05d9\u05e9\u05e8\u05d0\u05dc"
+        + "|\u05e7\u05d5\u05dd|\u0627\u0628\u0648\u0638\u0628\u064a|\u0627\u062a\u0635\u0627\u0644\u0627\u062a"
+        + "|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u0628\u062d\u0631\u064a\u0646"
+        + "|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629"
+        + "|\u0627\u0644\u0639\u0644\u064a\u0627\u0646|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a"
+        + "|\u0627\u06cc\u0631\u0627\u0646|\u0628\u0627\u0631\u062a|\u0628\u0627\u0632\u0627\u0631"
+        + "|\u0628\u064a\u062a\u0643|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u062f\u0627\u0646"
+        + "|\u0633\u0648\u0631\u064a\u0629|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0631\u0628"
+        + "|\u0639\u0645\u0627\u0646|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0643\u0627\u062b\u0648\u0644\u064a\u0643"
+        + "|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0645\u0644\u064a\u0633\u064a\u0627|\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627"
+        + "|\u0645\u0648\u0642\u0639|\u0647\u0645\u0631\u0627\u0647|\u067e\u0627\u06a9\u0633\u062a\u0627\u0646"
+        + "|\u0680\u0627\u0631\u062a|\u0915\u0949\u092e|\u0928\u0947\u091f|\u092d\u093e\u0930\u0924"
+        + "|\u092d\u093e\u0930\u0924\u092e\u094d|\u092d\u093e\u0930\u094b\u0924|\u0938\u0902\u0917\u0920\u0928"
+        + "|\u09ac\u09be\u0982\u09b2\u09be|\u09ad\u09be\u09b0\u09a4|\u09ad\u09be\u09f0\u09a4|\u0a2d\u0a3e\u0a30\u0a24"
+        + "|\u0aad\u0abe\u0ab0\u0aa4|\u0b2d\u0b3e\u0b30\u0b24|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe"
+        + "|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd"
+        + "|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0cad\u0cbe\u0cb0\u0ca4|\u0d2d\u0d3e\u0d30\u0d24\u0d02"
+        + "|\u0dbd\u0d82\u0d9a\u0dcf|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22|\u0ea5\u0eb2\u0ea7|\u10d2\u10d4"
+        + "|\u307f\u3093\u306a|\u30a2\u30de\u30be\u30f3|\u30af\u30e9\u30a6\u30c9|\u30b0\u30fc\u30b0\u30eb"
+        + "|\u30b3\u30e0|\u30b9\u30c8\u30a2|\u30bb\u30fc\u30eb|\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3"
+        + "|\u30dd\u30a4\u30f3\u30c8|\u4e16\u754c|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4e2d\u6587\u7f51"
+        + "|\u4e9a\u9a6c\u900a|\u4f01\u4e1a|\u4f5b\u5c71|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366"
+        + "|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063|\u5546\u57ce|\u5546\u5e97|\u5546\u6807"
+        + "|\u5609\u91cc|\u5609\u91cc\u5927\u9152\u5e97|\u5728\u7ebf|\u5927\u62ff|\u5929\u4e3b\u6559"
+        + "|\u5a31\u4e50|\u5bb6\u96fb|\u5e7f\u4e1c|\u5fae\u535a|\u6148\u5584|\u6211\u7231\u4f60"
+        + "|\u624b\u673a|\u62db\u8058|\u653f\u52a1|\u653f\u5e9c|\u65b0\u52a0\u5761|\u65b0\u95fb"
+        + "|\u65f6\u5c1a|\u66f8\u7c4d|\u673a\u6784|\u6de1\u9a6c\u9521|\u6e38\u620f|\u6fb3\u9580"
+        + "|\u70b9\u770b|\u79fb\u52a8|\u7ec4\u7ec7\u673a\u6784|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7ad9"
+        + "|\u7f51\u7edc|\u8054\u901a|\u8c37\u6b4c|\u8d2d\u7269|\u901a\u8ca9|\u96c6\u56e2|\u96fb\u8a0a\u76c8\u79d1"
+        + "|\u98de\u5229\u6d66|\u98df\u54c1|\u9910\u5385|\u9999\u683c\u91cc\u62c9|\u9999\u6e2f"
+        + "|\ub2f7\ub137|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d"
+        + "|xbox|xerox|xfinity|xihuan|xin|xn\\-\\-11b4c3d|xn\\-\\-1ck2e1b|xn\\-\\-1qqw23a|xn\\-\\-2scrj9c"
+        + "|xn\\-\\-30rr7y|xn\\-\\-3bst00m|xn\\-\\-3ds443g|xn\\-\\-3e0b707e|xn\\-\\-3hcrj9c|xn\\-\\-3pxu8k"
+        + "|xn\\-\\-42c2d9a|xn\\-\\-45br5cyl|xn\\-\\-45brj9c|xn\\-\\-45q11c|xn\\-\\-4dbrk0ce|xn\\-\\-4gbrim"
+        + "|xn\\-\\-54b7fta0cc|xn\\-\\-55qw42g|xn\\-\\-55qx5d|xn\\-\\-5su34j936bgsg|xn\\-\\-5tzm5g"
+        + "|xn\\-\\-6frz82g|xn\\-\\-6qq986b3xl|xn\\-\\-80adxhks|xn\\-\\-80ao21a|xn\\-\\-80aqecdr1a"
+        + "|xn\\-\\-80asehdb|xn\\-\\-80aswg|xn\\-\\-8y0a063a|xn\\-\\-90a3ac|xn\\-\\-90ae|xn\\-\\-90ais"
+        + "|xn\\-\\-9dbq2a|xn\\-\\-9et52u|xn\\-\\-9krt00a|xn\\-\\-b4w605ferd|xn\\-\\-bck1b9a5dre4c"
+        + "|xn\\-\\-c1avg|xn\\-\\-c2br7g|xn\\-\\-cck2b3b|xn\\-\\-cckwcxetd|xn\\-\\-cg4bki|xn\\-\\-clchc0ea0b2g2a9gcd"
+        + "|xn\\-\\-czr694b|xn\\-\\-czrs0t|xn\\-\\-czru2d|xn\\-\\-d1acj3b|xn\\-\\-d1alf|xn\\-\\-e1a4c"
+        + "|xn\\-\\-eckvdtc9d|xn\\-\\-efvy88h|xn\\-\\-fct429k|xn\\-\\-fhbei|xn\\-\\-fiq228c5hs"
+        + "|xn\\-\\-fiq64b|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fjq720a|xn\\-\\-flw351e|xn\\-\\-fpcrj9c3d"
+        + "|xn\\-\\-fzc2c9e2c|xn\\-\\-fzys8d69uvgm|xn\\-\\-g2xx48c|xn\\-\\-gckr3f0f|xn\\-\\-gecrj9c"
+        + "|xn\\-\\-gk3at1e|xn\\-\\-h2breg3eve|xn\\-\\-h2brj9c|xn\\-\\-h2brj9c8c|xn\\-\\-hxt814e"
+        + "|xn\\-\\-i1b6b1a6a2e|xn\\-\\-imr513n|xn\\-\\-io0a7i|xn\\-\\-j1aef|xn\\-\\-j1amh|xn\\-\\-j6w193g"
+        + "|xn\\-\\-jlq480n2rg|xn\\-\\-jvr189m|xn\\-\\-kcrx77d1x4a|xn\\-\\-kprw13d|xn\\-\\-kpry57d"
         + "|xn\\-\\-kput3i|xn\\-\\-l1acc|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgb9awbf|xn\\-\\-mgba3a3ejt"
-        + "|xn\\-\\-mgba3a4f16a|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbab2bd|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e"
-        + "|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-mgbpl2fh|xn\\-\\-mgbtx2b|xn\\-\\-mgbx4cd0ab"
-        + "|xn\\-\\-mk1bu44c|xn\\-\\-mxtq1m|xn\\-\\-ngbc5azd|xn\\-\\-node|xn\\-\\-nqv7f|xn\\-\\-nqv7fs00ema"
-        + "|xn\\-\\-nyqy26a|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1acf|xn\\-\\-p1ai|xn\\-\\-pgbs0dh"
-        + "|xn\\-\\-pssy2u|xn\\-\\-q9jyb4c|xn\\-\\-qcka1pmc|xn\\-\\-qxam|xn\\-\\-rhqv96g|xn\\-\\-s9brj9c"
-        + "|xn\\-\\-ses554g|xn\\-\\-t60b56a|xn\\-\\-tckwe|xn\\-\\-unup4y|xn\\-\\-vermgensberater\\-ctb"
-        + "|xn\\-\\-vermgensberatung\\-pwb|xn\\-\\-vhquv|xn\\-\\-vuq861b|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a"
+        + "|xn\\-\\-mgba3a4f16a|xn\\-\\-mgba7c0bbn0a|xn\\-\\-mgbaakc7dvf|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbab2bd"
+        + "|xn\\-\\-mgbah1a3hjkrd|xn\\-\\-mgbai9azgqp6j|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a|xn\\-\\-mgbbh1a71e"
+        + "|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgbca7dzdo|xn\\-\\-mgbcpq6gpa1a|xn\\-\\-mgberp4a5d4ar|xn\\-\\-mgbgu82a"
+        + "|xn\\-\\-mgbi4ecexp|xn\\-\\-mgbpl2fh|xn\\-\\-mgbt3dhd|xn\\-\\-mgbtx2b|xn\\-\\-mgbx4cd0ab"
+        + "|xn\\-\\-mix891f|xn\\-\\-mk1bu44c|xn\\-\\-mxtq1m|xn\\-\\-ngbc5azd|xn\\-\\-ngbe9e0a|xn\\-\\-ngbrx"
+        + "|xn\\-\\-node|xn\\-\\-nqv7f|xn\\-\\-nqv7fs00ema|xn\\-\\-nyqy26a|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl"
+        + "|xn\\-\\-otu796d|xn\\-\\-p1acf|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-pssy2u|xn\\-\\-q7ce6a"
+        + "|xn\\-\\-q9jyb4c|xn\\-\\-qcka1pmc|xn\\-\\-qxa6a|xn\\-\\-qxam|xn\\-\\-rhqv96g|xn\\-\\-rovu88b"
+        + "|xn\\-\\-rvc1e0am3e|xn\\-\\-s9brj9c|xn\\-\\-ses554g|xn\\-\\-t60b56a|xn\\-\\-tckwe|xn\\-\\-tiq49xqyj"
+        + "|xn\\-\\-unup4y|xn\\-\\-vermgensberater\\-ctb|xn\\-\\-vermgensberatung\\-pwb|xn\\-\\-vhquv"
+        + "|xn\\-\\-vuq861b|xn\\-\\-w4r85el8fhu5dnra|xn\\-\\-w4rs40l|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a"
         + "|xn\\-\\-xhq521b|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-y9a3aq|xn\\-\\-yfro4i67o"
-        + "|xn\\-\\-ygbi2ammx|xn\\-\\-zfr164b|xperia|xxx|xyz)"
-        + "|(?:yachts|yamaxun|yandex|yodobashi|yoga|yokohama|youtube|y[et])"
-        + "|(?:zara|zip|zone|zuerich|z[amw]))";
+        + "|xn\\-\\-ygbi2ammx|xn\\-\\-zfr164b|xxx|xyz)"
+        + "|(?:yachts|yahoo|yamaxun|yandex|yodobashi|yoga|yokohama|you|youtube|yun|y[et])"
+        + "|(?:zappos|zara|zero|zip|zone|zuerich|z[amw]))";
 
     public static final Pattern IP_ADDRESS
             = Pattern.compile(
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt
index c744990..c827b73 100644
--- a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt
+++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt
@@ -40,7 +40,6 @@
         // Common retryable status codes from the play modules found
         // https://developers.google.com/android/reference/com/google/android/gms/common/api/CommonStatusCodes
         val retryables: Set<Int> = setOf(
-            CommonStatusCodes.INTERNAL_ERROR,
             CommonStatusCodes.NETWORK_ERROR,
             CommonStatusCodes.CONNECTION_SUSPENDED_DURING_CALL
         )
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt
index 0bbcdbc..9e6f1b8 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt
@@ -20,10 +20,13 @@
 import androidx.datastore.core.twoWayIpc.TwoWayIpcService
 import androidx.datastore.core.twoWayIpc.TwoWayIpcService2
 import androidx.test.platform.app.InstrumentationRegistry
+import java.util.concurrent.atomic.AtomicBoolean
 import kotlin.time.Duration.Companion.seconds
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Job
+import kotlinx.coroutines.async
+import kotlinx.coroutines.awaitAll
 import kotlinx.coroutines.cancel
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.sync.Mutex
@@ -37,6 +40,7 @@
  * are properly closed after test.
  */
 class MultiProcessTestRule : TestWatcher() {
+    private val didRunTest = AtomicBoolean(false)
     private val context = InstrumentationRegistry.getInstrumentation().context
 
     // use a real scope, it is too hard to use a TestScope when we cannot control the IPC
@@ -53,8 +57,17 @@
     fun runTest(block: suspend CoroutineScope.() -> Unit) {
         // don't use datastore scope here as it will not finish by itself.
         runBlocking {
-            withTimeout(TEST_TIMEOUT) {
-                block()
+            check(didRunTest.compareAndSet(false, true)) {
+                "Cannot call runTest multiple times"
+            }
+            try {
+                withTimeout(TEST_TIMEOUT) {
+                    block()
+                }
+            } finally {
+                connections.map {
+                    async { it.disconnect() }
+                }.awaitAll()
             }
         }
     }
@@ -75,9 +88,6 @@
 
     override fun finished(description: Description) {
         super.finished(description)
-        connections.forEach {
-            it.disconnect()
-        }
         datastoreScope.cancel()
     }
 
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt
index 7bc55d8..d0b22c7 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt
@@ -37,4 +37,22 @@
     operator fun <T> set(key: Key<T>, value: T?) {
         data[key] = value
     }
+
+    /**
+     * Gets the value with [key] and atomically creates it if [key] is not set.
+     */
+    @Suppress("UNCHECKED_CAST")
+    fun <T> getOrPut(key: Key<T>, create: () -> T): T {
+        data[key]?.let {
+            return it as T
+        }
+        synchronized(this) {
+            data[key]?.let {
+                return it as T
+            }
+            return create().also {
+                data[key] = it
+            }
+        }
+    }
 }
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt
index f6209bd..1204f02 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt
@@ -26,7 +26,7 @@
  * across processes.
  */
 @Parcelize
-internal class InterProcessCompletable<T : Parcelable> constructor(
+internal class InterProcessCompletable<T : Parcelable>(
     private val key: String = UUID.randomUUID().toString(),
 ) : Parcelable {
     suspend fun complete(subject: TwoWayIpcSubject, value: T) {
@@ -95,16 +95,11 @@
     }
 }
 
-@Suppress("PrivatePropertyName")
 private val COMPLETABLE_CONTROLLER_KEY =
     CompositeServiceSubjectModel.Key<CrossProcessCompletableController>()
 private val TwoWayIpcSubject.crossProcessCompletableController: CrossProcessCompletableController
     get() {
-        if (!data.contains(COMPLETABLE_CONTROLLER_KEY)) {
-            synchronized(this) {
-                data[COMPLETABLE_CONTROLLER_KEY] =
-                    CrossProcessCompletableController(this)
-            }
+        return data.getOrPut(COMPLETABLE_CONTROLLER_KEY) {
+            CrossProcessCompletableController(this)
         }
-        return data[COMPLETABLE_CONTROLLER_KEY]
     }
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt
index b9e34a5..7b13f7e 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt
@@ -68,7 +68,10 @@
         }
     }
 
-    fun disconnect() {
+    suspend fun disconnect() {
+        sendMessage(Message.obtain().also {
+            it.what = TwoWayIpcService.MSG_DESTROY_SUBJECTS
+        })
         context.unbindService(this)
     }
 
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt
index a47b9a3..a9262d0 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt
@@ -24,6 +24,11 @@
 import android.os.Messenger
 import androidx.lifecycle.LifecycleService
 import androidx.lifecycle.lifecycleScope
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.cancelAndJoin
+import kotlinx.coroutines.launch
 
 /**
  * Another service of the same type, that runs in another separate
@@ -44,6 +49,8 @@
  */
 open class TwoWayIpcService : LifecycleService() {
     private val subjects = mutableListOf<TwoWayIpcSubject>()
+    private val jobForSubjects = Job()
+    private val scopeForSubjects = CoroutineScope(jobForSubjects + Dispatchers.IO)
     private val messenger: Messenger = Messenger(
         Handler(
             Looper.getMainLooper()
@@ -51,7 +58,7 @@
             // make a copy to prevent recycling
             when (incoming.what) {
                 MSG_CREATE_SUBJECT -> {
-                    val subject = TwoWayIpcSubject(lifecycleScope).also {
+                    val subject = TwoWayIpcSubject(scopeForSubjects).also {
                         subjects.add(it)
                     }
 
@@ -66,6 +73,24 @@
                     }
                     incoming.replyTo.send(response)
                 }
+                MSG_DESTROY_SUBJECTS -> {
+                    val incomingCopy = Message.obtain().also {
+                        it.copyFrom(incoming)
+                    }
+                    lifecycleScope.launch {
+                        IpcLogger.log("destroying subjects")
+                        try {
+                            jobForSubjects.cancelAndJoin()
+                            IpcLogger.log("destroyed subjects")
+                        } finally {
+                            incomingCopy.replyTo.send(
+                                Message.obtain().also {
+                                    it.data.putBoolean("closed", true)
+                                }
+                            )
+                        }
+                    }
+                }
 
                 else -> error("unknown message type ${incoming.what}")
             }
@@ -79,5 +104,6 @@
 
     companion object {
         const val MSG_CREATE_SUBJECT = 500
+        const val MSG_DESTROY_SUBJECTS = 501
     }
 }
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 0f56a50..2e153d6 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -50,613 +50,440 @@
 # > Task :buildSrc:build UP-TO-DATE
 A fine\-grained performance profile is available\: use the \-\-scan option\.
 # > Task :docs
-WARN: Failed to resolve `@see <a href="http:\/\/developer\.android\.com\/design\/patterns\/navigation-drawer\.html">Navigation`! In in declaration of DrawerActions in file .*\/androidx\/test\/espresso\/contrib\/DrawerActions\.java at line 41\.
-WARN: Failed to resolve `@see <a href="http:\/\/developer\.android\.com\/guide\/topics\/ui\/controls\/pickers\.html">Pickers API`! In in declaration of PickerActions in file .*\/androidx\/test\/espresso\/contrib\/PickerActions\.java at line 35\.
-WARN: Failed to resolve `@see <a href="https:\/\/developer\.android\.com\/guide\/topics\/media\/media-routing">Media Routing<\/a>`! In in declaration of SystemOutputSwitcherDialogController in file .*\/androidx\/mediarouter\/app\/SystemOutputSwitcherDialogController\.java at line 39\.
-WARN: Failed to resolve `@see <a href="https:\/\/developer\.android\.com\/guide\/topics\/ui\/drag-drop">Drag and drop<\/a>`! In in declaration of DropHelper in file .*\/androidx\/draganddrop\/DropHelper\.java at line 69\.
-WARN: Failed to resolve `@see <a href="https:\/\/developer\.android\.com\/training\/transitions">Transition API Guide<\/a>`! In File location could not be determined\.
-WARN: Failed to resolve `@see NavAction\.getDefaultArguments`! Did you mean NavAction#getDefaultArguments\? In in declaration of defaultArguments in file .*\/androidx\/navigation\/NavDestinationBuilder\.kt at line 189\.
-WARN: Failed to resolve `@see NavAction\.getDefaultArguments`! Did you mean NavAction#getDefaultArguments\? In in declaration of getDefaultArguments in file .*\/androidx\/navigation\/NavDestinationBuilder\.kt, line number could not be determined\.
-WARN: Failed to resolve `@see PagingSource\.invalidate`! Did you mean PagingSource#invalidate\? In in declaration of refresh in file .*\/androidx\/paging\/compose\/LazyPagingItems\.kt at line 179\.
-WARN: Failed to resolve `@see PagingSource\.invalidate`! Did you mean PagingSource#invalidate\? In in declaration of refresh in file .*\/androidx\/paging\/compose\/LazyPagingItems\.kt at line 183\.
-WARN: Failed to resolve `@see  <a href="https:\/\/developer\.android\.com\/jetpack\/androidx\/releases\/car-app">Car App Library Release Notes<\/a>`! In in declaration of CarAppApiLevels in file .*\/androidx\/car\/app\/versioning\/CarAppApiLevels\.java at line 37\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty \(on jvm\), children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of popFirst in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 101\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of first in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 217\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of getFirst in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt, line number could not be determined\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of getLast in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt, line number could not be determined\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of last in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 231\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of popLast in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 119\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/removeFromEnd\/#kotlin\.Int\/PointingToCallableParameters\(0\)\/, children=\[Text\(body=count, children=\[\], params={}\)\], params={href=\[count\]}\), Text\(body= is larger than , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/size\/#\/PointingToDeclaration\/, children=\[Text\(body=size, children=\[\], params={}\)\], params={href=\[size\]}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of removeFromEnd in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 181\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/removeFromStart\/#kotlin\.Int\/PointingToCallableParameters\(0\)\/, children=\[Text\(body=count, children=\[\], params={}\)\], params={href=\[count\]}\), Text\(body= is larger than , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/size\/#\/PointingToDeclaration\/, children=\[Text\(body=size, children=\[\], params={}\)\], params={href=\[size\]}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of removeFromStart in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 146\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if n , children=\[\], params={}\), Text\(body=<, children=\[\], params={content-type=html}\), Text\(body= 0 or n , children=\[\], params={}\), Text\(body=>, children=\[\], params={content-type=html}\), Text\(body== size\(\), children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of get in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 246\.
-WARN: Link to @throws type AssertionFailedError does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the given , children=\[\], params={}\), DocumentationLink\(dri=org\.hamcrest\/Matcher\/\/\/PointingToDeclaration\/, children=\[Text\(body=Matcher, children=\[\], params={}\)\], params={}\), Text\(body= did not match any or matched more than one of the recorded intents, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=AssertionFailedError, exceptionAddress=null\) in in declaration of intended in file .*\/androidx\/test\/espresso\/intent\/Intents\.java at line 162\.
-WARN: Link to @throws type AssertionFailedError does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the given , children=\[\], params={}\), DocumentationLink\(dri=org\.hamcrest\/Matcher\/\/\/PointingToDeclaration\/, children=\[Text\(body=Matcher, children=\[\], params={}\)\], params={}\), Text\(body= did not match the expected number of recorded intents, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=AssertionFailedError, exceptionAddress=null\) in in declaration of intended in file .*\/androidx\/test\/espresso\/intent\/Intents\.java at line 162\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 58\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 59\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 87\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 90\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 73\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 75\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 42\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 42\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregate in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 198\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregate in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 202\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByDuration in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 206\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByDuration in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 215\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByPeriod in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 218\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByPeriod in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 231\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 115\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 117\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of insertRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 104\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of insertRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 92\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecord in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecord in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of updateRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 110\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of updateRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 105\.
-WARN: Link to @throws type kotlin\.IllegalArgumentException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if this enum type has no constant with the specified name, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=kotlin\.IllegalArgumentException, exceptionAddress=null\) in in declaration of valueOf in file .*\/nonJvmMain\/androidx\/annotation\/RestrictTo\.nonJvm\.kt, line number could not be determined\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Deleting by invalid identifiers such as a non-existing identifier or deleting the same record multiple times will result in IPC failure\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 115\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Update with invalid identifiers will result in IPC failure\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of readRecord in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Update with invalid identifiers will result in IPC failure\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of updateRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 110\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of aggregate in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 198\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of aggregateGroupByDuration in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 206\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of aggregateGroupByPeriod in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 218\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 115\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of getChanges in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 151\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of getChangesToken in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 151\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of insertRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 104\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of readRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type Renderer\.GlesException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=If any GL calls fail during initialization\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=Renderer\.GlesException, exceptionAddress=null\) in in declaration of GlesRenderer2 in file .*\/androidx\/wear\/watchface\/Renderer\.kt at line .*\.
-WARN: Link to @throws type ServiceStartFailureException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the watchface dies during startup\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ServiceStartFailureException, exceptionAddress=null\) in in declaration of getOrCreateInteractiveWatchFaceClient in file .*\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt at line 258\.
-WARN: Link to @throws type ServiceStartFailureException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the watchface dies during startup\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ServiceStartFailureException, exceptionAddress=null\) in in declaration of getOrCreateInteractiveWatchFaceClient in file .*\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt at line 305\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 58\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 59\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 87\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 90\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 73\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 75\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 42\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 42\.
-WARN: Missing @param tag for parameter `action` of function androidx\.core\.os\/\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.core\.os\/HandlerKt\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.slice\.builders\/ListBuilder\.InputRangeBuilder\/addEndItem\/#androidx\.slice\.builders\.SliceAction#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/addEndItem\/#androidx\.slice\.builders\.SliceAction#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/setTitleItem\/#androidx\.slice\.builders\.SliceAction#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.app\.Activity#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.app\.Activity#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/requestDragAndDropPermissions\/#android\.app\.Activity#android\.view\.DragEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/requireViewById\/#android\.app\.Activity#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setEnterSharedElementCallback\/#android\.app\.Activity#androidx\.core\.app\.SharedElementCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setExitSharedElementCallback\/#android\.app\.Activity#androidx\.core\.app\.SharedElementCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setLocusContext\/#android\.app\.Activity#androidx\.core\.content\.LocusIdCompat#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app\/ActivityScenario\/launch\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app\/ActivityScenario\/launchActivityForResult\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.ext\.junit\.rules\/ActivityScenarioRule\/ActivityScenarioRule\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `alpha` of function androidx\.compose\.ui\.graphics\/Color\.Companion\/hsl\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.colorspace\.Rgb\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `alpha` of function androidx\.compose\.ui\.graphics\/Color\.Companion\/hsv\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.colorspace\.Rgb\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `ambientColor` of function androidx\.compose\.ui\.draw\/\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `ambientColor` of function androidx\.compose\.ui\/Modifier\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `animatedImageVector` of function androidx\.compose\.animation\.graphics\.res\/\/rememberAnimatedVectorPainter\/#androidx\.compose\.animation\.graphics\.vector\.AnimatedImageVector#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `atPosition` of function androidx\.test\.espresso\/DataInteraction\.DisplayDataMatcher\/displayDataMatcher\/#org\.hamcrest\.Matcher<android\.view\.View>#org\.hamcrest\.Matcher<\? extends java\.lang\.Object>#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#androidx\.test\.espresso\.util\.EspressoOptional<java\.lang\.Integer>#androidx\.test\.espresso\.action\.AdapterViewProtocol\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/abandonAudioFocusRequest\/#android\.media\.AudioManager#androidx\.media\.AudioFocusRequestCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/getStreamMaxVolume\/#android\.media\.AudioManager#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/getStreamMinVolume\/#android\.media\.AudioManager#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/requestAudioFocus\/#android\.media\.AudioManager#androidx\.media\.AudioFocusRequestCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `autoMirror` of function androidx\.compose\.ui\.graphics\.vector\/\/rememberVectorPainter\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#kotlin\.Float#kotlin\.Float#kotlin\.String#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.BlendMode#kotlin\.Boolean#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `backgroundColor` of function androidx\.compose\.material\/\/BottomSheetScaffold\/#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.material\.BottomSheetScaffoldState#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function1\[androidx\.compose\.material\.SnackbarHostState,kotlin\.Unit\]#kotlin\.Function0\[kotlin\.Unit\]\?#androidx\.compose\.material\.FabPosition#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\?#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.PaddingValues,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bitmap` of function androidx\.core\.graphics\/BitmapCompat\/setHasMipMap\/#android\.graphics\.Bitmap#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.compose\.foundation\.lazy\.layout\/IntervalList\/forEach\/#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[androidx\.compose\.foundation\.lazy\.layout\.IntervalList\.Interval\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\],kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.compose\.foundation\.lazy\.layout\/MutableIntervalList\/forEach\/#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[androidx\.compose\.foundation\.lazy\.layout\.IntervalList\.Interval\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\],kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.compose\.runtime\.snapshots\/Snapshot\.Companion\/observe\/#kotlin\.Function1\[kotlin\.Any,kotlin\.Unit\]\?#kotlin\.Function1\[kotlin\.Any,kotlin\.Unit\]\?#kotlin\.Function0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/\/withStyledAttributes\/android\.content\.Context#android\.util\.AttributeSet\?#kotlin\.IntArray#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/ContextKt\/withStyledAttributes\/android\.content\.Context#android\.util\.AttributeSet\?#kotlin\.IntArray#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/ContextKt\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/\/traceAsync\/#kotlin\.Function0\[kotlin\.String\]#kotlin\.Function0\[kotlin\.Int\]#kotlin\.Function0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/\/traceAsync\/#kotlin\.String#kotlin\.Int#kotlin\.coroutines\.SuspendFunction0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/TraceKt\/traceAsync\/#kotlin\.Function0\[kotlin\.String\]#kotlin\.Function0\[kotlin\.Int\]#kotlin\.Function0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/TraceKt\/traceAsync\/#kotlin\.String#kotlin\.Int#kotlin\.coroutines\.SuspendFunction0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.core\.database\.sqlite\/\/transaction\/android\.database\.sqlite\.SQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[android\.database\.sqlite\.SQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.core\.database\.sqlite\/SQLiteDatabaseKt\/transaction\/android\.database\.sqlite\.SQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[android\.database\.sqlite\.SQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.sqlite\.db\/\/transaction\/androidx\.sqlite\.db\.SupportSQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[androidx\.sqlite\.db\.SupportSQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.sqlite\.db\/SupportSQLiteDatabase\/transaction\/androidx\.sqlite\.db\.SupportSQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[androidx\.sqlite\.db\.SupportSQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.sqlite\.db\/SupportSQLiteDatabaseKt\/transaction\/androidx\.sqlite\.db\.SupportSQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[androidx\.sqlite\.db\.SupportSQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bottom` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bottom` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bottom` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `boundingArc` of function androidx\.wear\.watchface\/CanvasComplication\/drawHighlight\/#android\.graphics\.Canvas#android\.graphics\.Rect#kotlin\.Int#java\.time\.ZonedDateTime#kotlin\.Int#androidx\.wear\.watchface\.BoundingArc\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `boundingArc` of function androidx\.wear\.watchface\/ComplicationSlot\.Companion\/createEdgeComplicationSlotBuilder\/#kotlin\.Int#androidx\.wear\.watchface\.CanvasComplicationFactory#kotlin\.collections\.List\[androidx\.wear\.watchface\.complications\.data\.ComplicationType\]#androidx\.wear\.watchface\.complications\.DefaultComplicationDataSourcePolicy#androidx\.wear\.watchface\.complications\.ComplicationSlotBounds#androidx\.wear\.watchface\.BoundingArc#androidx\.wear\.watchface\.ComplicationTapFilter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicActivityNavigatorDestinationBuilderKt\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicActivityNavigatorDestinationBuilderKt\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `button` of function androidx\.core\.widget\/CompoundButtonCompat\/setButtonTintList\/#android\.widget\.CompoundButton#android\.content\.res\.ColorStateList\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `button` of function androidx\.core\.widget\/CompoundButtonCompat\/setButtonTintMode\/#android\.widget\.CompoundButton#android\.graphics\.PorterDuff\.Mode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `c` of function androidx\.cursoradapter\.widget\/ResourceCursorAdapter\/ResourceCursorAdapter\/#android\.content\.Context#int#android\.database\.Cursor\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `callback` of function androidx\.core\.os\/HandlerCompat\/createAsync\/#android\.os\.Looper#android\.os\.Handler\.Callback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `carContext` of function androidx\.car\.app\/CarToast\/makeText\/#androidx\.car\.app\.CarContext#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `carContext` of function androidx\.car\.app\/CarToast\/makeText\/#androidx\.car\.app\.CarContext#java\.lang\.CharSequence#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `childCount` of function androidx\.recyclerview\.widget\/RecyclerView\.ChildDrawingOrderCallback\/onGetChildDrawingOrder\/#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `childMeasuredState` of function androidx\.core\.view\/ViewCompat\/resolveSizeAndState\/#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `color` of function androidx\.slice\.widget\/GridRowView\/addImageItem\/#androidx\.slice\.SliceItem#androidx\.slice\.SliceItem#int#android\.view\.ViewGroup#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `complicationTapFilter` of function androidx\.wear\.watchface\/ComplicationSlot\.Companion\/createEdgeComplicationSlotBuilder\/#kotlin\.Int#androidx\.wear\.watchface\.CanvasComplicationFactory#kotlin\.collections\.List\[androidx\.wear\.watchface\.complications\.data\.ComplicationType\]#androidx\.wear\.watchface\.complications\.DefaultComplicationDataSourcePolicy#androidx\.wear\.watchface\.complications\.ComplicationSlotBounds#androidx\.wear\.watchface\.BoundingArc#androidx\.wear\.watchface\.ComplicationTapFilter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `condition` of function androidx\.compose\.ui\.test\/MainTestClock\/advanceTimeUntil\/#kotlin\.Long#kotlin\.Function0\[kotlin\.Boolean\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.animation\.core\/Transition\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.animation\/\/Crossfade\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.String#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.animation\/\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.foundation\.layout\/\/Column\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.foundation\.layout\.Arrangement\.Vertical#androidx\.compose\.ui\.Alignment\.Horizontal#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.foundation\.layout\/\/Row\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.foundation\.layout\.Arrangement\.Horizontal#androidx\.compose\.ui\.Alignment\.Vertical#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Button\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.material\.ButtonElevation\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ButtonColors#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Card\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.foundation\.Indication\?#kotlin\.Boolean#kotlin\.String\?#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/DropdownMenuItem\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/MaterialTheme\/#androidx\.compose\.material\.Colors#androidx\.compose\.material\.Typography#androidx\.compose\.material\.Shapes#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/OutlinedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.material\.ButtonElevation\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ButtonColors#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Boolean#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Boolean#kotlin\.Function1\[kotlin\.Boolean,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.foundation\.Indication\?#kotlin\.Boolean#kotlin\.String\?#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/TextButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.material\.ButtonElevation\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ButtonColors#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Button\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Card\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/ElevatedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/ElevatedCard\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/ElevatedCard\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/FilledTonalButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/MaterialTheme\/#androidx\.compose\.material3\.ColorScheme#androidx\.compose\.material3\.Shapes#androidx\.compose\.material3\.Typography#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/OutlinedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/OutlinedCard\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/OutlinedCard\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#kotlin\.Boolean#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#kotlin\.Boolean#kotlin\.Function1\[kotlin\.Boolean,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/TextButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.runtime\.saveable\/SaveableStateHolder\/SaveableStateProvider\/#kotlin\.Any#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.core\.provider\/DocumentsContractCompat\/createDocument\/#android\.content\.ContentResolver#android\.net\.Uri#java\.lang\.String#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.core\.provider\/DocumentsContractCompat\/removeDocument\/#android\.content\.ContentResolver#android\.net\.Uri#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/AppCard\/#kotlin\.Function0\[kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\?#androidx\.compose\.ui\.graphics\.painter\.Painter#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.painter\.Painter#androidx\.compose\.ui\.graphics\.Color#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/Chip\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.wear\.compose\.material\.ChipColors#androidx\.wear\.compose\.material\.ChipBorder#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/ListHeader\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/MaterialTheme\/#androidx\.wear\.compose\.material\.Colors#androidx\.wear\.compose\.material\.Typography#androidx\.wear\.compose\.material\.Shapes#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/Scaffold\/#androidx\.compose\.ui\.Modifier#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/ScalingLazyColumn\/#androidx\.compose\.ui\.Modifier#androidx\.wear\.compose\.material\.ScalingLazyListState#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.Arrangement\.Vertical#androidx\.compose\.ui\.Alignment\.Horizontal#androidx\.compose\.foundation\.gestures\.FlingBehavior#kotlin\.Boolean#androidx\.wear\.compose\.material\.ScalingParams#androidx\.wear\.compose\.material\.ScalingLazyListAnchorType#androidx\.wear\.compose\.material\.AutoCenteringParams\?#kotlin\.Function1\[androidx\.wear\.compose\.material\.ScalingLazyListScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/TitleCard\/#kotlin\.Function0\[kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\?#androidx\.compose\.ui\.graphics\.painter\.Painter#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/Button\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/ChildButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/FilledTonalButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/MaterialTheme\/#androidx\.wear\.compose\.material3\.ColorScheme#androidx\.wear\.compose\.material3\.Typography#androidx\.wear\.compose\.material3\.Shapes#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/OutlinedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/\/curvedColumn\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedDirection\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/\/curvedRow\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedDirection\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/CurvedScope\/curvedColumn\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedDirection\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/CurvedScope\/curvedRow\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedDirection\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentColor` of function androidx\.compose\.material\/\/BottomSheetScaffold\/#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.material\.BottomSheetScaffoldState#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function1\[androidx\.compose\.material\.SnackbarHostState,kotlin\.Unit\]#kotlin\.Function0\[kotlin\.Unit\]\?#androidx\.compose\.material\.FabPosition#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\?#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.PaddingValues,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentKey` of function androidx\.compose\.animation\.core\/Transition\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentKey` of function androidx\.compose\.animation\/\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function android\.support\.v4\.media\.session\/MediaControllerCompat\/MediaControllerCompat\/#android\.content\.Context#android\.support\.v4\.media\.session\.MediaSessionCompat\.Token\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function android\.support\.v4\.media\.session\/MediaControllerCompat\/MediaControllerCompat\/#android\.content\.Context#android\.support\.v4\.media\.session\.MediaSessionCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.app\.Activity#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.view\.Window#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appcompat\.graphics\.drawable\/StateListDrawableCompat\/inflate\/#android\.content\.Context#android\.content\.res\.Resources#org\.xmlpull\.v1\.XmlPullParser#android\.util\.AttributeSet#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.app\/ShortcutAdapter\/createShortcutBuilderFromDocument\/#android\.content\.Context#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.localstorage\/LocalStorage\.SearchContext\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.platformstorage\/PlatformStorage\.SearchContext\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.playservicesstorage\/PlayServicesStorage\.SearchContext\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\.pm\/ShortcutManagerCompat\/createShortcutResultIntent\/#android\.content\.Context#androidx\.core\.content\.pm\.ShortcutInfoCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\.pm\/ShortcutManagerCompat\/getShortcuts\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\.pm\/ShortcutManagerCompat\/requestPinShortcut\/#android\.content\.Context#androidx\.core\.content\.pm\.ShortcutInfoCompat#android\.content\.IntentSender\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/checkSelfPermission\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/getColor\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/getColorStateList\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/getDrawable\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.graphics\/TypefaceCompat\/create\/#android\.content\.Context#android\.graphics\.Typeface#int#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.documentfile\.provider\/DocumentFile\/fromSingleUri\/#android\.content\.Context#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.documentfile\.provider\/DocumentFile\/fromTreeUri\/#android\.content\.Context#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.graphics\.opengl\.egl\/EGLSpec\/eglMakeCurrent\/#android\.opengl\.EGLContext#android\.opengl\.EGLSurface#android\.opengl\.EGLSurface\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.mediarouter\.media\/RemotePlaybackClient\/RemotePlaybackClient\/#android\.content\.Context#androidx\.mediarouter\.media\.MediaRouter\.RouteInfo\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/\/EncryptedSharedPreferences\/#android\.content\.Context#kotlin\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/EncryptedSharedPreferences\/create\/#android\.content\.Context#java\.lang\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/EncryptedSharedPreferencesKt\/EncryptedSharedPreferences\/#android\.content\.Context#kotlin\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.slice\.builders\/ListBuilder\/ListBuilder\/#android\.content\.Context#android\.net\.Uri#java\.time\.Duration\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.slice\.builders\/ListBuilder\/ListBuilder\/#android\.content\.Context#android\.net\.Uri#long\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.slice\/SliceUtils\/parseSlice\/#android\.content\.Context#java\.io\.InputStream#java\.lang\.String#androidx\.slice\.SliceUtils\.SliceActionListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.tvprovider\.media\.tv\/PreviewChannelHelper\/PreviewChannelHelper\/#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `controller` of function androidx\.media2\.session\/MediaSession\/sendCustomCommand\/#androidx\.media2\.session\.MediaSession\.ControllerInfo#androidx\.media2\.session\.SessionCommand#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `cookieManager` of function androidx\.webkit\/CookieManagerCompat\/getCookieInfo\/#android\.webkit\.CookieManager#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `coroutineDispatcher` of function androidx\.lifecycle\.testing\/TestLifecycleOwner\/TestLifecycleOwner\/#androidx\.lifecycle\.Lifecycle\.State#kotlinx\.coroutines\.CoroutineDispatcher\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `currentProgress` of function androidx\.constraintlayout\.core\.state\/Transition\/dragToProgress\/#float#int#int#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `dataKey` of function androidx\.compose\.runtime\/Composer\/startMovableGroup\/#kotlin\.Int#kotlin\.Any\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `detailsPresenter` of function androidx\.leanback\.widget\/DetailsOverviewRowPresenter\.ViewHolder\/ViewHolder\/#android\.view\.View#androidx\.leanback\.widget\.Presenter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `detailsPresenter` of function androidx\.leanback\.widget\/FullWidthDetailsOverviewRowPresenter\.ViewHolder\/ViewHolder\/#android\.view\.View#androidx\.leanback\.widget\.Presenter#androidx\.leanback\.widget\.DetailsOverviewLogoPresenter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `dialog` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.app\.Dialog#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `disabledElevation` of function androidx\.compose\.material3\/CardDefaults\/cardElevation\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `disabledElevation` of function androidx\.compose\.material3\/CardDefaults\/elevatedCardElevation\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `disabledElevation` of function androidx\.compose\.material3\/CardDefaults\/outlinedCardElevation\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `dpToPixel` of function androidx\.constraintlayout\.core\.state\/TransitionParser\/parse\/#androidx\.constraintlayout\.core\.parser\.CLObject#androidx\.constraintlayout\.core\.state\.Transition#androidx\.constraintlayout\.core\.state\.CorePixelDp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `drawable` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/inflate\/#android\.graphics\.drawable\.Drawable#android\.content\.res\.Resources#org\.xmlpull\.v1\.XmlPullParser#android\.util\.AttributeSet#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `drawable` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setLayoutDirection\/#android\.graphics\.drawable\.Drawable#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `edgeEffect` of function androidx\.core\.widget\/EdgeEffectCompat\/onPullDistance\/#android\.widget\.EdgeEffect#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/getInitialSelectedText\/#android\.view\.inputmethod\.EditorInfo#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/getInitialTextAfterCursor\/#android\.view\.inputmethod\.EditorInfo#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/getInitialTextBeforeCursor\/#android\.view\.inputmethod\.EditorInfo#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/setInitialSurroundingSubText\/#android\.view\.inputmethod\.EditorInfo#java\.lang\.CharSequence#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/setInitialSurroundingText\/#android\.view\.inputmethod\.EditorInfo#java\.lang\.CharSequence\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `enabled` of function androidx\.wear\.compose\.material3\/ButtonDefaults\/outlinedButtonBorder\/#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `end` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `end` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/appendRecord\/#android\.view\.accessibility\.AccessibilityEvent#androidx\.core\.view\.accessibility\.AccessibilityRecordCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/getRecord\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/setAction\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/setContentChangeTypes\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/setMovementGranularity\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\/MotionEventCompat\/getAxisValue\/#android\.view\.MotionEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\/MotionEventCompat\/getAxisValue\/#android\.view\.MotionEvent#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\/MotionEventCompat\/isFromSource\/#android\.view\.MotionEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `executor` of function androidx\.slice\/SliceViewManager\/registerSliceCallback\/#android\.net\.Uri#java\.util\.concurrent\.Executor#androidx\.slice\.SliceViewManager\.SliceCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `extras` of function androidx\.media2\.session\/MediaController\/setMediaUri\/#android\.net\.Uri#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `factory` of function androidx\.lifecycle\.viewmodel\.compose\/\/viewModel\/#java\.lang\.Class\[TypeParam\(bounds=\[androidx\.lifecycle\.ViewModel\]\)\]#androidx\.lifecycle\.ViewModelStoreOwner#kotlin\.String\?#androidx\.lifecycle\.ViewModelProvider\.Factory\?#androidx\.lifecycle\.viewmodel\.CreationExtras\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `flags` of function androidx\.constraintlayout\.core\.widgets\/ConstraintWidgetContainer\/updateChildrenFromSolver\/#androidx\.constraintlayout\.core\.LinearSystem#boolean\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromX` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromX` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromY` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromY` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `group` of function androidx\.core\.view\/ViewGroupCompat\/setLayoutMode\/#android\.view\.ViewGroup#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `group` of function androidx\.core\.view\/ViewGroupCompat\/setTransitionGroup\/#android\.view\.ViewGroup#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `handler` of function androidx\.core\.os\/HandlerCompat\/postDelayed\/#android\.os\.Handler#java\.lang\.Runnable#java\.lang\.Object#long\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `holder` of function androidx\.paging\/LoadStateAdapter\/onBindViewHolder\/#TypeParam\(bounds=\[androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder\]\)#androidx\.paging\.LoadState\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `horizontalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setLinearLayoutHorizontalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `horizontalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setRelativeLayoutHorizontalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `id` of function androidx\.leanback\.widget\/PlaybackControlsRow\.ThumbsAction\/ThumbsAction\/#int#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `inflater` of function androidx\.fragment\.app\/Fragment\/onCreateOptionsMenu\/#android\.view\.Menu#android\.view\.MenuInflater\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `info` of function androidx\.compose\.runtime\/\/traceEventStart\/#kotlin\.Int#kotlin\.Int#kotlin\.Int#kotlin\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initial` of function androidx\.compose\.runtime\/\/collectAsState\/kotlinx\.coroutines\.flow\.Flow\[TypeParam\(bounds=\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)#kotlin\.coroutines\.CoroutineContext\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initialValue` of function androidx\.compose\.animation\.core\/\/animate\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.AnimationSpec\[kotlin\.Float\]#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initialValue` of function androidx\.compose\.animation\.core\/\/animateDecay\/#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.FloatDecayAnimationSpec#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initialVelocity` of function androidx\.compose\.animation\.core\/\/animateDecay\/#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.FloatDecayAnimationSpec#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `isNullableAllowed` of function androidx\.navigation\/NavType\/NavType\/#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setAlphabeticShortcut\/#android\.view\.MenuItem#char#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setIconTintList\/#android\.view\.MenuItem#android\.content\.res\.ColorStateList\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setIconTintMode\/#android\.view\.MenuItem#android\.graphics\.PorterDuff\.Mode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setNumericShortcut\/#android\.view\.MenuItem#char#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setOnActionExpandListener\/#android\.view\.MenuItem#androidx\.core\.view\.MenuItemCompat\.OnActionExpandListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setShortcut\/#android\.view\.MenuItem#char#char#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.collection\/LruCache\/entryRemoved\/#kotlin\.Boolean#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.compose\.runtime\/\/traceEventStart\/#kotlin\.Int#kotlin\.Int#kotlin\.Int#kotlin\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.paging\/ItemKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.paging\/PageKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `keyAlias` of function androidx\.security\.crypto\/MasterKey\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\.core\/Animatable\/Animatable\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#androidx\.compose\.animation\.core\.TwoWayConverter\[TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[androidx\.compose\.animation\.core\.AnimationVector\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#kotlin\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/ColumnScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/ColumnScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/RowScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/RowScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/\/onAllNodesWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/\/onNodeWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onAllNodesWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onNodeWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `leadingIconContentColor` of function androidx\.compose\.material\/ChipDefaults\/outlinedChipColors\/#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `left` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `len` of function androidx\.constraintlayout\.motion\.widget\/DesignTool\/getAnimationPath\/#java\.lang\.Object#float\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.camera\.view\/RotationProvider\/addListener\/#java\.util\.concurrent\.Executor#androidx\.camera\.view\.RotationProvider\.Listener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.core\.view\/DragStartHelper\/DragStartHelper\/#android\.view\.View#androidx\.core\.view\.DragStartHelper\.OnDragStartListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.customview\.poolingcontainer\/\/addPoolingContainerListener\/android\.view\.View#androidx\.customview\.poolingcontainer\.PoolingContainerListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.customview\.poolingcontainer\/PoolingContainer\/addPoolingContainerListener\/android\.view\.View#androidx\.customview\.poolingcontainer\.PoolingContainerListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listView` of function androidx\.core\.widget\/ListViewCompat\/canScrollList\/#android\.widget\.ListView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `logoPresenter` of function androidx\.leanback\.widget\/FullWidthDetailsOverviewRowPresenter\.ViewHolder\/ViewHolder\/#android\.view\.View#androidx\.leanback\.widget\.Presenter#androidx\.leanback\.widget\.DetailsOverviewLogoPresenter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `lp` of function androidx\.core\.view\/MarginLayoutParamsCompat\/setLayoutDirection\/#android\.view\.ViewGroup\.MarginLayoutParams#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `manager` of function androidx\.core\.view\.accessibility\/AccessibilityManagerCompat\/addTouchExplorationStateChangeListener\/#android\.view\.accessibility\.AccessibilityManager#androidx\.core\.view\.accessibility\.AccessibilityManagerCompat\.TouchExplorationStateChangeListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `manager` of function androidx\.core\.view\.accessibility\/AccessibilityManagerCompat\/removeTouchExplorationStateChangeListener\/#android\.view\.accessibility\.AccessibilityManager#androidx\.core\.view\.accessibility\.AccessibilityManagerCompat\.TouchExplorationStateChangeListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `margin` of function androidx\.constraintlayout\.widget\/ConstraintSet\/createBarrier\/#int#int#int#int\.\.\.\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `mask` of function androidx\.core\.view\/ViewCompat\/setScrollIndicators\/#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `matchHeightConstraintsFirst` of function androidx\.compose\.foundation\.layout\/\/aspectRatio\/androidx\.compose\.ui\.Modifier#kotlin\.Float#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `matchHeightConstraintsFirst` of function androidx\.compose\.ui\/Modifier\/aspectRatio\/androidx\.compose\.ui\.Modifier#kotlin\.Float#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `message` of function androidx\.core\.os\/MessageCompat\/setAsynchronous\/#android\.os\.Message#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `metadata` of function androidx\.media2\.common\/SessionPlayer\/setPlaylist\/#java\.util\.List<androidx\.media2\.common\.MediaItem>#androidx\.media2\.common\.MediaMetadata\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `metadata` of function androidx\.media2\.player\/MediaPlayer\/setPlaylist\/#java\.util\.List<androidx\.media2\.common\.MediaItem>#androidx\.media2\.common\.MediaMetadata\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `modifier` of function androidx\.compose\.material\/\/Divider\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `motionScene` of function androidx\.constraintlayout\.compose\/\/MotionCarousel\/#androidx\.constraintlayout\.compose\.MotionScene#kotlin\.Int#kotlin\.Int#kotlin\.String#kotlin\.String#kotlin\.String#kotlin\.Boolean#kotlin\.Function1\[androidx\.constraintlayout\.compose\.MotionCarouselScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `name` of function androidx\.leanback\.widget\/Parallax\/createProperty\/#java\.lang\.String#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `name` of function androidx\.leanback\.widget\/RecyclerViewParallax\/createProperty\/#java\.lang\.String#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `nextPageKey` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialCallback\/onResult\/#kotlin\.collections\.List\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#kotlin\.Int#kotlin\.Int#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `night` of function androidx\.core\.widget\/RemoteViewsCompat\/setSwitchThumbIcon\/android\.widget\.RemoteViews#kotlin\.Int#android\.graphics\.drawable\.Icon\?#android\.graphics\.drawable\.Icon\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `night` of function androidx\.core\.widget\/RemoteViewsCompat\/setSwitchTrackIcon\/android\.widget\.RemoteViews#kotlin\.Int#android\.graphics\.drawable\.Icon\?#android\.graphics\.drawable\.Icon\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `oldValue` of function androidx\.collection\/LruCache\/entryRemoved\/#kotlin\.Boolean#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `onSelectAllRequested` of function androidx\.compose\.ui\.platform\/TextToolbar\/showMenu\/#androidx\.compose\.ui\.geometry\.Rect#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `operation` of function androidx\.compose\.ui\.graphics\/AndroidPath\/op\/#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.PathOperation\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `operation` of function androidx\.compose\.ui\.graphics\/Path\/op\/#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.PathOperation\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `outlineIconIndex` of function androidx\.leanback\.widget\/PlaybackControlsRow\.ThumbsAction\/ThumbsAction\/#int#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `output` of function androidx\.datastore\.core\/Serializer\/writeTo\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#java\.io\.OutputStream\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `painter` of function androidx\.compose\.ui\.draw\/\/paint\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.painter\.Painter#kotlin\.Boolean#androidx\.compose\.ui\.Alignment#androidx\.compose\.ui\.layout\.ContentScale#kotlin\.Float#androidx\.compose\.ui\.graphics\.ColorFilter\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `painter` of function androidx\.compose\.ui\/Modifier\/paint\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.painter\.Painter#kotlin\.Boolean#androidx\.compose\.ui\.Alignment#androidx\.compose\.ui\.layout\.ContentScale#kotlin\.Float#androidx\.compose\.ui\.graphics\.ColorFilter\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parcelableClass` of function androidx\.test\.espresso\.remote\/TypeProtoConverters\/byteStringToParcelable\/#com\.google\.protobuf\.ByteString#java\.lang\.Class<android\.os\.Parcelable>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/notifySubtreeAccessibilityStateChanged\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedFling\/#android\.view\.ViewParent#android\.view\.View#float#float#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedPreFling\/#android\.view\.ViewParent#android\.view\.View#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedPreScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedPreScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int#int#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScrollAccepted\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScrollAccepted\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStartNestedScroll\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStartNestedScroll\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStopNestedScroll\/#android\.view\.ViewParent#android\.view\.View\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStopNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.leanback\.widget\/GridLayoutManager\/requestChildRectangleOnScreen\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.View#android\.graphics\.Rect#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.recyclerview\.widget\/RecyclerView\.LayoutManager\/requestChildRectangleOnScreen\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.View#android\.graphics\.Rect#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `path` of function androidx\.core\.graphics\/PathUtils\/flatten\/#android\.graphics\.Path#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pathFillType` of function androidx\.compose\.ui\.graphics\.vector\/\/path\/androidx\.compose\.ui\.graphics\.vector\.ImageVector\.Builder#kotlin\.String#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.StrokeCap#androidx\.compose\.ui\.graphics\.StrokeJoin#kotlin\.Float#androidx\.compose\.ui\.graphics\.PathFillType#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.vector\.PathBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pathFillType` of function androidx\.compose\.ui\.graphics\.vector\/ImageVector\.Builder\/path\/androidx\.compose\.ui\.graphics\.vector\.ImageVector\.Builder#kotlin\.String#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.StrokeCap#androidx\.compose\.ui\.graphics\.StrokeJoin#kotlin\.Float#androidx\.compose\.ui\.graphics\.PathFillType#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.vector\.PathBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.core\.view\/ContentInfoCompat\/partition\/#android\.view\.ContentInfo#java\.util\.function\.Predicate<android\.content\.ClipData\.Item>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/BatchingListUpdateCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/ListUpdateCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedList\.BatchedCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedList\.Callback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedListAdapterCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `phase` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `phase` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `placeholdersEnabled` of function androidx\.paging\/ItemKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)\?#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `placeholdersEnabled` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pointCount` of function androidx\.constraintlayout\.core\.motion\/Motion\/buildPath\/#float\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pointerId` of function androidx\.customview\.widget\/ViewDragHelper\/isEdgeTouched\/#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `popupWindow` of function androidx\.core\.widget\/PopupWindowCompat\/setOverlapAnchor\/#android\.widget\.PopupWindow#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `popupWindow` of function androidx\.core\.widget\/PopupWindowCompat\/setWindowLayoutType\/#android\.widget\.PopupWindow#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/place\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelative\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelativeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\/placeAt\/#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `previousPageKey` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialCallback\/onResult\/#kotlin\.collections\.List\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#kotlin\.Int#kotlin\.Int#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `priority` of function androidx\.camera\.camera2\.interop\/CaptureRequestOptions\/retrieveOptionWithPriority\/#androidx\.camera\.core\.impl\.Config\.Option<ValueT>#androidx\.camera\.core\.impl\.Config\.OptionPriority\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `priority` of function androidx\.camera\.core\/CameraXConfig\/retrieveOptionWithPriority\/#androidx\.camera\.core\.impl\.Config\.Option<ValueT>#androidx\.camera\.core\.impl\.Config\.OptionPriority\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `width` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `height` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `format` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `usage` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `priority` of function androidx\.camera\.testing\.impl\.fakes/FakeUseCaseConfig/retrieveOptionWithPriority/\#androidx\.camera\.core\.impl\.Config\.Option<ValueT>\#androidx\.camera\.core\.impl\.Config\.OptionPriority/PointingToDeclaration/
-WARN: Missing @param tag for parameter `classType` of function androidx\.camera\.testing\.impl\.mocks/MockConsumer/verifyAcceptCall/\#java\.lang\.Class<\?>\#boolean\#androidx\.camera\.testing\.impl\.mocks\.helpers\.CallTimes\#androidx\.camera\.testing\.impl\.mocks\.helpers\.ArgumentCaptor<T>/PointingToDeclaration/
-WARN: Missing @param tag for parameter `inOrder` of function androidx\.camera\.testing\.impl\.mocks/MockConsumer/verifyAcceptCall/\#java\.lang\.Class<\?>\#boolean\#androidx\.camera\.testing\.impl\.mocks\.helpers\.CallTimes\#androidx\.camera\.testing\.impl\.mocks\.helpers\.ArgumentCaptor<T>/PointingToDeclaration/
-WARN: Missing @param tag for parameter `callTimes` of function androidx\.camera\.testing\.impl\.mocks/MockConsumer/verifyAcceptCall/\#java\.lang\.Class<\?>\#boolean\#androidx\.camera\.testing\.impl\.mocks\.helpers\.CallTimes\#androidx\.camera\.testing\.impl\.mocks\.helpers\.ArgumentCaptor<T>/PointingToDeclaration/
-WARN: Missing @param tag for parameter `query` of function androidx\.leanback\.app\/SearchFragment\/createArgs\/#android\.os\.Bundle#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `query` of function androidx\.leanback\.app\/SearchSupportFragment\/createArgs\/#android\.os\.Bundle#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `radians` of function androidx\.compose\.ui\.graphics\/\/rotateRad\/androidx\.compose\.ui\.graphics\.Canvas#kotlin\.Float#kotlin\.Float#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `radians` of function androidx\.compose\.ui\.graphics\/Canvas\/rotateRad\/androidx\.compose\.ui\.graphics\.Canvas#kotlin\.Float#kotlin\.Float#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `reason` of function androidx\.car\.app\.model\/AlertCallbackDelegate\/sendCancel\/#int#androidx\.car\.app\.OnDoneCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `removeFromDefinition` of function androidx\.constraintlayout\.core\/ArrayLinkedVariables\/add\/#androidx\.constraintlayout\.core\.SolverVariable#float#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `removeFromDefinition` of function androidx\.constraintlayout\.core\/ArrayLinkedVariables\/remove\/#androidx\.constraintlayout\.core\.SolverVariable#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `removeFromDefinition` of function androidx\.constraintlayout\.core\/ArrayLinkedVariables\/use\/#androidx\.constraintlayout\.core\.ArrayRow#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `renderEffect` of function androidx\.compose\.ui\.graphics\/BlurEffect\/BlurEffect\/#androidx\.compose\.ui\.graphics\.RenderEffect\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.TileMode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedInitialKey` of function androidx\.paging\/ItemKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)\?#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/ItemKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)\?#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/ItemKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/PageKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getColor\/#android\.content\.res\.Resources#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getColorStateList\/#android\.content\.res\.Resources#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getDrawable\/#android\.content\.res\.Resources#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getDrawableForDensity\/#android\.content\.res\.Resources#int#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getFloat\/#android\.content\.res\.Resources#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `resolver` of function androidx\.core\.content\/ContentResolverCompat\/query\/#android\.content\.ContentResolver#android\.net\.Uri#java\.lang\.String\[\]#java\.lang\.String#java\.lang\.String\[\]#java\.lang\.String#androidx\.core\.os\.CancellationSignal\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `resourceId` of function androidx\.core\.content\/\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `resourceId` of function androidx\.core\.content\/ContextKt\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `right` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rootMatcher` of function androidx\.test\.espresso\/DataInteraction\.DisplayDataMatcher\/displayDataMatcher\/#org\.hamcrest\.Matcher<android\.view\.View>#org\.hamcrest\.Matcher<\? extends java\.lang\.Object>#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#androidx\.test\.espresso\.util\.EspressoOptional<java\.lang\.Integer>#androidx\.test\.espresso\.action\.AdapterViewProtocol\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.OnItemTouchListener\/onInterceptTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.OnItemTouchListener\/onTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.SimpleOnItemTouchListener\/onInterceptTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.SimpleOnItemTouchListener\/onTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `scaleGestureDetector` of function androidx\.core\.view\/ScaleGestureDetectorCompat\/setQuickScaleEnabled\/#android\.view\.ScaleGestureDetector#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `scaleGestureDetector` of function androidx\.core\.view\/ScaleGestureDetectorCompat\/setQuickScaleEnabled\/#java\.lang\.Object#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `sceneRoot` of function androidx\.transition\/TransitionInflater\/inflateTransitionManager\/#int#android\.view\.ViewGroup\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava2\/\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava2\/RxDataStoreDelegateKt\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava3\/\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.rxjava3\.core\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava3\/RxDataStoreDelegateKt\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.rxjava3\.core\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\/\/dataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\]\]#kotlinx\.coroutines\.CoroutineScope\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\/DataStoreDelegateKt\/dataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\]\]#kotlinx\.coroutines\.CoroutineScope\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `service` of function androidx\.core\.app\/ServiceCompat\/stopForeground\/#android\.app\.Service#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setAlgorithmicDarkeningAllowed\/#android\.webkit\.WebSettings#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setDisabledActionModeMenuItems\/#android\.webkit\.WebSettings#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setEnterpriseAuthenticationAppLinkPolicyEnabled\/#android\.webkit\.WebSettings#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setForceDark\/#android\.webkit\.WebSettings#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setForceDarkStrategy\/#android\.webkit\.WebSettings#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setSafeBrowsingEnabled\/#android\.webkit\.WebSettings#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.compose\.material\/\/Chip\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ChipColors#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.compose\.material\/TextFieldDefaults\/BorderBox\/#kotlin\.Boolean#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.InteractionSource#androidx\.compose\.material\.TextFieldColors#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.compose\.material3\/\/NavigationDrawerItem\/#kotlin\.Function0\[kotlin\.Unit\]#kotlin\.Boolean#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.NavigationDrawerItemColors#androidx\.compose\.foundation\.interaction\.MutableInteractionSource\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shouldRunMigration` of function androidx\.datastore\.migrations\/SharedPreferencesMigration\/SharedPreferencesMigration\/#android\.content\.Context#kotlin\.String#kotlin\.collections\.Set\[kotlin\.String\]#kotlin\.coroutines\.SuspendFunction1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Boolean\]#kotlin\.coroutines\.SuspendFunction2\[androidx\.datastore\.migrations\.SharedPreferencesView,TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shouldRunMigration` of function androidx\.datastore\.migrations\/SharedPreferencesMigration\/SharedPreferencesMigration\/#kotlin\.Function0\[android\.content\.SharedPreferences\]#kotlin\.collections\.Set\[kotlin\.String\]#kotlin\.coroutines\.SuspendFunction1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Boolean\]#kotlin\.coroutines\.SuspendFunction2\[androidx\.datastore\.migrations\.SharedPreferencesView,TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `solidIconIndex` of function androidx\.leanback\.widget\/PlaybackControlsRow\.ThumbsAction\/ThumbsAction\/#int#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `spotColor` of function androidx\.compose\.ui\.draw\/\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `spotColor` of function androidx\.compose\.ui\/Modifier\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `start` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `start` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startActivityIntent` of function androidx\.test\.core\.app\/ActivityScenario\/launch\/#android\.content\.Intent#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startActivityIntent` of function androidx\.test\.core\.app\/ActivityScenario\/launchActivityForResult\/#android\.content\.Intent#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startActivityIntent` of function androidx\.test\.ext\.junit\.rules\/ActivityScenarioRule\/ActivityScenarioRule\/#android\.content\.Intent#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startDestinationArgs` of function androidx\.navigation\/NavController\/setGraph\/#androidx\.navigation\.NavGraph#android\.os\.Bundle\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `subtitle` of function androidx\.slice\.builders\/ListBuilder\.HeaderBuilder\/setSubtitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `subtitle` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/setSubtitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `summary` of function androidx\.slice\.builders\/ListBuilder\.HeaderBuilder\/setSummary\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/\/TestListenableWorkerBuilder\/#android\.content\.Context#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/\/TestWorkerBuilder\/#android\.content\.Context#java\.util\.concurrent\.Executor#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/TestListenableWorkerBuilderKt\/TestListenableWorkerBuilder\/#android\.content\.Context#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/TestWorkerBuilderKt\/TestWorkerBuilder\/#android\.content\.Context#java\.util\.concurrent\.Executor#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `target` of function androidx\.camera\.view\.transform\/CoordinateTransform\/CoordinateTransform\/#androidx\.camera\.view\.transform\.OutputTransform#androidx\.camera\.view\.transform\.OutputTransform\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `target` of function androidx\.constraintlayout\.core\/LinearSystem\/addCenterPoint\/#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#float#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `target` of function androidx\.palette\.graphics\/Palette\/getColorForTarget\/#androidx\.palette\.graphics\.Target#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `targetValue` of function androidx\.compose\.animation\.core\/\/animate\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.AnimationSpec\[kotlin\.Float\]#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/\/onAllNodesWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/\/onNodeWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onAllNodesWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onNodeWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/\/onAllNodesWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/\/onNodeWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onAllNodesWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onNodeWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/\/AnnotatedString\/#kotlin\.String#androidx\.compose\.ui\.text\.ParagraphStyle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/\/AnnotatedString\/#kotlin\.String#androidx\.compose\.ui\.text\.SpanStyle#androidx\.compose\.ui\.text\.ParagraphStyle\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/AnnotatedString\.Builder\/append\/#androidx\.compose\.ui\.text\.AnnotatedString#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/AnnotatedString\.Builder\/append\/#kotlin\.CharSequence\?#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.slice\.builders\/GridRowBuilder\.CellBuilder\/addOverlayText\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.slice\.builders\/GridRowBuilder\.CellBuilder\/addText\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.slice\.builders\/GridRowBuilder\.CellBuilder\/addTitleText\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/CheckedTextViewCompat\/setCheckMarkTintList\/#android\.widget\.CheckedTextView#android\.content\.res\.ColorStateList\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/CheckedTextViewCompat\/setCheckMarkTintMode\/#android\.widget\.CheckedTextView#android\.graphics\.PorterDuff\.Mode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setAutoSizeTextTypeUniformWithConfiguration\/#android\.widget\.TextView#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setAutoSizeTextTypeUniformWithPresetSizes\/#android\.widget\.TextView#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setAutoSizeTextTypeWithDefaults\/#android\.widget\.TextView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setFirstBaselineToTopHeight\/#android\.widget\.TextView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setLastBaselineToBottomHeight\/#android\.widget\.TextView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `thumbSize` of function androidx\.compose\.material3\/SliderDefaults\/Thumb\/#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.Modifier#androidx\.compose\.material3\.SliderColors#kotlin\.Boolean#androidx\.compose\.ui\.unit\.DpSize\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `title` of function androidx\.slice\.builders\/ListBuilder\.HeaderBuilder\/setTitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `title` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/setTitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toJSON` of function androidx\.constraintlayout\.core\.state\/CoreMotionScene\/setTransitionContent\/#java\.lang\.String#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `top` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `top` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `top` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toX` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toX` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toY` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toY` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `transformFilter` of function androidx\.core\.text\.util\/LinkifyCompat\/addLinks\/#android\.widget\.TextView#java\.util\.regex\.Pattern#java\.lang\.String#android\.text\.util\.Linkify\.MatchFilter#android\.text\.util\.Linkify\.TransformFilter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `trimPathEnd` of function androidx\.compose\.ui\.graphics\.vector\/ImageVector\.Builder\/addPath\/#kotlin\.collections\.List\[androidx\.compose\.ui\.graphics\.vector\.PathNode\]#androidx\.compose\.ui\.graphics\.PathFillType#kotlin\.String#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.StrokeCap#androidx\.compose\.ui\.graphics\.StrokeJoin#kotlin\.Float#kotlin\.Float#kotlin\.Float#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.constraintlayout\.core\.motion\/Motion\/getKeyFrameInfo\/#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.constraintlayout\.motion\.widget\/DesignTool\/getKeyFrameInfo\/#java\.lang\.Object#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.constraintlayout\.motion\.widget\/MotionController\/getKeyFrameInfo\/#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.core\.view\/NestedScrollingChildHelper\/startNestedScroll\/#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.textclassifier\/TextClassification\.Builder\/setEntityType\/#java\.lang\.String#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.textclassifier\/TextSelection\.Builder\/setEntityType\/#java\.lang\.String#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `typeConverter` of function androidx\.compose\.animation\.core\/\/animateValueAsState\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#androidx\.compose\.animation\.core\.TwoWayConverter\[TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[androidx\.compose\.animation\.core\.AnimationVector\]\)\]#androidx\.compose\.animation\.core\.AnimationSpec\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#kotlin\.String#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `uptimeMillis` of function androidx\.core\.os\/\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `uptimeMillis` of function androidx\.core\.os\/HandlerKt\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `useEmojiAsDefaultStyle` of function androidx\.emoji\.text\/EmojiCompat\.Config\/setUseEmojiAsDefaultStyle\/#boolean#java\.util\.List<java\.lang\.Integer>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `useEmojiAsDefaultStyle` of function androidx\.emoji2\.text\/EmojiCompat\.Config\/setUseEmojiAsDefaultStyle\/#boolean#java\.util\.List<java\.lang\.Integer>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.compose\.ui\.graphics\/ColorMatrix\/set\/#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/addOnUnhandledKeyEventListener\/#android\.view\.View#androidx\.core\.view\.ViewCompat\.OnUnhandledKeyEventListenerCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/removeOnUnhandledKeyEventListener\/#android\.view\.View#androidx\.core\.view\.ViewCompat\.OnUnhandledKeyEventListenerCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/setAccessibilityDelegate\/#android\.view\.View#androidx\.core\.view\.AccessibilityDelegateCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/setAutofillHints\/#android\.view\.View#java\.lang\.String\.\.\.\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/setSaveFromParentEnabled\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `value` of function androidx\.datastore\.preferences\.core\/MutablePreferences\/set\/#androidx\.datastore\.preferences\.core\.Preferences\.Key\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `variationSettings` of function androidx\.compose\.ui\.text\.font\/AndroidFont\/AndroidFont\/#androidx\.compose\.ui\.text\.font\.FontLoadingStrategy#androidx\.compose\.ui\.text\.font\.AndroidFont\.TypefaceLoader#androidx\.compose\.ui\.text\.font\.FontVariation\.Settings\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `verificationMode` of function androidx\.test\.espresso\.intent\/Intents\/intended\/#org\.hamcrest\.Matcher<android\.content\.Intent>#androidx\.test\.espresso\.intent\.VerificationMode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `verticalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setLinearLayoutVerticalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `verticalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setRelativeLayoutVerticalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/addKeyboardNavigationClusters\/#android\.view\.View#java\.util\.Collection<android\.view\.View>#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/computeSystemWindowInsets\/#android\.view\.View#androidx\.core\.view\.WindowInsetsCompat#android\.graphics\.Rect\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchApplyWindowInsets\/#android\.view\.View#androidx\.core\.view\.WindowInsetsCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedFling\/#android\.view\.View#float#float#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedPreFling\/#android\.view\.View#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedPreScroll\/#android\.view\.View#int#int#int\[\]#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedPreScroll\/#android\.view\.View#int#int#int\[\]#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedScroll\/#android\.view\.View#int#int#int#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedScroll\/#android\.view\.View#int#int#int#int#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedScroll\/#android\.view\.View#int#int#int#int#int\[\]#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/hasNestedScrollingParent\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/keyboardNavigationClusterSearch\/#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/offsetLeftAndRight\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/offsetTopAndBottom\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/performAccessibilityAction\/#android\.view\.View#int#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/requireViewById\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/saveAttributeDataForStyleable\/#android\.view\.View#android\.content\.Context#int\[\]#android\.util\.AttributeSet#android\.content\.res\.TypedArray#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setActivated\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setAlpha\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setFocusedByDefault\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setKeyboardNavigationCluster\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setNestedScrollingEnabled\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setNextClusterForwardId\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setPivotX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setPivotY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setPointerIcon\/#android\.view\.View#androidx\.core\.view\.PointerIconCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setRotation\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setRotationX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setRotationY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScaleX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScaleY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScrollIndicators\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScrollIndicators\/#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setStateDescription\/#android\.view\.View#java\.lang\.CharSequence\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setSystemGestureExclusionRects\/#android\.view\.View#java\.util\.List<android\.graphics\.Rect>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setTooltipText\/#android\.view\.View#java\.lang\.CharSequence\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setTranslationX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setTranslationY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setWindowInsetsAnimationCallback\/#android\.view\.View#androidx\.core\.view\.WindowInsetsAnimationCompat\.Callback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setZ\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/startNestedScroll\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/startNestedScroll\/#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/stopNestedScroll\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewAssert` of function androidx\.test\.espresso\.remote\/RemoteInteraction\/createRemoteCheckCallable\/#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#org\.hamcrest\.Matcher<android\.view\.View>#java\.util\.Map<java\.lang\.String,android\.os\.IBinder>#androidx\.test\.espresso\.ViewAssertion\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewAssertion` of function androidx\.test\.espresso\.remote\/EspressoRemote\/createRemoteCheckCallable\/#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#org\.hamcrest\.Matcher<android\.view\.View>#java\.util\.Map<java\.lang\.String,android\.os\.IBinder>#androidx\.test\.espresso\.ViewAssertion\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewAssertion` of function androidx\.test\.espresso\.remote\/NoopRemoteInteraction\/createRemoteCheckCallable\/#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#org\.hamcrest\.Matcher<android\.view\.View>#java\.util\.Map<java\.lang\.String,android\.os\.IBinder>#androidx\.test\.espresso\.ViewAssertion\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewGroup` of function androidx\.core\.view\/ViewCompat\/setChildrenDrawingOrderEnabled\/#android\.view\.ViewGroup#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewId` of function androidx\.constraintlayout\.widget\/ConstraintSet\/setApplyElevation\/#int#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `waveString` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `waveString` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `webview` of function androidx\.webkit\/WebViewCompat\/postVisualStateCallback\/#android\.webkit\.WebView#long#androidx\.webkit\.WebViewCompat\.VisualStateCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `webview` of function androidx\.webkit\/WebViewCompat\/postWebMessage\/#android\.webkit\.WebView#androidx\.webkit\.WebMessageCompat#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `webview` of function androidx\.webkit\/WebViewCompat\/removeWebMessageListener\/#android\.webkit\.WebView#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `widget` of function androidx\.constraintlayout\.core\/LinearSystem\/addCenterPoint\/#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#float#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `widgets` of function androidx\.constraintlayout\.core\.widgets\/Chain\/applyChainConstraints\/#androidx\.constraintlayout\.core\.widgets\.ConstraintWidgetContainer#androidx\.constraintlayout\.core\.LinearSystem#java\.util\.ArrayList<androidx\.constraintlayout\.core\.widgets\.ConstraintWidget>#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `window` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.view\.Window#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `window` of function androidx\.core\.view\/WindowCompat\/requireViewById\/#android\.view\.Window#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/place\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelative\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelativeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/place\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelative\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelativeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Unable to find what is referred to by "@param bounds" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param bounds" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param bounds" in DClass ComplicationSlot\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of ComplicationSlot in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 237\.
-WARN: Unable to find what is referred to by "@param boundsType" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param boundsType" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param canvasComplicationFactory" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param canvasComplicationFactory" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param complicationTapFilter" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param complicationTapFilter" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param copySelectedOptions" in DClass UserStyle\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of UserStyle in file .*\/androidx\/wear\/watchface\/style\/CurrentUserStyleRepository\.kt at line 56\.
-WARN: Unable to find what is referred to by "@param defaultDataSourcePolicy" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param defaultDataSourcePolicy" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param defaultPolicy" in DClass ComplicationSlot\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of ComplicationSlot in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 237\.
-WARN: Unable to find what is referred to by "@param id" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param id" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param supportedTypes" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param supportedTypes" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Use @androidx\.annotation\.Nullable, not @org\.checkerframework\.checker\.nullness\.qual\/Nullable\/\/\/PointingToDeclaration\/
+WARN: .*\/unzippedJvmSources\/android\/support\/v4\/media\/session\/MediaControllerCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction MediaControllerCompat
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `dialog` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `window` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/graphics\/drawable\/StateListDrawableCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction inflate
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/app\/ShortcutAdapter\.java:UnknownLine Missing @param tag for parameter `context` in DFunction createShortcutBuilderFromDocument
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/localstorage\/LocalStorage\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/platformstorage\/PlatformStorage\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/playservicesstorage\/PlayServicesStorage\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/camera\/core\/impl\/ReadableConfig\.java:UnknownLine Missing @param tag for parameter `priority` in DFunction retrieveOptionWithPriority
+WARN: .*\/unzippedJvmSources\/androidx\/camera\/view\/RotationProvider\.java:[0-9]+ Missing @param tag for parameter `listener` in DFunction addListener
+WARN: .*\/unzippedJvmSources\/androidx\/camera\/view\/transform\/CoordinateTransform\.java:[0-9]+ Missing @param tag for parameter `target` in DFunction CoordinateTransform
+WARN: .*\/unzippedJvmSources\/androidx\/car\/app\/CarToast\.java:[0-9]+ Missing @param tag for parameter `carContext` in DFunction makeText
+WARN: .*\/unzippedJvmSources\/androidx\/car\/app\/model\/AlertCallbackDelegate\.java:UnknownLine Missing @param tag for parameter `reason` in DFunction sendCancel
+WARN: .*\/unzippedJvmSources\/androidx\/car\/app\/versioning\/CarAppApiLevels\.java\:[0-9]+ Failed to resolve See  \<a href="https:\/\/developer\.android\.com\/jetpack\/androidx\/releases\/car-app">Car App Library Release Notes<\/a> in DClass CarAppApiLevels
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/ArrayLinkedVariables\.java:[0-9]+ Missing @param tag for parameter `removeFromDefinition` in DFunction add
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/ArrayLinkedVariables\.java:[0-9]+ Missing @param tag for parameter `removeFromDefinition` in DFunction use
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/ArrayLinkedVariables\.java:[0-9]+ Missing @param tag for parameter `removeFromDefinition` in DFunction remove
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/LinearSystem\.java:[0-9]+ Missing @param tag for parameter `target` in DFunction addCenterPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/LinearSystem\.java:[0-9]+ Missing @param tag for parameter `widget` in DFunction addCenterPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/Motion\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction getKeyFrameInfo
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/Motion\.java:[0-9]+ Missing @param tag for parameter `pointCount` in DFunction buildPath
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/utils\/KeyCycleOscillator\.java:[0-9]+ Missing @param tag for parameter `phase` in DFunction setPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/utils\/KeyCycleOscillator\.java:[0-9]+ Missing @param tag for parameter `shape` in DFunction setPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/utils\/KeyCycleOscillator\.java:[0-9]+ Missing @param tag for parameter `waveString` in DFunction setPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/state\/CoreMotionScene\.java:UnknownLine Missing @param tag for parameter `toJSON` in DFunction setTransitionContent
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/state\/Transition\.java:[0-9]+ Missing @param tag for parameter `currentProgress` in DFunction dragToProgress
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/state\/TransitionParser\.java:[0-9]+ Missing @param tag for parameter `dpToPixel` in DFunction parse
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/widgets\/Chain\.java:[0-9]+ Missing @param tag for parameter `widgets` in DFunction applyChainConstraints
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/widgets\/ConstraintWidgetContainer\.java:[0-9]+ Missing @param tag for parameter `flags` in DFunction updateChildrenFromSolver
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/motion\/widget\/DesignTool\.java:[0-9]+ Missing @param tag for parameter `len` in DFunction getAnimationPath
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/motion\/widget\/DesignTool\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction getKeyFrameInfo
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/motion\/widget\/MotionController\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction getKeyFrameInfo
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/widget\/ConstraintSet\.java:[0-9]+ Missing @param tag for parameter `viewId` in DFunction setApplyElevation
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/widget\/ConstraintSet\.java:[0-9]+ Missing @param tag for parameter `margin` in DFunction createBarrier
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction setEnterSharedElementCallback
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction setExitSharedElementCallback
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction requestDragAndDropPermissions
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction setLocusContext
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:UnknownLine Missing @param tag for parameter `activity` in DFunction requireViewById
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ServiceCompat\.java:[0-9]+ Missing @param tag for parameter `service` in DFunction stopForeground
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContentResolverCompat\.java:[0-9]+ Missing @param tag for parameter `resolver` in DFunction query
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/Context\.kt:[0-9]+ Missing @param tag for parameter `block` in DFunction withStyledAttributes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/Context\.kt:[0-9]+ Missing @param tag for parameter `resourceId` in DFunction withStyledAttributes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction getDrawable
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction getColor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction getColorStateList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction checkSelfPermission
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/pm\/ShortcutManagerCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction requestPinShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/pm\/ShortcutManagerCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction createShortcutResultIntent
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/pm\/ShortcutManagerCompat\.java:UnknownLine Missing @param tag for parameter `context` in DFunction getShortcuts
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getDrawable
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getDrawableForDensity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getColor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getColorStateList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getFloat
+WARN: .*\/unzippedJvmSources\/androidx\/core\/database\/sqlite\/SQLiteDatabase\.kt:UnknownLine Missing @param tag for parameter `body` in DFunction transaction
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/BitmapCompat\.java:[0-9]+ Missing @param tag for parameter `bitmap` in DFunction setHasMipMap
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `bottom` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `left` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `right` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `top` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `drawable` in DFunction inflate
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `drawable` in DFunction setLayoutDirection
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/PathUtils\.java:UnknownLine Missing @param tag for parameter `path` in DFunction flatten
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/TypefaceCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/Handler\.kt:[0-9]+ Missing @param tag for parameter `action` in DFunction postAtTime
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/Handler\.kt:[0-9]+ Missing @param tag for parameter `uptimeMillis` in DFunction postAtTime
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/HandlerCompat\.java:[0-9]+ Missing @param tag for parameter `handler` in DFunction postDelayed
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/HandlerCompat\.java:[0-9]+ Missing @param tag for parameter `callback` in DFunction createAsync
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/MessageCompat\.java:[0-9]+ Missing @param tag for parameter `message` in DFunction setAsynchronous
+WARN: .*\/unzippedJvmSources\/androidx\/core\/provider\/DocumentsContractCompat\.java:[0-9]+ Missing @param tag for parameter `content` in DFunction createDocument
+WARN: .*\/unzippedJvmSources\/androidx\/core\/provider\/DocumentsContractCompat\.java:[0-9]+ Missing @param tag for parameter `content` in DFunction removeDocument
+WARN: .*\/unzippedJvmSources\/androidx\/core\/text\/util\/LinkifyCompat\.java:[0-9]+ Missing @param tag for parameter `transformFilter` in DFunction addLinks
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction getRecord
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction appendRecord
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction setContentChangeTypes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction setMovementGranularity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction setAction
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityManagerCompat\.java:[0-9]+ Missing @param tag for parameter `manager` in DFunction addTouchExplorationStateChangeListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityManagerCompat\.java:[0-9]+ Missing @param tag for parameter `manager` in DFunction removeTouchExplorationStateChangeListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ContentInfoCompat\.java:UnknownLine Missing @param tag for parameter `payload` in DFunction partition
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/DragStartHelper\.java:[0-9]+ Missing @param tag for parameter `listener` in DFunction DragStartHelper
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction setInitialSurroundingText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction setInitialSurroundingSubText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction getInitialTextBeforeCursor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction getInitialSelectedText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction getInitialTextAfterCursor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MarginLayoutParamsCompat\.java:[0-9]+ Missing @param tag for parameter `lp` in DFunction setLayoutDirection
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setOnActionExpandListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setNumericShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setAlphabeticShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setIconTintList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setIconTintMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MotionEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction isFromSource
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MotionEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction getAxisValue
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/NestedScrollingChildHelper\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction startNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ScaleGestureDetectorCompat\.java:[0-9]+ Missing @param tag for parameter `scaleGestureDetector` in DFunction setQuickScaleEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction performAccessibilityAction
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setStateDescription
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `childMeasuredState` in DFunction resolveSizeAndState
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setTranslationX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setTranslationY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setAlpha
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setRotation
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setRotationX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setRotationY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setScaleX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setScaleY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setPivotX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setPivotY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `viewGroup` in DFunction setChildrenDrawingOrderEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchApplyWindowInsets
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setSystemGestureExclusionRects
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction computeSystemWindowInsets
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setWindowInsetsAnimationCallback
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction setSaveFromParentEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setActivated
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setNestedScrollingEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction startNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction stopNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction hasNestedScrollingParent
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedPreScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedPreFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setZ
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction offsetTopAndBottom
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction offsetLeftAndRight
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `mask` in DFunction setScrollIndicators
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setScrollIndicators
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setPointerIcon
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setTooltipText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setNextClusterForwardId
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setKeyboardNavigationCluster
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setFocusedByDefault
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction keyboardNavigationClusterSearch
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction addKeyboardNavigationClusters
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction addOnUnhandledKeyEventListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction removeOnUnhandledKeyEventListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction saveAttributeDataForStyleable
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction setAccessibilityDelegate
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction setAutofillHints
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:UnknownLine Missing @param tag for parameter `view` in DFunction requireViewById
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewGroupCompat\.java:[0-9]+ Missing @param tag for parameter `group` in DFunction setLayoutMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewGroupCompat\.java:[0-9]+ Missing @param tag for parameter `group` in DFunction setTransitionGroup
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedScrollAccepted
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onStopNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedPreScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedPreFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction notifySubtreeAccessibilityStateChanged
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onStartNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/WindowCompat\.java:UnknownLine Missing @param tag for parameter `window` in DFunction requireViewById
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CheckedTextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setCheckMarkTintList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CheckedTextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setCheckMarkTintMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CompoundButtonCompat\.java:[0-9]+ Missing @param tag for parameter `button` in DFunction setButtonTintList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CompoundButtonCompat\.java:[0-9]+ Missing @param tag for parameter `button` in DFunction setButtonTintMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/EdgeEffectCompat\.java:[0-9]+ Missing @param tag for parameter `edgeEffect` in DFunction onPullDistance
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/ListViewCompat\.java:[0-9]+ Missing @param tag for parameter `listView` in DFunction canScrollList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/PopupWindowCompat\.java:[0-9]+ Missing @param tag for parameter `popupWindow` in DFunction setWindowLayoutType
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/PopupWindowCompat\.java:[0-9]+ Missing @param tag for parameter `popupWindow` in DFunction setOverlapAnchor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `horizontalGravity` in DFunction setRelativeLayoutHorizontalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `verticalGravity` in DFunction setRelativeLayoutVerticalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `night` in DFunction setSwitchThumbIcon
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `night` in DFunction setSwitchTrackIcon
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `horizontalGravity` in DFunction setLinearLayoutHorizontalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `verticalGravity` in DFunction setLinearLayoutVerticalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `bottom` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `end` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `start` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `top` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `bottom` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `end` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `start` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `top` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setAutoSizeTextTypeWithDefaults
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setAutoSizeTextTypeUniformWithConfiguration
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setAutoSizeTextTypeUniformWithPresetSizes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setFirstBaselineToTopHeight
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setLastBaselineToBottomHeight
+WARN: .*\/unzippedJvmSources\/androidx\/cursoradapter\/widget\/ResourceCursorAdapter\.java:UnknownLine Missing @param tag for parameter `c` in DFunction ResourceCursorAdapter
+WARN: .*\/unzippedJvmSources\/androidx\/customview\/poolingcontainer\/PoolingContainer\.kt:[0-9]+ Missing @param tag for parameter `listener` in DFunction addPoolingContainerListener
+WARN: .*\/unzippedJvmSources\/androidx\/customview\/widget\/ViewDragHelper\.java:[0-9]+ Missing @param tag for parameter `pointerId` in DFunction isEdgeTouched
+WARN: .*\/unzippedJvmSources\/androidx\/datastore\/rxjava2\/RxDataStoreDelegate\.kt:UnknownLine Missing @param tag for parameter `serializer` in DFunction rxDataStore
+WARN: .*\/unzippedJvmSources\/androidx\/datastore\/rxjava3\/RxDataStoreDelegate\.kt:UnknownLine Missing @param tag for parameter `serializer` in DFunction rxDataStore
+WARN: .*\/unzippedJvmSources\/androidx\/documentfile\/provider\/DocumentFile\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction fromSingleUri
+WARN: .*\/unzippedJvmSources\/androidx\/documentfile\/provider\/DocumentFile\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction fromTreeUri
+WARN: .*\/unzippedJvmSources\/androidx\/draganddrop\/DropHelper\.java:[0-9]+ Failed to resolve See <a href="https:\/\/developer\.android\.com\/guide\/topics\/ui\/drag-drop">Drag and drop<\/a> in DClass DropHelper
+WARN: .*\/unzippedJvmSources\/androidx\/emoji\/text\/EmojiCompat\.java:[0-9]+ Missing @param tag for parameter `useEmojiAsDefaultStyle` in DFunction setUseEmojiAsDefaultStyle
+WARN: .*\/unzippedJvmSources\/androidx\/emoji2\/text\/EmojiCompat\.java:[0-9]+ Missing @param tag for parameter `useEmojiAsDefaultStyle` in DFunction setUseEmojiAsDefaultStyle
+WARN: .*\/unzippedJvmSources\/androidx\/fragment\/app\/Fragment\.java:[0-9]+ Missing @param tag for parameter `inflater` in DFunction onCreateOptionsMenu
+WARN: .*\/unzippedJvmSources\/androidx\/graphics\/opengl\/egl\/EGLSpec\.kt:[0-9]+ Missing @param tag for parameter `context` in DFunction eglMakeCurrent
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/app\/SearchFragment\.java:[0-9]+ Missing @param tag for parameter `query` in DFunction createArgs
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/app\/SearchSupportFragment\.java:[0-9]+ Missing @param tag for parameter `query` in DFunction createArgs
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/DetailsOverviewRowPresenter\.java:[0-9]+ Missing @param tag for parameter `detailsPresenter` in DFunction ViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/FullWidthDetailsOverviewRowPresenter\.java:[0-9]+ Missing @param tag for parameter `detailsPresenter` in DFunction ViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/FullWidthDetailsOverviewRowPresenter\.java:[0-9]+ Missing @param tag for parameter `logoPresenter` in DFunction ViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/GridLayoutManager\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction requestChildRectangleOnScreen
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/Parallax\.java:UnknownLine Missing @param tag for parameter `name` in DFunction createProperty
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/PlaybackControlsRow\.java:UnknownLine Missing @param tag for parameter `id` in DFunction ThumbsAction
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/PlaybackControlsRow\.java:UnknownLine Missing @param tag for parameter `outlineIconIndex` in DFunction ThumbsAction
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/PlaybackControlsRow\.java:UnknownLine Missing @param tag for parameter `solidIconIndex` in DFunction ThumbsAction
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/RecyclerViewParallax\.java:[0-9]+ Missing @param tag for parameter `name` in DFunction createProperty
+WARN: .*\/unzippedJvmSources\/androidx\/lifecycle\/testing\/TestLifecycleOwner\.kt:[0-9]+ Missing @param tag for parameter `coroutineDispatcher` in DFunction TestLifecycleOwner
+WARN: .*\/unzippedJvmSources\/androidx\/lifecycle\/viewmodel\/compose\/ViewModel\.kt:UnknownLine Missing @param tag for parameter `factory` in DFunction viewModel
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction abandonAudioFocusRequest
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction getStreamMaxVolume
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction getStreamMinVolume
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction requestAudioFocus
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/common\/SessionPlayer\.java:UnknownLine Missing @param tag for parameter `metadata` in DFunction setPlaylist
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/player\/MediaPlayer\.java:UnknownLine Missing @param tag for parameter `metadata` in DFunction setPlaylist
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/session\/MediaController\.java:UnknownLine Missing @param tag for parameter `extras` in DFunction setMediaUri
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/session\/MediaSession\.java:UnknownLine Missing @param tag for parameter `controller` in DFunction sendCustomCommand
+WARN: .*\/unzippedJvmSources\/androidx\/mediarouter\/media\/RemotePlaybackClient\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction RemotePlaybackClient
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/dynamicfeatures\/DynamicActivityNavigatorDestinationBuilder\.kt:[0-9]+ Missing @param tag for parameter `builder` in DFunction activity
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/dynamicfeatures\/fragment\/DynamicFragmentNavigatorDestinationBuilder\.kt:[0-9]+ Missing @param tag for parameter `builder` in DFunction fragment
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavController\.kt:[0-9]+ Missing @param tag for parameter `startDestinationArgs` in DFunction setGraph
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavDestinationBuilder\.kt:[0-9]+ Failed to resolve See NavAction\.getDefaultArguments in DProperty defaultArguments\. Did you mean NavAction#getDefaultArguments\?
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavDestinationBuilder\.kt:UnknownLine Failed to resolve See NavAction\.getDefaultArguments in DFunction getDefaultArguments\. Did you mean NavAction#getDefaultArguments\?
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavType\.kt:[0-9]+ Missing @param tag for parameter `isNullableAllowed` in DFunction NavType
+WARN: .*\/unzippedJvmSources\/androidx\/paging\/compose\/LazyPagingItems\.kt:[0-9]+ Failed to resolve See PagingSource\.invalidate in DFunction refresh\. Did you mean PagingSource#invalidate\?
+WARN: .*\/unzippedJvmSources\/androidx\/paging\/LoadStateAdapter\.kt:[0-9]+ Missing @param tag for parameter `holder` in DFunction onBindViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/palette\/graphics\/Palette\.java:[0-9]+ Missing @param tag for parameter `target` in DFunction getColorForTarget
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/BatchingListUpdateCallback\.java:[0-9]+ Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `fromX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `fromY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `toX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `toY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/ListUpdateCallback\.java:UnknownLine Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction requestChildRectangleOnScreen
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:[0-9]+ Missing @param tag for parameter `rv` in DFunction onInterceptTouchEvent
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:[0-9]+ Missing @param tag for parameter `rv` in DFunction onTouchEvent
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:UnknownLine Missing @param tag for parameter `childCount` in DFunction onGetChildDrawingOrder
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `fromX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `fromY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `toX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `toY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SortedList\.java:[0-9]+ Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SortedListAdapterCallback\.java:[0-9]+ Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/security\/crypto\/EncryptedSharedPreferences\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/security\/crypto\/EncryptedSharedPreferences\.kt:[0-9]+ Missing @param tag for parameter `context` in DFunction EncryptedSharedPreferences
+WARN: .*\/unzippedJvmSources\/androidx\/security\/crypto\/MasterKey\.java:[0-9]+ Missing @param tag for parameter `keyAlias` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/GridRowBuilder\.java:[0-9]+ Missing @param tag for parameter `text` in DFunction addText
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/GridRowBuilder\.java:[0-9]+ Missing @param tag for parameter `text` in DFunction addTitleText
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/GridRowBuilder\.java:[0-9]+ Missing @param tag for parameter `text` in DFunction addOverlayText
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `action` in DFunction addEndItem
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction ListBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `summary` in DFunction setSummary
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `action` in DFunction setTitleItem
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `title` in DFunction setTitle
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `subtitle` in DFunction setSubtitle
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/SliceUtils\.java:UnknownLine Missing @param tag for parameter `context` in DFunction parseSlice
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/SliceViewManager\.java:UnknownLine Missing @param tag for parameter `executor` in DFunction registerSliceCallback
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/widget\/GridRowView\.java:[0-9]+ Missing @param tag for parameter `color` in DFunction addImageItem
+WARN: .*\/unzippedJvmSources\/androidx\/sqlite\/db\/SupportSQLiteDatabaseExt\.kt:UnknownLine Missing @param tag for parameter `body` in DFunction transaction
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `activityClass` in DFunction launch
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `activityClass` in DFunction launchActivityForResult
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `startActivityIntent` in DFunction launch
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `startActivityIntent` in DFunction launchActivityForResult
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/contrib\/DrawerActions\.java:[0-9]+ Failed to resolve See <a href="http:\/\/developer\.android\.com\/design\/patterns\/navigation-drawer\.html">Navigation in DClass DrawerActions
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/contrib\/PickerActions\.java:[0-9]+ Failed to resolve See <a href="http:\/\/developer\.android\.com\/guide\/topics\/ui\/controls\/pickers\.html">Pickers API in DClass PickerActions
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/DataInteraction\.java:[0-9]+ Missing @param tag for parameter `atPosition` in DFunction displayDataMatcher
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/DataInteraction\.java:[0-9]+ Missing @param tag for parameter `rootMatcher` in DFunction displayDataMatcher
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/intent\/Intents\.java:[0-9]+ Link does not resolve for @throws AssertionFailedError in DFunction intended\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/intent\/Intents\.java:[0-9]+ Missing @param tag for parameter `verificationMode` in DFunction intended
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/EspressoRemote\.java:UnknownLine Missing @param tag for parameter `viewAssertion` in DFunction createRemoteCheckCallable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/NoopRemoteInteraction\.java:UnknownLine Missing @param tag for parameter `viewAssertion` in DFunction createRemoteCheckCallable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/RemoteInteraction\.java:UnknownLine Missing @param tag for parameter `viewAssert` in DFunction createRemoteCheckCallable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/TypeProtoConverters\.java:[0-9]+ Missing @param tag for parameter `parcelableClass` in DFunction byteStringToParcelable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/ext\/junit\/rules\/ActivityScenarioRule\.java:[0-9]+ Missing @param tag for parameter `activityClass` in DFunction ActivityScenarioRule
+WARN: .*\/unzippedJvmSources\/androidx\/test\/ext\/junit\/rules\/ActivityScenarioRule\.java:[0-9]+ Missing @param tag for parameter `startActivityIntent` in DFunction ActivityScenarioRule
+WARN: .*\/unzippedJvmSources\/androidx\/textclassifier\/TextClassification\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction setEntityType
+WARN: .*\/unzippedJvmSources\/androidx\/textclassifier\/TextSelection\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction setEntityType
+WARN: .*\/unzippedJvmSources\/androidx\/tracing\/Trace\.kt:UnknownLine Missing @param tag for parameter `block` in DFunction traceAsync
+WARN: .*\/unzippedJvmSources\/androidx\/transition\/TransitionInflater\.java:[0-9]+ Missing @param tag for parameter `sceneRoot` in DFunction inflateTransitionManager
+WARN: .*\/unzippedJvmSources\/androidx\/tvprovider\/media\/tv\/PreviewChannelHelper\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction PreviewChannelHelper
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/foundation\/CurvedColumn\.kt:[0-9]+ Missing @param tag for parameter `contentBuilder` in DFunction curvedColumn
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/foundation\/CurvedRow\.kt:[0-9]+ Missing @param tag for parameter `contentBuilder` in DFunction curvedRow
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction AppCard
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction TitleCard
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Card
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Chip\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Chip
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/ListHeader\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ListHeader
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Scaffold\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Scaffold
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/ScalingLazyColumn\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ScalingLazyColumn
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction FilledTonalButton
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedButton
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ChildButton
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Button
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `enabled` in DFunction outlinedButtonBorder
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt:[0-9]+ Link does not resolve for @throws ServiceStartFailureException in DFunction getOrCreateInteractiveWatchFaceClient\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Missing @param tag for parameter `boundingArc` in DFunction drawHighlight
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param bounds in DClass ComplicationSlot\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param defaultPolicy in DClass ComplicationSlot\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Missing @param tag for parameter `boundingArc` in DFunction createEdgeComplicationSlotBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Missing @param tag for parameter `complicationTapFilter` in DFunction createEdgeComplicationSlotBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param bounds in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param boundsType in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param canvasComplicationFactory in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param complicationTapFilter in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param defaultDataSourcePolicy in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param id in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param supportedTypes in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/Renderer\.kt:[0-9]+ Link does not resolve for @throws Renderer\.GlesException in DClass GlesRenderer2\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/style\/CurrentUserStyleRepository\.kt:[0-9]+ Unable to find reference @param copySelectedOptions in DClass UserStyle\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/CookieManagerCompat\.java:UnknownLine Missing @param tag for parameter `cookieManager` in DFunction getCookieInfo
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setSafeBrowsingEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setDisabledActionModeMenuItems
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setForceDark
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setAlgorithmicDarkeningAllowed
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setForceDarkStrategy
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setEnterpriseAuthenticationAppLinkPolicyEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebViewCompat\.java:[0-9]+ Missing @param tag for parameter `webview` in DFunction postVisualStateCallback
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebViewCompat\.java:[0-9]+ Missing @param tag for parameter `webview` in DFunction postWebMessage
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebViewCompat\.java:[0-9]+ Missing @param tag for parameter `webview` in DFunction removeWebMessageListener
+WARN: .*\/unzippedJvmSources\/androidx\/work\/testing\/TestListenableWorkerBuilder\.kt:UnknownLine Missing @param tag for parameter `tags` in DFunction TestListenableWorkerBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/work\/testing\/TestWorkerBuilder\.kt:UnknownLine Missing @param tag for parameter `tags` in DFunction TestWorkerBuilder
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `placeholdersEnabled` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedInitialKey` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction LoadParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `nextPageKey` in DFunction onResult
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `previousPageKey` in DFunction onResult
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `placeholdersEnabled` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction LoadParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadParams
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/animation\/graphics\/res\/AnimatedVectorPainterResources\.android\.kt:[0-9]+ Missing @param tag for parameter `animatedImageVector` in DFunction rememberAnimatedVectorPainter
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/material\/AndroidMenu\.android\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction DropdownMenuItem
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/ui\/graphics\/AndroidPath\.android\.kt:[0-9]+ Missing @param tag for parameter `operation` in DFunction op
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/ui\/text\/font\/AndroidFont\.kt:[0-9]+ Missing @param tag for parameter `variationSettings` in DFunction AndroidFont
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/constraintlayout\/compose\/MotionCarousel\.kt:[0-9]+ Missing @param tag for parameter `motionScene` in DFunction MotionCarousel
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/datastore\/DataStoreDelegate\.kt:UnknownLine Missing @param tag for parameter `serializer` in DFunction dataStore
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/datastore\/migrations\/SharedPreferencesMigration\.kt:[0-9]+ Missing @param tag for parameter `shouldRunMigration` in DFunction SharedPreferencesMigration
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/collection\/LruCache\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction entryRemoved
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/collection\/LruCache\.kt:[0-9]+ Missing @param tag for parameter `oldValue` in DFunction entryRemoved
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/AnimatedVisibility\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction AnimatedVisibility
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/Animatable\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction Animatable
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/AnimateAsState\.kt:UnknownLine Missing @param tag for parameter `typeConverter` in DFunction animateValueAsState
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `initialValue` in DFunction animate
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `targetValue` in DFunction animate
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `initialValue` in DFunction animateDecay
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `initialVelocity` in DFunction animateDecay
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/Crossfade\.kt:UnknownLine Missing @param tag for parameter `content` in DFunction Crossfade
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/Crossfade\.kt:UnknownLine Missing @param tag for parameter `contentKey` in DFunction Crossfade
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/layout\/AspectRatio\.kt:[0-9]+ Missing @param tag for parameter `matchHeightConstraintsFirst` in DFunction aspectRatio
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/layout\/Column\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Column
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/layout\/Row\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Row
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/lazy\/layout\/IntervalList\.kt:[0-9]+ Missing @param tag for parameter `block` in DFunction forEach
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction TextButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Button
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Card
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Chip\.kt:[0-9]+ Missing @param tag for parameter `leadingIconContentColor` in DFunction outlinedChipColors
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Chip\.kt:[0-9]+ Missing @param tag for parameter `shape` in DFunction Chip
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Divider\.kt:[0-9]+ Missing @param tag for parameter `modifier` in DFunction Divider
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Surface\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Surface
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/TextFieldDefaults\.kt:[0-9]+ Missing @param tag for parameter `shape` in DFunction BorderBox
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Button
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ElevatedButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction FilledTonalButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction TextButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ElevatedCard
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedCard
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `disabledElevation` in DFunction cardElevation
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `disabledElevation` in DFunction elevatedCardElevation
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `disabledElevation` in DFunction outlinedCardElevation
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Card
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/NavigationDrawer\.kt:[0-9]+ Missing @param tag for parameter `shape` in DFunction NavigationDrawerItem
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Slider\.kt:[0-9]+ Missing @param tag for parameter `thumbSize` in DFunction Thumb
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Surface\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Surface
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/Composer\.kt:[0-9]+ Missing @param tag for parameter `info` in DFunction traceEventStart
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/Composer\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction traceEventStart
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/Composer\.kt:[0-9]+ Missing @param tag for parameter `dataKey` in DFunction startMovableGroup
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/saveable\/SaveableStateHolder\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction SaveableStateProvider
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/SnapshotFlow\.kt:UnknownLine Missing @param tag for parameter `initial` in DFunction collectAsState
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/snapshots\/Snapshot\.kt:[0-9]+ Missing @param tag for parameter `block` in DFunction observe
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/draw\/PainterModifier\.kt:[0-9]+ Missing @param tag for parameter `painter` in DFunction paint
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/draw\/Shadow\.kt:[0-9]+ Missing @param tag for parameter `ambientColor` in DFunction shadow
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/draw\/Shadow\.kt:[0-9]+ Missing @param tag for parameter `spotColor` in DFunction shadow
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Canvas\.kt:[0-9]+ Missing @param tag for parameter `radians` in DFunction rotateRad
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Color\.kt:[0-9]+ Missing @param tag for parameter `alpha` in DFunction hsv
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Color\.kt:[0-9]+ Missing @param tag for parameter `alpha` in DFunction hsl
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/ColorMatrix\.kt:[0-9]+ Missing @param tag for parameter `v` in DFunction set
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Path\.kt:[0-9]+ Missing @param tag for parameter `operation` in DFunction op
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/RenderEffect\.kt:[0-9]+ Missing @param tag for parameter `renderEffect` in DFunction BlurEffect
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/vector\/ImageVector\.kt:[0-9]+ Missing @param tag for parameter `trimPathEnd` in DFunction addPath
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/vector\/ImageVector\.kt:[0-9]+ Missing @param tag for parameter `pathFillType` in DFunction path
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/vector\/VectorPainter\.kt:[0-9]+ Missing @param tag for parameter `autoMirror` in DFunction rememberVectorPainter
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/layout\/Placeable\.kt:[0-9]+ Missing @param tag for parameter `position` in DFunction placeAt
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/platform\/TextToolbar\.kt:[0-9]+ Missing @param tag for parameter `onSelectAllRequested` in DFunction showMenu
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction onAllNodesWithContentDescription
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `testTag` in DFunction onNodeWithTag
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `testTag` in DFunction onAllNodesWithTag
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction onNodeWithContentDescription
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction onNodeWithText
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction onAllNodesWithText
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/MainTestClock\.kt:[0-9]+ Missing @param tag for parameter `condition` in DFunction advanceTimeUntil
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/text\/AnnotatedString\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction append
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/text\/AnnotatedString\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction AnnotatedString
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/datastore\/preferences\/core\/Preferences\.kt:[0-9]+ Missing @param tag for parameter `value` in DFunction set
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/paging\/compose\/LazyPagingItems\.kt:[0-9]+ Failed to resolve See PagingSource\.invalidate in DFunction refresh\. Did you mean PagingSource#invalidate\?
+WARN: .*\/unzippedMultiplatformSources\/desktopMain\/androidx\/compose\/material\/DesktopMenu\.desktop\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction DropdownMenuItem
+WARN: .*\/unzippedMultiplatformSources\/jvmMain\/androidx\/datastore\/core\/Serializer\.kt:[0-9]+ Missing @param tag for parameter `output` in DFunction writeTo
+WARN: .*\/unzippedMultiplatformSources\/nonJvmMain\/androidx\/annotation\/RestrictTo\.nonJvm\.kt:UnknownLine Link does not resolve for @throws kotlin\.IllegalArgumentException in DFunction valueOf\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: File location could not be determined\. Failed to resolve See <a href="https:\/\/developer\.android\.com\/training\/transitions">Transition API Guide<\/a> in DPackage androidx\.transition
 # > Task :compose:ui:ui-tooling:processDebugAndroidTestManifest
 \$SUPPORT/compose/ui/ui\-tooling/src/androidInstrumentedTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
 # ./gradlew tasks warns as we have warnings present
diff --git a/development/collection-consumer/.gitignore b/development/collection-consumer/.gitignore
deleted file mode 100644
index e0d53d8..0000000
--- a/development/collection-consumer/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.gradle
-.idea
-build
diff --git a/development/collection-consumer/README.md b/development/collection-consumer/README.md
deleted file mode 100644
index 75586e0..0000000
--- a/development/collection-consumer/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-## Testing collection KMP release
-
-This project helps to validate a newly-staged version of the KMP build of androidx.collection.  Here's how!
-
-### Stage the release
-- Create a new global release in production or autopush JetPad (TODO: more info about how)
-- Schedule a library group release attached to the global release for androidx.collect (TODO: ditto)
-- You cannot stage unless the _global_ ADMRS config allowlists the KMP targets.  If necessary, you may need to
-  create, have reviewed, and submit a CL like [this one](https://critique.corp.google.com/cl/474557118).
-  - It can take around 30 minutes between submission and updating the loaded allowlist in ADMRS, so be patient.
-- Then:
-  - Start with [prod](go/jetpad) or [autopush](go/jetpad-autopush)
-  - `Release Dates` > `Browse Release Date`
-  - Click `Release Information` for the global release you created above
-  - `Stage to ADMRS`
-  - `Compose BOM?`  No (not relevant to our test)
-  - Answer "Yes" to "really staging"
-- At this point, you will either see an error in the first ~20 seconds if something is wrong with our stuff, or
-  ADMRS will go quietly do things for a few minutes, resulting in an email to `[email protected]`.
-
-### Test the staged release
-- Check out this repo (if you haven't): `git clone sso://user/saff`
-- The email has [instructions](go/adt-redir) for how to set up a proxy server for the staged maven repo.
-- Once that's done, if necessary, edit the androidx.collection version in build.gradle.kts
-- To test JVM:
-  - `./gradlew installDist`
-  - `./build/install/collection-consumer/bin/collection-consumer`
-- To test native:
-  - `./gradlew nativeBinaries`
-  - `build/bin/native/releaseExecutable/collection-consumer.kexe`
-- You can look back at the stdout for the adt-redir proxy server to assure yourself that the androidx dependencies
-  are being loaded through the proxy.
-- Profit??!
\ No newline at end of file
diff --git a/development/collection-consumer/build.gradle.kts b/development/collection-consumer/build.gradle.kts
deleted file mode 100644
index beef228..0000000
--- a/development/collection-consumer/build.gradle.kts
+++ /dev/null
@@ -1,63 +0,0 @@
-plugins {
-    kotlin("multiplatform") version "1.7.10"
-    application
-}
-
-group = "net.saff"
-version = "1.0-SNAPSHOT"
-
-repositories {
-    maven {
-        url = uri("http://localhost:1480")
-        isAllowInsecureProtocol = true
-    }
-    mavenCentral()
-    google()
-}
-
-kotlin {
-    val hostOs = System.getProperty("os.name")
-    val isMingwX64 = hostOs.startsWith("Windows")
-    val nativeTarget = when {
-        hostOs == "Mac OS X" -> macosX64("native")
-        hostOs == "Linux" -> linuxX64("native")
-        isMingwX64 -> mingwX64("native")
-        else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
-    }
-
-    nativeTarget.apply {
-        binaries {
-            executable {
-                entryPoint = "main"
-            }
-        }
-    }
-    jvm {
-        compilations.all {
-            kotlinOptions.jvmTarget = "1.8"
-        }
-        withJava()
-        testRuns["test"].executionTask.configure {
-            useJUnitPlatform()
-        }
-    }
-    sourceSets {
-        val nativeMain by getting
-        val commonMain by getting {
-            dependencies {
-                implementation("androidx.collection:collection:1.3.0-alpha03")
-            }
-        }
-        val nativeTest by getting
-        val jvmMain by getting
-        val jvmTest by getting {
-            dependencies {
-                implementation(kotlin("test"))
-            }
-        }
-    }
-}
-
-application {
-    mainClass.set("MainKt")
-}
diff --git a/development/collection-consumer/gradle.properties b/development/collection-consumer/gradle.properties
deleted file mode 100644
index 415b6be..0000000
--- a/development/collection-consumer/gradle.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-kotlin.code.style=official
-kotlin.mpp.enableGranularSourceSetsMetadata=true
-kotlin.native.enableDependencyPropagation=false
-kotlin.js.generate.executable.default=false
-kotlin.native.binary.memoryModel=experimental
\ No newline at end of file
diff --git a/development/collection-consumer/gradle/wrapper/gradle-wrapper.jar b/development/collection-consumer/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 41d9927..0000000
--- a/development/collection-consumer/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/development/collection-consumer/gradle/wrapper/gradle-wrapper.properties b/development/collection-consumer/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index aa991fc..0000000
--- a/development/collection-consumer/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/development/collection-consumer/gradlew b/development/collection-consumer/gradlew
deleted file mode 100755
index 1b6c787..0000000
--- a/development/collection-consumer/gradlew
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# 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
-#
-#      https://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.
-#
-
-##############################################################################
-#
-#   Gradle start up script for POSIX generated by Gradle.
-#
-#   Important for running:
-#
-#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-#       noncompliant, but you have some other compliant shell such as ksh or
-#       bash, then to run this script, type that shell name before the whole
-#       command line, like:
-#
-#           ksh Gradle
-#
-#       Busybox and similar reduced shells will NOT work, because this script
-#       requires all of these POSIX shell features:
-#         * functions;
-#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-#         * compound commands having a testable exit status, especially «case»;
-#         * various built-in commands including «command», «set», and «ulimit».
-#
-#   Important for patching:
-#
-#   (2) This script targets any POSIX shell, so it avoids extensions provided
-#       by Bash, Ksh, etc; in particular arrays are avoided.
-#
-#       The "traditional" practice of packing multiple parameters into a
-#       space-separated string is a well documented source of bugs and security
-#       problems, so this is (mostly) avoided, by progressively accumulating
-#       options in "$@", and eventually passing that to Java.
-#
-#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-#       see the in-line comments for details.
-#
-#       There are tweaks for specific operating systems such as AIX, CygWin,
-#       Darwin, MinGW, and NonStop.
-#
-#   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-#       within the Gradle project.
-#
-#       You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
-    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
-    [ -h "$app_path" ]
-do
-    ls=$( ls -ld "$app_path" )
-    link=${ls#*' -> '}
-    case $link in             #(
-      /*)   app_path=$link ;; #(
-      *)    app_path=$APP_HOME$link ;;
-    esac
-done
-
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
-APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
-    echo "$*"
-} >&2
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in                #(
-  CYGWIN* )         cygwin=true  ;; #(
-  Darwin* )         darwin=true  ;; #(
-  MSYS* | MINGW* )  msys=true    ;; #(
-  NONSTOP* )        nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD=$JAVA_HOME/jre/sh/java
-    else
-        JAVACMD=$JAVA_HOME/bin/java
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD=java
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
-    case $MAX_FD in #(
-      max*)
-        MAX_FD=$( ulimit -H -n ) ||
-            warn "Could not query maximum file descriptor limit"
-    esac
-    case $MAX_FD in  #(
-      '' | soft) :;; #(
-      *)
-        ulimit -n "$MAX_FD" ||
-            warn "Could not set maximum file descriptor limit to $MAX_FD"
-    esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-#   * args from the command line
-#   * the main class name
-#   * -classpath
-#   * -D...appname settings
-#   * --module-path (only if needed)
-#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
-    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
-    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
-    JAVACMD=$( cygpath --unix "$JAVACMD" )
-
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    for arg do
-        if
-            case $arg in                                #(
-              -*)   false ;;                            # don't mess with options #(
-              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
-                    [ -e "$t" ] ;;                      #(
-              *)    false ;;
-            esac
-        then
-            arg=$( cygpath --path --ignore --mixed "$arg" )
-        fi
-        # Roll the args list around exactly as many times as the number of
-        # args, so each arg winds up back in the position where it started, but
-        # possibly modified.
-        #
-        # NB: a `for` loop captures its iteration list before it begins, so
-        # changing the positional parameters here affects neither the number of
-        # iterations, nor the values presented in `arg`.
-        shift                   # remove old arg
-        set -- "$@" "$arg"      # push replacement arg
-    done
-fi
-
-# Collect all arguments for the java command;
-#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-#     shell script including quotes and variable substitutions, so put them in
-#     double quotes to make sure that they get re-expanded; and
-#   * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
-        "-Dorg.gradle.appname=$APP_BASE_NAME" \
-        -classpath "$CLASSPATH" \
-        org.gradle.wrapper.GradleWrapperMain \
-        "$@"
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-#   set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
-        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
-        xargs -n1 |
-        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
-        tr '\n' ' '
-    )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/development/collection-consumer/gradlew.bat b/development/collection-consumer/gradlew.bat
deleted file mode 100644
index ac1b06f..0000000
--- a/development/collection-consumer/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem

-@rem Copyright 2015 the original author or authors.

-@rem

-@rem Licensed under the Apache License, Version 2.0 (the "License");

-@rem you may not use this file except in compliance with the License.

-@rem You may obtain a copy of the License at

-@rem

-@rem      https://www.apache.org/licenses/LICENSE-2.0

-@rem

-@rem Unless required by applicable law or agreed to in writing, software

-@rem distributed under the License is distributed on an "AS IS" BASIS,

-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@rem See the License for the specific language governing permissions and

-@rem limitations under the License.

-@rem

-

-@if "%DEBUG%" == "" @echo off

-@rem ##########################################################################

-@rem

-@rem  Gradle startup script for Windows

-@rem

-@rem ##########################################################################

-

-@rem Set local scope for the variables with windows NT shell

-if "%OS%"=="Windows_NT" setlocal

-

-set DIRNAME=%~dp0

-if "%DIRNAME%" == "" set DIRNAME=.

-set APP_BASE_NAME=%~n0

-set APP_HOME=%DIRNAME%

-

-@rem Resolve any "." and ".." in APP_HOME to make it shorter.

-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

-

-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.

-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

-

-@rem Find java.exe

-if defined JAVA_HOME goto findJavaFromJavaHome

-

-set JAVA_EXE=java.exe

-%JAVA_EXE% -version >NUL 2>&1

-if "%ERRORLEVEL%" == "0" goto execute

-

-echo.

-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

-echo.

-echo Please set the JAVA_HOME variable in your environment to match the

-echo location of your Java installation.

-

-goto fail

-

-:findJavaFromJavaHome

-set JAVA_HOME=%JAVA_HOME:"=%

-set JAVA_EXE=%JAVA_HOME%/bin/java.exe

-

-if exist "%JAVA_EXE%" goto execute

-

-echo.

-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%

-echo.

-echo Please set the JAVA_HOME variable in your environment to match the

-echo location of your Java installation.

-

-goto fail

-

-:execute

-@rem Setup the command line

-

-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

-

-

-@rem Execute Gradle

-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

-

-:end

-@rem End local scope for the variables with windows NT shell

-if "%ERRORLEVEL%"=="0" goto mainEnd

-

-:fail

-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of

-rem the _cmd.exe /c_ return code!

-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1

-exit /b 1

-

-:mainEnd

-if "%OS%"=="Windows_NT" endlocal

-

-:omega

diff --git a/development/collection-consumer/settings.gradle.kts b/development/collection-consumer/settings.gradle.kts
deleted file mode 100644
index 8268b87..0000000
--- a/development/collection-consumer/settings.gradle.kts
+++ /dev/null
@@ -1,3 +0,0 @@
-
-rootProject.name = "collection-consumer"
-
diff --git a/development/collection-consumer/src/commonMain/kotlin/list.kt b/development/collection-consumer/src/commonMain/kotlin/list.kt
deleted file mode 100644
index 6be7048..0000000
--- a/development/collection-consumer/src/commonMain/kotlin/list.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-import androidx.collection.LongSparseArray
-import androidx.collection.LruCache
-
-fun runCache(): String {
-    val cache = object : LruCache<Int, String>(2) {
-        override fun create(key: Int): String? {
-            return "x".repeat(key)
-        }
-    }
-    cache[1]
-    cache[2]
-    cache[3]
-    return cache.snapshot().toString()
-}
-
-fun runSparseArray(): String {
-    val array = LongSparseArray<String>()
-    array.put(0L, "zero")
-    array.put(1L, "one")
-    return array.toString()
-}
\ No newline at end of file
diff --git a/development/collection-consumer/src/jvmMain/kotlin/Main.kt b/development/collection-consumer/src/jvmMain/kotlin/Main.kt
deleted file mode 100644
index 64fe0c0..0000000
--- a/development/collection-consumer/src/jvmMain/kotlin/Main.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-fun main() {
-    println("Hello, Kotlin/JVM!")
-    println("LongSparseArray:")
-    println(runSparseArray())
-    println("LruCache:")
-    println(runCache())
-}
\ No newline at end of file
diff --git a/development/collection-consumer/src/nativeMain/kotlin/Main.kt b/development/collection-consumer/src/nativeMain/kotlin/Main.kt
deleted file mode 100644
index b5e96e8..0000000
--- a/development/collection-consumer/src/nativeMain/kotlin/Main.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-fun main() {
-    println("Hello, Kotlin/Native!")
-    println("LongSparseArray:")
-    println(runSparseArray())
-    println("LruCache:")
-    println(runCache())
-}
\ No newline at end of file
diff --git a/development/file-utils/diff-filterer.py b/development/file-utils/diff-filterer.py
index dd986c0..135e869 100755
--- a/development/file-utils/diff-filterer.py
+++ b/development/file-utils/diff-filterer.py
@@ -126,6 +126,17 @@
           return result
     return result
 
+  # returns the time at which <path> was last modified, without following symlinks
+  def getModificationTime(self, path):
+    if os.path.exists(path):
+      if os.path.islink(path):
+        # for a symlink, the last time the link itself was modified is the ctime (mtime for a broken link is undefined)
+        return os.path.getctime(path)
+      else:
+        # for a file, the last time its content was modified is the mtime
+        return os.path.getmtime(path)
+    return None
+
 fileIo = FileIo()
 
 # Returns cpu usage
@@ -138,44 +149,6 @@
 
 cpuStats = CpuStats()
 
-# Fast file copying
-class FileCopyCache(object):
-  def __init__(self):
-    self.modificationTimes = {}
-
-  # Puts a copy of <sourcePath> at <destPath>
-  # If we already have an unmodified copy, we just hardlink our existing unmodified copy
-  # If we don't have an unmodified copy, we first make a copy
-  def copyFile(self, sourcePath, destPath, cachePath):
-    if cachePath is None:
-      fileIo.copyFile(sourcePath, destPath)
-    else:
-      shareable = self.getShareableFile(sourcePath, cachePath)
-      fileIo.hardLink(shareable, destPath)
-
-  # gets a shareable copy of <sourcePath> in <cachePath> and returns its path
-  def getShareableFile(self, sourcePath, cachePath):
-    # note that absolute sourcePath is supported
-    path = os.path.abspath(cachePath + "/" + sourcePath)
-    if path in self.modificationTimes:
-      # we've already shared this file before; let's check whether it has been modified since then
-      if self.modificationTimes[path] == self.getModificationTime(path):
-        # this file hasn't been modified since we last shared it; we can just reuse it
-        return path
-    # we don't have an existing file that we can reuse, so we have to make one
-    fileIo.copyFile(sourcePath, path)
-    self.modificationTimes[path] = self.getModificationTime(path)
-    return path
-
-  # returns the time at which <path> was last modified
-  def getModificationTime(self, path):
-    if os.path.exists(path):
-      return os.path.getmtime(path)
-    return None
-
-
-fileCopyCache = FileCopyCache()
-
 # Runs a shell command
 class ShellScript(object):
   def __init__(self, commandText, cwd):
@@ -193,7 +166,7 @@
 
 # Base class that can hold the state of a file
 class FileContent(object):
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     pass
 
   def equals(self, other, checkWithFileSystem=False):
@@ -206,8 +179,8 @@
     self.referencePath = referencePath
     self.isLink = os.path.islink(self.referencePath)
 
-  def apply(self, filePath, cachePath=None):
-    fileCopyCache.copyFile(self.referencePath, filePath, cachePath)
+  def apply(self, filePath):
+    fileIo.copyFile(self.referencePath, filePath)
 
   def equals(self, other, checkWithFileSystem=False):
     if not isinstance(other, FileBacked_FileContent):
@@ -230,7 +203,7 @@
   def __init__(self):
     super(MissingFile_FileContent, self).__init__()
 
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     fileIo.removePath(filePath)
 
   def equals(self, other, checkWithFileSystem=False):
@@ -244,7 +217,7 @@
   def __init__(self):
     super(Directory_FileContent, self).__init__()
 
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     fileIo.ensureDirExists(filePath)
 
   def equals(self, other, checkWithFileSystem=False):
@@ -258,9 +231,9 @@
   def __init__(self):
     self.fileStates = OrderedDict()
 
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     for relPath, state in self.fileStates.items():
-      state.apply(fileIo.join(filePath, relPath), cachePath)
+      state.apply(fileIo.join(filePath, relPath))
 
   def add(self, filePath, fileContent):
     self.fileStates[filePath] = fileContent
@@ -487,15 +460,15 @@
   return state
 
 # runs a Job in this process
-def runJobInSameProcess(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
-  job = Job(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe)
+def runJobInSameProcess(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
+  job = Job(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe)
   job.runAndReport()
 
 # starts a Job in a new process
-def runJobInOtherProcess(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, queue, identifier):
+def runJobInOtherProcess(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, queue, identifier):
   parentWriter, childReader = multiprocessing.Pipe()
   childInfo = TwoWayPipe(childReader, queue, identifier)
-  process = multiprocessing.Process(target=runJobInSameProcess, args=(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, childInfo,))
+  process = multiprocessing.Process(target=runJobInSameProcess, args=(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, childInfo,))
   process.start()
   return parentWriter
 
@@ -507,7 +480,7 @@
 
 # Stores a subprocess for running tests and some information about which tests to run
 class Job(object):
-  def __init__(self, shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
+  def __init__(self, shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
     # the test to run
     self.shellCommand = shellCommand
     # directory to run the test in
@@ -521,7 +494,6 @@
     # the changes we're considering
     self.testState = testState
     self.pipe = twoWayPipe
-    self.cachePath = cachePath
 
   def runAndReport(self):
     succeeded = False
@@ -561,7 +533,8 @@
         if isinstance(modified, FileBacked_FileContent):
           # If any filepath wasn't modified since the start of the test, then its content matches the original
           # (If the content is known to match the original, we won't have to reset it next time)
-          if os.path.getmtime(modified.referencePath) < testStartSeconds:
+          referenceModification = fileIo.getModificationTime(modified.referencePath)
+          if referenceModification is not None and referenceModification < testStartSeconds:
             original = fullStateToTest.getContent(key)
             if original is not None:
               if isinstance(original, FileBacked_FileContent):
@@ -624,7 +597,6 @@
             except IOError as e:
               if attempt >= numAttempts - 1:
                 raise Exception("Failed to remove " + path, e)
-    fileIo.removePath(os.path.join(self.workPath, "caches"))
 
   def runnerTest(self, testState, timeout = None):
     workPath = self.getWorkPath(0)
@@ -663,9 +635,6 @@
   def getWorkPath(self, jobId):
     return os.path.join(self.workPath, "job-" + str(jobId))
 
-  def getFilesCachePath(self, jobId):
-    return os.path.join(self.workPath, "caches", "job-" + str(jobId))
-
   def run(self):
     start = datetime.datetime.now()
     numIterationsCompleted = 0
@@ -716,6 +685,10 @@
     numCompletedTests = 2 # Already tested initial passing state and initial failing state
     numJobsAtFirstSuccessAfterMerge = None
     timedOut = False
+    summaryLogPath = os.path.join(self.workPath, "diff-filterer.log")
+    summaryLog = open(summaryLogPath, "w")
+    summaryLog.write("diff-filterer.py starting at " + str(datetime.datetime.now()))
+    summaryLog.flush()
     # continue until all files fail and no jobs are running
     while (numFailuresSinceLastSplitOrSuccess < self.resetTo_state.size() and not timedOut) or len(activeTestStatesById) > 0:
       # display status message
@@ -753,7 +726,8 @@
           numConsecutiveFailures = 0
           numFailuresSinceLastSplitOrSuccess = 0
           acceptedState = box #.getAllFiles()
-          #print("Succeeded : " + acceptedState.summarize() + " (job " + str(identifier) + ") at " + str(datetime.datetime.now()))
+          summaryLog.write("Succeeded : " + acceptedState.summarize() + " (job " + str(identifier) + ") at " + str(datetime.datetime.now()) + "\n")
+          summaryLog.flush()
           maxRunningSize = max([state.size() for state in activeTestStatesById.values()])
           maxRelevantSize = maxRunningSize / len(activeTestStatesById)
           if acceptedState.size() < maxRelevantSize:
@@ -888,12 +862,11 @@
               jobId += 1
             # start job
             workingDir = self.getWorkPath(jobId)
-            cacheDir = self.getFilesCachePath(jobId)
             if jobId in workerStatesById:
               workerPreviousState = workerStatesById[jobId]
             else:
               workerPreviousState = FilesState()
-            runJobInOtherProcess(self.testScript_path, workingDir, cacheDir, workerPreviousState, self.assumeNoSideEffects, self.full_resetTo_state, box, queue, jobId)
+            runJobInOtherProcess(self.testScript_path, workingDir, workerPreviousState, self.assumeNoSideEffects, self.full_resetTo_state, box, queue, jobId)
             activeTestStatesById[jobId] = box
             availableTestStates = availableTestStates[1:]
 
diff --git a/development/simplify-build-failure/impl/join.sh b/development/simplify-build-failure/impl/join.sh
index 9277d9e..8378038 100755
--- a/development/simplify-build-failure/impl/join.sh
+++ b/development/simplify-build-failure/impl/join.sh
@@ -46,8 +46,7 @@
 
   mkdir -p "$(dirname $sourceFile)"
 
-  cd $explodedPath
-  find -type f | sort | xargs cat > "$sourceFile"
+  bash -c "cd $explodedPath && find -type f | sort | xargs cat > $sourceFile"
   chmod u+x "$sourceFile"
 }
 
@@ -62,6 +61,9 @@
   for filePath in $filePaths; do
     joinPath "$explodedDir/$filePath" "$sourcePath/$filePath"
   done
+  for filePath in $(find -type l); do
+    cp -P "$explodedDir/$filePath" "$sourcePath/$filePath"
+  done
   echo done joining all file paths under $explodedDir into $sourcePath
 }
 
diff --git a/development/simplify-build-failure/impl/split.sh b/development/simplify-build-failure/impl/split.sh
index b3e1f1d..f38c53a 100755
--- a/development/simplify-build-failure/impl/split.sh
+++ b/development/simplify-build-failure/impl/split.sh
@@ -54,7 +54,6 @@
   mkdir -p "$explodedPath"
 
   # split $sourceFile into lines, and put each line into a file named 00001, 00002, 00003, ...
-  cd "$explodedPath"
   $scriptDir/explode.py $removeLeavesArg "$sourceFile" "$explodedPath"
   touch "$explodedPath/file"
 }
@@ -73,6 +72,9 @@
     for filePath in $(find -type f); do
       explodePath "$sourcePath/$filePath" "$explodedDir/$filePath"
     done
+    for filePath in $(find -type l); do
+      cp -P "$sourcePath/$filePath" "$explodedDir/$filePath"
+    done
   fi
   echo done splitting everything in $sourcePath into $explodedDir
 }
diff --git a/development/simplify-build-failure/simplify-build-failure.sh b/development/simplify-build-failure/simplify-build-failure.sh
index 3a7e8ff..3ac0e36 100755
--- a/development/simplify-build-failure/simplify-build-failure.sh
+++ b/development/simplify-build-failure/simplify-build-failure.sh
@@ -397,9 +397,18 @@
 
   # set up command for running diff-filterer against diffs within files
   filtererOptions="--num-jobs $numJobs"
-  if echo $subfilePath | grep -v buildSrc >/dev/null 2>/dev/null; then
-    # If we're not making changes in buildSrc, then we want to keep the gradle caches around for more speed
-    # If we are making changes in buildSrc, then Gradle doesn't necessarily do up-to-date checks correctly, and we want to clear the caches between builds
+
+  # Determine whether we are willing to rely on incremental builds
+  # If we're making changes to buildSrc or gradlew then we can't rely on incremental builds to be reliable
+  incrementalBuildReliable=true
+  if [ "$subfilePath" == "" ]; then
+    incrementalBuildReliable=false
+  else
+    if echo $subfilePath | grep -v buildSrc >/dev/null 2>/dev/null; then
+      incrementalBuildReliable=false
+    fi
+  fi
+  if [ "$incrementalBuildReliable" == false ]; then
     filtererOptions="$filtererOptions --assume-no-side-effects"
   fi
 
@@ -425,7 +434,7 @@
     # TODO: maybe we should make diff-filterer.py directly support checking individual line differences within files rather than first running split.sh and asking diff-filterer.py to run join.sh
     # It would be harder to implement in diff-filterer.py though because diff-filterer.py would also need to support comparing against nonempty files too
     echo Running diff-filterer.py again to identify which function bodies can be removed
-    if "$supportRoot/development/file-utils/diff-filterer.py" --assume-input-states-are-correct $filtererOptions --work-path "$(cd $supportRoot/../.. && pwd)" "$noFunctionBodies_Passing" "$noFunctionBodies_goal" "${scriptPath}/impl/join.sh ${splitsPath} ${noFunctionBodies_sandbox} && cd ${noFunctionBodies_work} && $testCommand"; then
+    if "$supportRoot/development/file-utils/diff-filterer.py" $filtererOptions --work-path "$(cd $supportRoot/../.. && pwd)" "$noFunctionBodies_Passing" "$noFunctionBodies_goal" "${scriptPath}/impl/join.sh ${splitsPath} ${noFunctionBodies_sandbox} && cd ${noFunctionBodies_work} && $testCommand"; then
       echo diff-filterer completed successfully
     else
       failed
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index 1a97422..4b7cca1 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -8,10 +8,10 @@
 }
 
 dependencies {
-    docs("androidx.activity:activity:1.8.0-beta01")
-    docs("androidx.activity:activity-compose:1.8.0-beta01")
-    samples("androidx.activity:activity-compose-samples:1.8.0-beta01")
-    docs("androidx.activity:activity-ktx:1.8.0-beta01")
+    docs("androidx.activity:activity:1.8.0-rc01")
+    docs("androidx.activity:activity-compose:1.8.0-rc01")
+    samples("androidx.activity:activity-compose-samples:1.8.0-rc01")
+    docs("androidx.activity:activity-ktx:1.8.0-rc01")
     // ads-identifier is deprecated
     docsWithoutApiSince("androidx.ads:ads-identifier:1.0.0-alpha05")
     docsWithoutApiSince("androidx.ads:ads-identifier-common:1.0.0-alpha05")
@@ -32,90 +32,92 @@
     docs("androidx.asynclayoutinflater:asynclayoutinflater:1.1.0-alpha01")
     docs("androidx.asynclayoutinflater:asynclayoutinflater-appcompat:1.1.0-alpha01")
     docs("androidx.autofill:autofill:1.3.0-alpha01")
-    docs("androidx.benchmark:benchmark-common:1.2.0-beta05")
-    docs("androidx.benchmark:benchmark-junit4:1.2.0-beta05")
-    docs("androidx.benchmark:benchmark-macro:1.2.0-beta05")
-    docs("androidx.benchmark:benchmark-macro-junit4:1.2.0-beta05")
+    docs("androidx.benchmark:benchmark-common:1.2.0-rc01")
+    docs("androidx.benchmark:benchmark-junit4:1.2.0-rc01")
+    docs("androidx.benchmark:benchmark-macro:1.2.0-rc01")
+    docs("androidx.benchmark:benchmark-macro-junit4:1.2.0-rc01")
     docs("androidx.biometric:biometric:1.2.0-alpha05")
     docs("androidx.biometric:biometric-ktx:1.2.0-alpha05")
     samples("androidx.biometric:biometric-ktx-samples:1.2.0-alpha05")
-    docs("androidx.browser:browser:1.6.0")
-    docs("androidx.camera:camera-camera2:1.3.0-rc01")
-    docs("androidx.camera:camera-core:1.3.0-rc01")
-    docs("androidx.camera:camera-extensions:1.3.0-rc01")
+    docs("androidx.bluetooth:bluetooth:1.0.0-alpha01")
+    docs("androidx.bluetooth:bluetooth-testing:1.0.0-alpha01")
+    docs("androidx.browser:browser:1.7.0-alpha01")
+    docs("androidx.camera:camera-camera2:1.4.0-alpha01")
+    docs("androidx.camera:camera-core:1.4.0-alpha01")
+    docs("androidx.camera:camera-extensions:1.4.0-alpha01")
     stubs(fileTree(dir: "../camera/camera-extensions-stub", include: ["camera-extensions-stub.jar"]))
-    docs("androidx.camera:camera-lifecycle:1.3.0-rc01")
-    docs("androidx.camera:camera-mlkit-vision:1.3.0-rc01")
+    docs("androidx.camera:camera-lifecycle:1.4.0-alpha01")
+    docs("androidx.camera:camera-mlkit-vision:1.4.0-alpha01")
     // camera-previewview is not hosted in androidx
     docsWithoutApiSince("androidx.camera:camera-previewview:1.1.0-beta02")
-    docs("androidx.camera:camera-video:1.3.0-rc01")
-    docs("androidx.camera:camera-view:1.3.0-rc01")
-    docs("androidx.camera:camera-viewfinder:1.3.0-rc01")
-    docs("androidx.camera:camera-viewfinder-compose:1.3.0-rc01")
-    docs("androidx.camera:camera-viewfinder-core:1.3.0-rc01")
-    docs("androidx.car.app:app:1.4.0-beta01")
-    docs("androidx.car.app:app-automotive:1.4.0-beta01")
-    docs("androidx.car.app:app-projected:1.4.0-beta01")
-    docs("androidx.car.app:app-testing:1.4.0-beta01")
+    docs("androidx.camera:camera-video:1.4.0-alpha01")
+    docs("androidx.camera:camera-view:1.4.0-alpha01")
+    docs("androidx.camera:camera-viewfinder:1.4.0-alpha01")
+    docs("androidx.camera:camera-viewfinder-compose:1.4.0-alpha01")
+    docs("androidx.camera:camera-viewfinder-core:1.4.0-alpha01")
+    docs("androidx.car.app:app:1.4.0-beta02")
+    docs("androidx.car.app:app-automotive:1.4.0-beta02")
+    docs("androidx.car.app:app-projected:1.4.0-beta02")
+    docs("androidx.car.app:app-testing:1.4.0-beta02")
     docs("androidx.cardview:cardview:1.0.0")
     kmpDocs("androidx.collection:collection:1.3.0-rc01")
     docs("androidx.collection:collection-ktx:1.3.0-rc01")
-    kmpDocs("androidx.compose.animation:animation:1.6.0-alpha05")
-    kmpDocs("androidx.compose.animation:animation-core:1.6.0-alpha05")
-    kmpDocs("androidx.compose.animation:animation-graphics:1.6.0-alpha05")
-    samples("androidx.compose.animation:animation-samples:1.6.0-alpha05")
-    samples("androidx.compose.animation:animation-core-samples:1.6.0-alpha05")
-    samples("androidx.compose.animation:animation-graphics-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.foundation:foundation:1.6.0-alpha05")
-    kmpDocs("androidx.compose.foundation:foundation-layout:1.6.0-alpha05")
-    samples("androidx.compose.foundation:foundation-layout-samples:1.6.0-alpha05")
-    samples("androidx.compose.foundation:foundation-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.material3:material3:1.2.0-alpha07")
-    samples("androidx.compose.material3:material3-samples:1.2.0-alpha07")
-    kmpDocs("androidx.compose.material3:material3-window-size-class:1.2.0-alpha07")
-    samples("androidx.compose.material3:material3-window-size-class-samples:1.2.0-alpha07")
-    kmpDocs("androidx.compose.material:material:1.6.0-alpha05")
-    kmpDocs("androidx.compose.material:material-icons-core:1.6.0-alpha05")
-    samples("androidx.compose.material:material-icons-core-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.material:material-ripple:1.6.0-alpha05")
-    samples("androidx.compose.material:material-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.runtime:runtime:1.6.0-alpha05")
-    docs("androidx.compose.runtime:runtime-livedata:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-livedata-samples:1.6.0-alpha05")
-    docs("androidx.compose.runtime:runtime-rxjava2:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.6.0-alpha05")
-    docs("androidx.compose.runtime:runtime-rxjava3:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.runtime:runtime-saveable:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-saveable-samples:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-samples:1.6.0-alpha05")
+    kmpDocs("androidx.compose.animation:animation:1.6.0-alpha06")
+    kmpDocs("androidx.compose.animation:animation-core:1.6.0-alpha06")
+    kmpDocs("androidx.compose.animation:animation-graphics:1.6.0-alpha06")
+    samples("androidx.compose.animation:animation-samples:1.6.0-alpha06")
+    samples("androidx.compose.animation:animation-core-samples:1.6.0-alpha06")
+    samples("androidx.compose.animation:animation-graphics-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.foundation:foundation:1.6.0-alpha06")
+    kmpDocs("androidx.compose.foundation:foundation-layout:1.6.0-alpha06")
+    samples("androidx.compose.foundation:foundation-layout-samples:1.6.0-alpha06")
+    samples("androidx.compose.foundation:foundation-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.material3:material3:1.2.0-alpha08")
+    samples("androidx.compose.material3:material3-samples:1.2.0-alpha08")
+    kmpDocs("androidx.compose.material3:material3-window-size-class:1.2.0-alpha08")
+    samples("androidx.compose.material3:material3-window-size-class-samples:1.2.0-alpha08")
+    kmpDocs("androidx.compose.material:material:1.6.0-alpha06")
+    kmpDocs("androidx.compose.material:material-icons-core:1.6.0-alpha06")
+    samples("androidx.compose.material:material-icons-core-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.material:material-ripple:1.6.0-alpha06")
+    samples("androidx.compose.material:material-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.runtime:runtime:1.6.0-alpha06")
+    docs("androidx.compose.runtime:runtime-livedata:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-livedata-samples:1.6.0-alpha06")
+    docs("androidx.compose.runtime:runtime-rxjava2:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.6.0-alpha06")
+    docs("androidx.compose.runtime:runtime-rxjava3:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.runtime:runtime-saveable:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-saveable-samples:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-samples:1.6.0-alpha06")
     docs("androidx.compose.runtime:runtime-tracing:1.0.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-geometry:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-graphics:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-graphics-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-test:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-test-junit4:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-test-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-text:1.6.0-alpha05")
-    docs("androidx.compose.ui:ui-text-google-fonts:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-text-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-tooling:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-tooling-data:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-tooling-preview:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-unit:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-unit-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-util:1.6.0-alpha05")
-    docs("androidx.compose.ui:ui-viewbinding:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-viewbinding-samples:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-samples:1.6.0-alpha05")
+    kmpDocs("androidx.compose.ui:ui:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-geometry:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-graphics:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-graphics-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-test:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-test-junit4:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-test-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-text:1.6.0-alpha06")
+    docs("androidx.compose.ui:ui-text-google-fonts:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-text-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-tooling:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-tooling-data:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-tooling-preview:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-unit:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-unit-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-util:1.6.0-alpha06")
+    docs("androidx.compose.ui:ui-viewbinding:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-viewbinding-samples:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-samples:1.6.0-alpha06")
     docs("androidx.concurrent:concurrent-futures:1.2.0-alpha02")
     docs("androidx.concurrent:concurrent-futures-ktx:1.2.0-alpha02")
     docs("androidx.constraintlayout:constraintlayout:2.2.0-alpha12")
     kmpDocs("androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha12")
     docs("androidx.constraintlayout:constraintlayout-core:1.1.0-alpha12")
     docs("androidx.contentpager:contentpager:1.0.0")
-    docs("androidx.coordinatorlayout:coordinatorlayout:1.2.0")
+    docs("androidx.coordinatorlayout:coordinatorlayout:1.3.0-alpha01")
     docs("androidx.core:core:1.12.0-rc01")
     // TODO(b/294531403): Turn on apiSince for core-animation when it releases as alpha
     docsWithoutApiSince("androidx.core:core-animation:1.0.0-rc01")
@@ -135,9 +137,9 @@
     docs("androidx.core:core-testing:1.12.0-rc01")
     docs("androidx.core.uwb:uwb:1.0.0-alpha07")
     docs("androidx.core.uwb:uwb-rxjava3:1.0.0-alpha07")
-    docs("androidx.credentials:credentials:1.2.0-beta03")
-    docs("androidx.credentials:credentials-play-services-auth:1.2.0-beta03")
-    samples("androidx.credentials:credentials-samples:1.2.0-beta03")
+    docs("androidx.credentials:credentials:1.2.0-beta04")
+    docs("androidx.credentials:credentials-play-services-auth:1.2.0-beta04")
+    samples("androidx.credentials:credentials-samples:1.2.0-beta04")
     docs("androidx.cursoradapter:cursoradapter:1.0.0")
     docs("androidx.customview:customview:1.2.0-alpha02")
     // TODO(b/294531403): Turn on apiSince for customview-poolingcontainer when it releases as alpha
@@ -167,9 +169,9 @@
     docs("androidx.enterprise:enterprise-feedback:1.1.0")
     docs("androidx.enterprise:enterprise-feedback-testing:1.1.0")
     docs("androidx.exifinterface:exifinterface:1.3.6")
-    docs("androidx.fragment:fragment:1.7.0-alpha04")
-    docs("androidx.fragment:fragment-ktx:1.7.0-alpha04")
-    docs("androidx.fragment:fragment-testing:1.7.0-alpha04")
+    docs("androidx.fragment:fragment:1.7.0-alpha05")
+    docs("androidx.fragment:fragment-ktx:1.7.0-alpha05")
+    docs("androidx.fragment:fragment-testing:1.7.0-alpha05")
     docs("androidx.glance:glance:1.0.0")
     docs("androidx.glance:glance-appwidget:1.0.0")
     samples("androidx.glance:glance-appwidget-samples:1.0.0")
@@ -193,7 +195,7 @@
     samples("androidx.hilt:hilt-navigation-compose-samples:1.1.0-alpha01")
     docs("androidx.hilt:hilt-navigation-fragment:1.1.0-alpha02")
     docs("androidx.hilt:hilt-work:1.1.0-alpha01")
-    docs("androidx.input:input-motionprediction:1.0.0-beta02")
+    docs("androidx.input:input-motionprediction:1.0.0-beta03")
     docs("androidx.interpolator:interpolator:1.0.0")
     docs("androidx.javascriptengine:javascriptengine:1.0.0-alpha05")
     docs("androidx.leanback:leanback:1.2.0-alpha03")
@@ -231,59 +233,59 @@
     docs("androidx.media2:media2-widget:1.2.1")
     docs("androidx.media:media:1.6.0")
     // androidx.media3 is not hosted in androidx
-    docsWithoutApiSince("androidx.media3:media3-cast:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-common:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-container:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-database:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource-cronet:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource-okhttp:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource-rtmp:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-decoder:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-effect:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-dash:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-hls:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-ima:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-rtsp:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-smoothstreaming:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-workmanager:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-extractor:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-muxer:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-session:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-test-utils:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-test-utils-robolectric:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-transformer:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-ui:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-ui-leanback:1.1.0")
-    docs("androidx.mediarouter:mediarouter:1.6.0-rc01")
-    docs("androidx.mediarouter:mediarouter-testing:1.6.0-rc01")
+    docsWithoutApiSince("androidx.media3:media3-cast:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-common:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-container:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-database:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource-cronet:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource-okhttp:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource-rtmp:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-decoder:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-effect:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-dash:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-hls:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-ima:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-rtsp:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-smoothstreaming:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-workmanager:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-extractor:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-muxer:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-session:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-test-utils:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-test-utils-robolectric:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-transformer:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-ui:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-ui-leanback:1.2.0-alpha01")
+    docs("androidx.mediarouter:mediarouter:1.6.0")
+    docs("androidx.mediarouter:mediarouter-testing:1.6.0")
     docs("androidx.metrics:metrics-performance:1.0.0-alpha04")
-    docs("androidx.navigation:navigation-common:2.7.2")
-    docs("androidx.navigation:navigation-common-ktx:2.7.2")
-    docs("androidx.navigation:navigation-compose:2.7.2")
-    samples("androidx.navigation:navigation-compose-samples:2.7.2")
-    docs("androidx.navigation:navigation-dynamic-features-fragment:2.7.2")
-    docs("androidx.navigation:navigation-dynamic-features-runtime:2.7.2")
-    docs("androidx.navigation:navigation-fragment:2.7.2")
-    docs("androidx.navigation:navigation-fragment-ktx:2.7.2")
-    docs("androidx.navigation:navigation-runtime:2.7.2")
-    docs("androidx.navigation:navigation-runtime-ktx:2.7.2")
-    docs("androidx.navigation:navigation-testing:2.7.2")
-    docs("androidx.navigation:navigation-ui:2.7.2")
-    docs("androidx.navigation:navigation-ui-ktx:2.7.2")
-    docs("androidx.paging:paging-common:3.2.1")
-    docs("androidx.paging:paging-common-ktx:3.2.1")
-    docs("androidx.paging:paging-compose:3.2.1")
-    samples("androidx.paging:paging-compose-samples:3.2.1")
-    docs("androidx.paging:paging-guava:3.2.1")
-    docs("androidx.paging:paging-runtime:3.2.1")
-    docs("androidx.paging:paging-runtime-ktx:3.2.1")
-    docs("androidx.paging:paging-rxjava2:3.2.1")
-    docs("androidx.paging:paging-rxjava2-ktx:3.2.1")
-    docs("androidx.paging:paging-rxjava3:3.2.1")
-    samples("androidx.paging:paging-samples:3.2.1")
-    docs("androidx.paging:paging-testing:3.2.1")
+    docs("androidx.navigation:navigation-common:2.7.3")
+    docs("androidx.navigation:navigation-common-ktx:2.7.3")
+    docs("androidx.navigation:navigation-compose:2.7.3")
+    samples("androidx.navigation:navigation-compose-samples:2.7.3")
+    docs("androidx.navigation:navigation-dynamic-features-fragment:2.7.3")
+    docs("androidx.navigation:navigation-dynamic-features-runtime:2.7.3")
+    docs("androidx.navigation:navigation-fragment:2.7.3")
+    docs("androidx.navigation:navigation-fragment-ktx:2.7.3")
+    docs("androidx.navigation:navigation-runtime:2.7.3")
+    docs("androidx.navigation:navigation-runtime-ktx:2.7.3")
+    docs("androidx.navigation:navigation-testing:2.7.3")
+    docs("androidx.navigation:navigation-ui:2.7.3")
+    docs("androidx.navigation:navigation-ui-ktx:2.7.3")
+    docs("androidx.paging:paging-common:3.3.0-alpha01")
+    docs("androidx.paging:paging-common-ktx:3.3.0-alpha01")
+    kmpDocs("androidx.paging:paging-compose:3.3.0-alpha01")
+    samples("androidx.paging:paging-compose-samples:3.3.0-alpha01")
+    docs("androidx.paging:paging-guava:3.3.0-alpha01")
+    docs("androidx.paging:paging-runtime:3.3.0-alpha01")
+    docs("androidx.paging:paging-runtime-ktx:3.3.0-alpha01")
+    docs("androidx.paging:paging-rxjava2:3.3.0-alpha01")
+    docs("androidx.paging:paging-rxjava2-ktx:3.3.0-alpha01")
+    docs("androidx.paging:paging-rxjava3:3.3.0-alpha01")
+    samples("androidx.paging:paging-samples:3.3.0-alpha01")
+    docs("androidx.paging:paging-testing:3.3.0-alpha01")
     docs("androidx.palette:palette:1.0.0")
     docs("androidx.palette:palette-ktx:1.0.0")
     docs("androidx.percentlayout:percentlayout:1.0.1")
@@ -295,27 +297,27 @@
     docs("androidx.privacysandbox.sdkruntime:sdkruntime-client:1.0.0-alpha08")
     docs("androidx.privacysandbox.sdkruntime:sdkruntime-core:1.0.0-alpha08")
     docs("androidx.privacysandbox.tools:tools:1.0.0-alpha06")
-    docs("androidx.privacysandbox.ui:ui-client:1.0.0-alpha05")
-    docs("androidx.privacysandbox.ui:ui-core:1.0.0-alpha05")
-    docs("androidx.privacysandbox.ui:ui-provider:1.0.0-alpha05")
+    docs("androidx.privacysandbox.ui:ui-client:1.0.0-alpha06")
+    docs("androidx.privacysandbox.ui:ui-core:1.0.0-alpha06")
+    docs("androidx.privacysandbox.ui:ui-provider:1.0.0-alpha06")
     docs("androidx.profileinstaller:profileinstaller:1.3.1")
     docs("androidx.recommendation:recommendation:1.0.0")
     docs("androidx.recyclerview:recyclerview:1.3.1")
     docs("androidx.recyclerview:recyclerview-selection:2.0.0-alpha01")
     docs("androidx.remotecallback:remotecallback:1.0.0-alpha02")
     docs("androidx.resourceinspection:resourceinspection-annotation:1.0.1")
-    docs("androidx.room:room-common:2.6.0-beta01")
-    docs("androidx.room:room-guava:2.6.0-beta01")
-    docs("androidx.room:room-ktx:2.6.0-beta01")
-    docs("androidx.room:room-migration:2.6.0-beta01")
-    docs("androidx.room:room-paging:2.6.0-beta01")
-    docs("androidx.room:room-paging-guava:2.6.0-beta01")
-    docs("androidx.room:room-paging-rxjava2:2.6.0-beta01")
-    docs("androidx.room:room-paging-rxjava3:2.6.0-beta01")
-    docs("androidx.room:room-runtime:2.6.0-beta01")
-    docs("androidx.room:room-rxjava2:2.6.0-beta01")
-    docs("androidx.room:room-rxjava3:2.6.0-beta01")
-    docs("androidx.room:room-testing:2.6.0-beta01")
+    docs("androidx.room:room-common:2.6.0-rc01")
+    docs("androidx.room:room-guava:2.6.0-rc01")
+    docs("androidx.room:room-ktx:2.6.0-rc01")
+    docs("androidx.room:room-migration:2.6.0-rc01")
+    docs("androidx.room:room-paging:2.6.0-rc01")
+    docs("androidx.room:room-paging-guava:2.6.0-rc01")
+    docs("androidx.room:room-paging-rxjava2:2.6.0-rc01")
+    docs("androidx.room:room-paging-rxjava3:2.6.0-rc01")
+    docs("androidx.room:room-runtime:2.6.0-rc01")
+    docs("androidx.room:room-rxjava2:2.6.0-rc01")
+    docs("androidx.room:room-rxjava3:2.6.0-rc01")
+    docs("androidx.room:room-testing:2.6.0-rc01")
     docs("androidx.savedstate:savedstate:1.2.1")
     docs("androidx.savedstate:savedstate-ktx:1.2.1")
     docs("androidx.security:security-app-authenticator:1.0.0-alpha02")
@@ -329,9 +331,9 @@
     docs("androidx.slice:slice-core:1.1.0-alpha02")
     docs("androidx.slice:slice-view:1.1.0-alpha02")
     docs("androidx.slidingpanelayout:slidingpanelayout:1.2.0")
-    docs("androidx.sqlite:sqlite:2.4.0-beta01")
-    docs("androidx.sqlite:sqlite-framework:2.4.0-beta01")
-    docs("androidx.sqlite:sqlite-ktx:2.4.0-beta01")
+    docs("androidx.sqlite:sqlite:2.4.0-rc01")
+    docs("androidx.sqlite:sqlite-framework:2.4.0-rc01")
+    docs("androidx.sqlite:sqlite-ktx:2.4.0-rc01")
     docs("androidx.startup:startup-runtime:1.2.0-alpha02")
     docs("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01")
     // androidx.test is not hosted in androidx\
@@ -359,12 +361,12 @@
     docsWithoutApiSince("androidx.textclassifier:textclassifier:1.0.0-alpha04")
     docs("androidx.tracing:tracing:1.3.0-alpha02")
     docs("androidx.tracing:tracing-ktx:1.3.0-alpha02")
-    docs("androidx.tracing:tracing-perfetto:1.0.0-beta03")
+    docs("androidx.tracing:tracing-perfetto:1.0.0-rc01")
     // TODO(243405142) clean-up
     docsWithoutApiSince("androidx.tracing:tracing-perfetto-common:1.0.0-alpha16")
-    docs("androidx.tracing:tracing-perfetto-handshake:1.0.0-beta03")
-    docs("androidx.transition:transition:1.5.0-alpha02")
-    docs("androidx.transition:transition-ktx:1.5.0-alpha02")
+    docs("androidx.tracing:tracing-perfetto-handshake:1.0.0-rc01")
+    docs("androidx.transition:transition:1.5.0-alpha03")
+    docs("androidx.transition:transition-ktx:1.5.0-alpha03")
     docs("androidx.tv:tv-foundation:1.0.0-alpha09")
     docs("androidx.tv:tv-material:1.0.0-alpha09")
     samples("androidx.tv:tv-samples:1.0.0-alpha09")
@@ -375,16 +377,16 @@
     docs("androidx.versionedparcelable:versionedparcelable:1.1.1")
     docs("androidx.viewpager2:viewpager2:1.1.0-beta02")
     docs("androidx.viewpager:viewpager:1.1.0-alpha01")
-    docs("androidx.wear.compose:compose-foundation:1.3.0-alpha05")
-    samples("androidx.wear.compose:compose-foundation-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-material:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-material-core:1.3.0-alpha05")
-    samples("androidx.wear.compose:compose-material-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-material3:1.0.0-alpha11")
-    samples("androidx.wear.compose:compose-material3-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-navigation:1.3.0-alpha05")
-    samples("androidx.wear.compose:compose-navigation-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-ui-tooling:1.3.0-alpha05")
+    docs("androidx.wear.compose:compose-foundation:1.3.0-alpha06")
+    samples("androidx.wear.compose:compose-foundation-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-material:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-material-core:1.3.0-alpha06")
+    samples("androidx.wear.compose:compose-material-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-material3:1.0.0-alpha12")
+    samples("androidx.wear.compose:compose-material3-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-navigation:1.3.0-alpha06")
+    samples("androidx.wear.compose:compose-navigation-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-ui-tooling:1.3.0-alpha06")
     docs("androidx.wear.protolayout:protolayout:1.0.0")
     docs("androidx.wear.protolayout:protolayout-expression:1.0.0")
     docs("androidx.wear.protolayout:protolayout-expression-pipeline:1.0.0")
@@ -423,15 +425,15 @@
     docs("androidx.wear:wear-tooling-preview:1.0.0-alpha01")
     docs("androidx.webkit:webkit:1.8.0")
     docs("androidx.window.extensions.core:core:1.0.0")
-    docs("androidx.window:window:1.2.0-beta01")
+    docs("androidx.window:window:1.2.0-beta03")
     stubs(fileTree(dir: "../window/stubs/", include: ["window-sidecar-release-0.1.0-alpha01.aar"]))
-    docs("androidx.window:window-core:1.2.0-beta01")
+    docs("androidx.window:window-core:1.2.0-beta03")
     stubs("androidx.window:window-extensions:1.0.0-alpha01")
-    docs("androidx.window:window-java:1.2.0-beta01")
-    docs("androidx.window:window-rxjava2:1.2.0-beta01")
-    docs("androidx.window:window-rxjava3:1.2.0-beta01")
-    samples("androidx.window:window-samples:1.2.0-beta01")
-    docs("androidx.window:window-testing:1.2.0-beta01")
+    docs("androidx.window:window-java:1.2.0-beta03")
+    docs("androidx.window:window-rxjava2:1.2.0-beta03")
+    docs("androidx.window:window-rxjava3:1.2.0-beta03")
+    samples("androidx.window:window-samples:1.2.0-beta03")
+    docs("androidx.window:window-testing:1.2.0-beta03")
     docs("androidx.work:work-gcm:2.9.0-beta01")
     docs("androidx.work:work-multiprocess:2.9.0-beta01")
     docs("androidx.work:work-runtime:2.9.0-beta01")
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index 2af5022..e6838d3 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -294,6 +294,7 @@
     docs(project(":privacysandbox:ads:ads-adservices-java"))
     docs(project(":privacysandbox:sdkruntime:sdkruntime-client"))
     docs(project(":privacysandbox:sdkruntime:sdkruntime-core"))
+    docs(project(":privacysandbox:sdkruntime:sdkruntime-provider"))
     docs(project(":privacysandbox:tools:tools"))
     docs(project(":privacysandbox:ui:ui-client"))
     docs(project(":privacysandbox:ui:ui-core"))
diff --git a/fragment/fragment/api/restricted_current.txt b/fragment/fragment/api/restricted_current.txt
index d1e02606..74a19b6 100644
--- a/fragment/fragment/api/restricted_current.txt
+++ b/fragment/fragment/api/restricted_current.txt
@@ -452,7 +452,7 @@
     method public abstract void addTarget(Object, android.view.View);
     method public abstract void addTargets(Object, java.util.ArrayList<android.view.View!>);
     method public void animateToEnd(Object);
-    method public void animateToStart(Object);
+    method public Runnable! animateToStart(Object, android.view.ViewGroup, Runnable);
     method public abstract void beginDelayedTransition(android.view.ViewGroup, Object?);
     method protected static void bfsAddViewChildren(java.util.List<android.view.View!>!, android.view.View!);
     method public abstract boolean canHandle(Object);
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
index a5f9e91..4d433aa 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
@@ -741,6 +741,7 @@
                 // Now set up our completion signal on the completely merged transition set
                 val (enteringViews, mergedTransition) =
                     createMergedTransition(container, lastIn, firstOut)
+                var animateToStartRunnable: Runnable? = null
                 transitionInfos.map { it.operation }.forEach { operation ->
                     val cancelRunnable = Runnable { seekCancelLambda?.invoke() }
                     transitionImpl.setListenerForTransitionEnd(
@@ -749,11 +750,24 @@
                         transitionSignal,
                         cancelRunnable,
                         Runnable {
-                            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
-                                Log.v(FragmentManager.TAG,
-                                    "Transition for operation $operation has completed")
+                            // If we are ended due to the transition being cancelled and calling
+                            // animateToStart, we need to cancel the transition to set transition
+                            // state back to the beginning before we complete the operation.
+                            if (animateToStartRunnable != null) {
+                                animateToStartRunnable?.run()
+                                transitionInfos.mapNotNull { it.operation.fragment.view }
+                                    .forEach { view ->
+                                        operation.finalState.applyState(view, container)
+                                    }
+                            } else {
+                                if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                                    Log.v(
+                                        FragmentManager.TAG,
+                                        "Transition for operation $operation has completed"
+                                    )
+                                }
+                                operation.completeEffect(this)
                             }
-                            operation.completeEffect(this)
                         })
                 }
 
@@ -765,7 +779,25 @@
                     check(controller != null) {
                         "Unable to start transition $mergedTransition for container $container."
                     }
-                    seekCancelLambda = { transitionImpl.animateToStart(controller!!) }
+                    seekCancelLambda = {
+                        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                            Log.v(FragmentManager.TAG, "Animating to start")
+                        }
+                        animateToStartRunnable =
+                            transitionImpl.animateToStart(controller!!, container) {
+                                transitionInfos.map { it.operation }.forEach { operation ->
+                                    if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                                        Log.v(
+                                            FragmentManager.TAG,
+                                            "Transition for operation $operation has " +
+                                                "completed as result of cancellation"
+                                        )
+                                    }
+                                    operation.completeEffect(this)
+                                    animateToStartRunnable = null
+                                }
+                            }
+                    }
                     if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
                         Log.v(FragmentManager.TAG,
                             "Started executing operations from $firstOut to $lastIn")
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
index 6a8d444..e035b0a 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
@@ -191,7 +191,10 @@
     /**
      * Animate the transition to start.
      */
-    public void animateToStart(@NonNull Object transitionController) { }
+    public Runnable animateToStart(@NonNull Object transitionController,
+            @NonNull ViewGroup sceneRoot, @NonNull Runnable completeRunnable) {
+        return () -> { };
+    }
 
     /**
      * Prepares for setting the shared element names by gathering the names of the incoming
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
index 0e3ebf0..8a9a9f6 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
@@ -526,6 +526,20 @@
                             )
                         }
                         val parent = view.parent as? ViewGroup
+                        // For transitions it is possible that we complete the operation while
+                        // the view is still parented by the ViewOverlay so we need to make sure
+                        // the container is the proper view.
+                        if (parent != null && parent != container) {
+                            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                                Log.v(
+                                    FragmentManager.TAG, "SpecialEffectsController: " +
+                                        "Swapping view $view from parent $parent to Container " +
+                                        "$container"
+                                )
+                            }
+                            parent.removeView(view)
+                            container.addView(view)
+                        }
                         if (parent == null) {
                             if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
                                 Log.v(
diff --git a/fragment/integration-tests/testapp/build.gradle b/fragment/integration-tests/testapp/build.gradle
index c282c9e..6f03e89 100644
--- a/fragment/integration-tests/testapp/build.gradle
+++ b/fragment/integration-tests/testapp/build.gradle
@@ -27,7 +27,7 @@
 dependencies {
     implementation(libs.kotlinStdlib)
     implementation(project(":fragment:fragment-ktx"))
-    implementation("androidx.transition:transition:1.3.0")
+    implementation(project(":transition:transition"))
     implementation("androidx.recyclerview:recyclerview:1.1.0")
     debugImplementation(project(":fragment:fragment-testing-manifest"))
 
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt
index 7c64d96..cb00c925 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt
@@ -22,6 +22,7 @@
 import androidx.core.os.bundleOf
 import androidx.fragment.app.Fragment
 import androidx.fragment.testapp.R
+import androidx.transition.Fade
 
 /**
  * Display details for a given kitten
@@ -45,6 +46,9 @@
             5 -> image.setImageResource(R.drawable.placekitten_5)
             6 -> image.setImageResource(R.drawable.placekitten_6)
         }
+
+        enterTransition = Fade()
+        exitTransition = Fade()
     }
 
     companion object {
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt
index 3d1826c..cbf785e 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt
@@ -21,7 +21,6 @@
 import androidx.annotation.RequiresApi
 import androidx.transition.ChangeBounds
 import androidx.transition.ChangeImageTransform
-import androidx.transition.ChangeTransform
 import androidx.transition.TransitionSet
 
 /**
@@ -43,9 +42,8 @@
 
     private fun init() {
         ordering = ORDERING_TOGETHER
-        duration = 2000
+        duration = 500
         addTransition(ChangeBounds())
-            .addTransition(ChangeTransform())
             .addTransition(ChangeImageTransform())
     }
 }
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt
index 0787b3b..29da31f 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt
@@ -42,6 +42,8 @@
             adapter = KittenGridAdapter(callback)
             layoutManager = GridLayoutManager(context, 2)
         }
+        enterTransition = Fade()
+        exitTransition = Fade()
         // View is created so postpone the transition
         postponeEnterTransition()
         OneShotPreDrawListener.add(view.parent as ViewGroup) {
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
index 13dc5a3..1ad58d1 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
@@ -15,10 +15,29 @@
  */
 package androidx.fragment.testapp.kittenfragmenttransitions
 
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
 import androidx.fragment.app.Fragment
+import androidx.fragment.app.commit
 import androidx.fragment.testapp.R
 
 /**
  * Main activity that holds our fragments
  */
-class KittenTransitionMainFragment : Fragment(R.layout.kitten_activity_main)
+class KittenTransitionMainFragment : Fragment(R.layout.kitten_activity_main) {
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        if (savedInstanceState == null) {
+            parentFragmentManager.beginTransaction()
+                .setPrimaryNavigationFragment(this)
+                .commit()
+        }
+
+        return super.onCreateView(inflater, container, savedInstanceState)
+    }
+}
diff --git a/glance/glance-appwidget-proto/src/main/proto/layout.proto b/glance/glance-appwidget-proto/src/main/proto/layout.proto
index fe5760a..4fa2d16 100644
--- a/glance/glance-appwidget-proto/src/main/proto/layout.proto
+++ b/glance/glance-appwidget-proto/src/main/proto/layout.proto
@@ -26,6 +26,7 @@
   bool hasAction = 9;
   repeated LayoutNode children = 7;
   bool has_image_description = 10;
+  bool has_image_color_filter = 11;
 }
 
 enum ContentScale {
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
index 4409f8c..bc136c1 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
@@ -31,6 +31,7 @@
 import androidx.glance.Image
 import androidx.glance.ImageProvider
 import androidx.glance.LocalContext
+import androidx.glance.action.clickable
 import androidx.glance.appwidget.GlanceAppWidget
 import androidx.glance.appwidget.GlanceAppWidgetReceiver
 import androidx.glance.appwidget.SizeMode
@@ -86,17 +87,27 @@
     @Composable
     private fun Header() {
         val context = LocalContext.current
+        var shouldTintHeaderIcon by remember { mutableStateOf(true) }
+
         Row(
             horizontalAlignment = Alignment.CenterHorizontally,
             verticalAlignment = Alignment.CenterVertically,
             modifier = GlanceModifier.fillMaxWidth().background(Color.White)
         ) {
+            // Demonstrates toggling application of color filter on an image
             Image(
                 provider = ImageProvider(R.drawable.ic_android),
                 contentDescription = null,
-                colorFilter = ColorFilter.tint(
-                    ColorProvider(day = Color.Green, night = Color.Blue)
-                ),
+                colorFilter = if (shouldTintHeaderIcon) {
+                    ColorFilter.tint(
+                        ColorProvider(day = Color.Green, night = Color.Blue)
+                    )
+                } else {
+                    null
+                },
+                modifier = GlanceModifier.clickable {
+                    shouldTintHeaderIcon = !shouldTintHeaderIcon
+                }
             )
             Text(
                 text = context.getString(R.string.image_widget_name),
diff --git a/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
index 712acdc..eb7d9a4 100644
--- a/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
@@ -37,6 +37,7 @@
 import androidx.test.uiautomator.UiDevice
 import androidx.work.WorkManager
 import androidx.work.testing.WorkManagerTestInitHelper
+import com.google.common.truth.Truth
 import com.google.common.truth.Truth.assertThat
 import java.lang.ref.WeakReference
 import java.util.concurrent.CountDownLatch
@@ -44,7 +45,9 @@
 import kotlin.test.assertIs
 import kotlin.test.fail
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.withContext
+import kotlinx.coroutines.withTimeoutOrNull
 import org.junit.rules.RuleChain
 import org.junit.rules.TestRule
 import org.junit.runner.Description
@@ -331,4 +334,38 @@
             mHostView.childCount > 0
         }
     }
+
+    /**
+     * Waits for given condition to be true and throws [AssertionError] with given message if not
+     * satisfied within the default timeout.
+     */
+    suspend fun waitAndTestForCondition(
+        errorMessage: String,
+        timeoutMs: Long = 600,
+        condition: (TestAppWidgetHostView) -> Boolean
+    ) {
+        val resume = Channel<Unit>(Channel.CONFLATED)
+        fun test() = condition(mHostView)
+        val onDrawListener = ViewTreeObserver.OnDrawListener {
+            if (test()) resume.trySend(Unit)
+        }
+
+        onHostActivity {
+            // If test is already true, do not wait for the next draw to resume
+            if (test()) resume.trySend(Unit)
+            mHostView.viewTreeObserver.addOnDrawListener(onDrawListener)
+        }
+        try {
+            val status = withTimeoutOrNull<Boolean?>(timeoutMs) {
+                resume.receive()
+                true
+            }
+
+            Truth.assertWithMessage(errorMessage).that(status).isEqualTo(true)
+        } finally {
+            onHostActivity {
+                mHostView.viewTreeObserver.removeOnDrawListener(onDrawListener)
+            }
+        }
+    }
 }
diff --git a/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ImageTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ImageTest.kt
new file mode 100644
index 0000000..45735c7
--- /dev/null
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ImageTest.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2023 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 androidx.glance.appwidget
+
+import android.widget.ImageView
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.glance.ColorFilter
+import androidx.glance.GlanceModifier
+import androidx.glance.GlanceTheme
+import androidx.glance.Image
+import androidx.glance.appwidget.test.R
+import androidx.glance.background
+import androidx.glance.layout.Column
+import androidx.glance.layout.size
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.runBlocking
+import org.junit.Rule
+import org.junit.Test
+
+@SdkSuppress(minSdkVersion = 29)
+@MediumTest
+class ImageTest {
+
+    @get:Rule
+    val mHostRule = AppWidgetHostRule()
+
+    @Test
+    fun colorFilter_toggle() = runBlocking {
+        val shouldTintImageFlow = MutableStateFlow(true)
+        TestGlanceAppWidget.uiDefinition = {
+            val shouldTint by shouldTintImageFlow.collectAsState()
+            Column(modifier = GlanceModifier.size(100.dp).background(Color.DarkGray)) {
+                Image(
+                    provider = androidx.glance.ImageProvider(R.drawable.oval),
+                    contentDescription = null,
+                    modifier = GlanceModifier.size(24.dp),
+                    colorFilter = if (shouldTint) {
+                        ColorFilter.tint(GlanceTheme.colors.onSurface)
+                    } else {
+                        null
+                    }
+                )
+            }
+        }
+        mHostRule.startHost()
+
+        mHostRule.waitAndTestForCondition(
+            errorMessage = "No ImageView with colorFilter != null was found"
+        ) { hostView ->
+            val child = hostView.findChildByType<ImageView>()
+            child != null && child.colorFilter != null
+        }
+
+        shouldTintImageFlow.emit(false)
+
+        mHostRule.waitAndTestForCondition(
+            errorMessage = "No ImageView with colorFilter == null was found"
+        ) { hostView ->
+            val child = hostView.findChildByType<ImageView>()
+            child != null && child.colorFilter == null
+        }
+    }
+}
diff --git a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
index 49e0d30..01cb60e 100644
--- a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
@@ -253,6 +253,7 @@
         else -> error("Unknown content scale ${element.contentScale}")
     }
     hasImageDescription = !element.isDecorative()
+    hasImageColorFilter = element.colorFilterParams != null
 }
 
 private fun LayoutNode.Builder.setColumnNode(element: EmittableColumn) {
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt
index 759b8a7..2bbfbe4 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt
@@ -21,7 +21,9 @@
 import android.os.Build
 import androidx.compose.ui.unit.dp
 import androidx.glance.Button
+import androidx.glance.ColorFilter
 import androidx.glance.GlanceModifier
+import androidx.glance.GlanceTheme
 import androidx.glance.Image
 import androidx.glance.ImageProvider
 import androidx.glance.action.actionStartActivity
@@ -207,6 +209,33 @@
     }
 
     @Test
+    fun testChange_imageColorFilter() = fakeCoroutineScope.runTest {
+        val appId = 999
+        val root = runTestingComposition {
+            Column {
+                Image(
+                    ImageProvider(R.drawable.oval),
+                    colorFilter = ColorFilter.tint(GlanceTheme.colors.onSurface),
+                    contentDescription = null
+                )
+            }
+        }
+        val root2 = runTestingComposition {
+            Column {
+                Image(
+                    ImageProvider(R.drawable.oval),
+                    colorFilter = null,
+                    contentDescription = null
+                )
+            }
+        }
+
+        val layoutConfig = LayoutConfiguration.create(context, appId)
+        assertThat(layoutConfig.addLayout(root)).isEqualTo(0)
+        assertThat(layoutConfig.addLayout(root2)).isEqualTo(1)
+    }
+
+    @Test
     fun testChange_columnAlignment() = fakeCoroutineScope.runTest {
         val appId = 999
         val root = runTestingComposition {
diff --git a/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt b/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
index 72fd733..2f01317 100644
--- a/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
+++ b/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
@@ -18,6 +18,7 @@
 
 import android.content.Context
 import android.util.Log
+import androidx.annotation.VisibleForTesting
 import androidx.compose.runtime.Composition
 import androidx.compose.runtime.Recomposer
 import androidx.glance.Applier
@@ -87,6 +88,9 @@
     private val key = inputData.getString(sessionManager.keyParam)
         ?: error("SessionWorker must be started with a key")
 
+    @VisibleForTesting
+    internal var effectJob: Job? = null
+
     override suspend fun doWork() =
         withTimerOrNull(timeouts.timeSource) {
             observeIdleEvents(
@@ -117,8 +121,12 @@
         val snapshotMonitor = launch { globalSnapshotMonitor() }
         val root = session.createRootEmittable()
         val uiReady = MutableStateFlow(false)
-        // Use an independent Job with a CoroutineExceptionHandler so that we can catch errors from
-        // LaunchedEffects in the composition and they won't propagate up to the Worker context.
+        // For effects, use an independent Job with a CoroutineExceptionHandler so that we can catch
+        // errors from LaunchedEffects in the composition and they won't propagate up to TimerScope.
+        // If we set Job.parent, then we cannot use our own CoroutineExceptionHandler. However, this
+        // also means that cancellation of TimerScope does not propagate automatically to this Job,
+        // so we must set that up manually here to avoid leaking the effect Job after this scope
+        // ends.
         val effectExceptionHandler = CoroutineExceptionHandler { _, throwable ->
             launch {
                 session.onCompositionError(applicationContext, throwable)
@@ -126,7 +134,11 @@
                 uiReady.emit(true)
             }
         }
-        val effectCoroutineContext = coroutineContext + Job() + effectExceptionHandler
+        val effectCoroutineContext = Job().let { job ->
+            effectJob = job
+            coroutineContext[Job]?.invokeOnCompletion { job.cancel() }
+            coroutineContext + job + effectExceptionHandler
+        }
         val recomposer = Recomposer(effectCoroutineContext)
         val composition = Composition(Applier(root), recomposer)
 
diff --git a/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt b/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
index c62f9c0..d5dfc4a 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
@@ -267,6 +267,36 @@
         assertThat(result).hasCauseThat().isEqualTo(cause)
         assertThat(result).hasMessageThat().isEqualTo("message")
     }
+
+    @Test
+    fun sessionWorkerDoesNotLeakEffectJobOnCancellation() = runTest {
+        val workerJob = launch {
+            var wasCancelled = false
+            try {
+                worker.doWork()
+            } catch (e: CancellationException) {
+                wasCancelled = true
+                assertThat(worker.effectJob?.isCancelled).isTrue()
+            } finally {
+                assertThat(wasCancelled).isTrue()
+            }
+        }
+
+        sessionManager.startSession(context).first()
+        workerJob.cancel()
+    }
+
+    @Test
+    fun sessionWorkerDoesNotLeakEffectJobOnClose() = runTest {
+        launch {
+            val result = worker.doWork()
+            assertThat(result).isEqualTo(Result.success())
+            assertThat(worker.effectJob?.isCancelled).isTrue()
+        }
+
+        sessionManager.startSession(context).first()
+        sessionManager.closeSession()
+    }
 }
 
 private const val SESSION_KEY = "123"
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b756b0c..c0b0c77 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -47,7 +47,7 @@
 kotlinCoroutines = "1.7.1"
 kotlinSerialization = "1.3.3"
 ksp = "1.9.0-1.0.13"
-ktfmt = "0.44"
+ktfmt = "0.45"
 ktlint = "0.49.1"
 leakcanary = "2.8.1"
 media3 = "1.0.0-beta03"
@@ -105,7 +105,7 @@
 checkerframework = { module = "org.checkerframework:checker-qual", version = "2.5.3" }
 checkmark = { module = "net.saff.checkmark:checkmark", version = "0.1.6" }
 constraintLayout = { module = "androidx.constraintlayout:constraintlayout", version = "2.0.1"}
-dackka = { module = "com.google.devsite:dackka", version = "1.3.7" }
+dackka = { module = "com.google.devsite:dackka", version = "1.4.0" }
 dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" }
 daggerCompiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" }
 dexmakerMockito = { module = "com.linkedin.dexmaker:dexmaker-mockito", version.ref = "dexmaker" }
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index b17f0ce..d7b83bd 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -3701,6 +3701,32 @@
 =rjff
 -----END PGP PUBLIC KEY BLOCK-----
 
+pub    EE92349AD86DE446
+sub    E68665C8F91BDE69
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBGO91akBCADDDpIrW/IohUSJNDu9VOUlnfEOm5VS49uqM0uucLi0BeAhy1Fo
+P6Yg1cJkcK66DtnUoTM/JJLyDzJRlKnniLrYCkw8ScvtPdA5cQKJTY5ecn+9ouR2
+SC9GkBMgagbCScP1xE45q5FO+z4kwmcERIKOQ687VAk64QM6hJCupfAd6SqS/X0Q
+SGttTNtmj7YBpfnU5iFX05Hj8Zkk7CX439xltO8uJNyBlDVbuUZc3/kRowKPVuuo
+TK2mzllVPzE/YT6NUY04wQPmRJx0uWZQUyDBZeckdurpSImdd7sik6Wf6zVGvxvg
+MC4oMufZ3EM8R4dssRSIUfnBaQ2o1LS+GVxjABEBAAG5AQ0EY73VqQEIANJPIYj9
+IsxKKOWLOkWvxAg9o9krIkohBMaOGRsx4RxQyArOCUoaG/qsG3aVOi8wML8hQK6q
+oXADJ6FBGxQ67G8pperzRSj1O3BJILB6Fd1X8w40S6hSvUAZs+DM1FMuD4mf6ydu
+yZUVIghGRExNeSb/vfn4KVPqdSAD7uWeQiIUYveaXrwot8+U8tRNgv+LQpCjhm5h
+vWyIuxxpI+k5N07V9y0yRGWiBbgqdmfHVwdEbUSM0sMYUJUZKW+iwf5tZig9LZu3
+HAf/vyXjBWG6zkkjwO8onKFLuhL4jkygHGSawJHwYRgtlknUZ0DMVc451bbhuFHE
+0dcgQCdAYJsI66MAEQEAAYkBPAQYAQgAJhYhBOsbPecXE8nsLofMJu6SNJrYbeRG
+BQJjvdWpAhsMBQkDwmcAAAoJEO6SNJrYbeRGNC0H/1JBKZZ8+JLGcGefchsEWxcN
+RN8yBtDtDM8pEsC99Pt+vzLaAYYFbPVKpzr57zIxZvtm8mUbWOa4Z8eHtzLRQEFi
+rKuvd47YUPOyHtfdeccr0e7iQQ2rpRmOVrnkKu4LHI+f4jFEm+Pe+3CyLYe/tBKK
+eBOKjRAWpQi7Jz1GQUuu9JFu4fUphzz0z5LybGHa1T7QZ+2ew8kqLl8EEeZAq4x/
+bulbaX050vfsgULn1X9AECW0CX/OafvFuSrEZsLUSw0KzmzqMPOLMXOh/EZsop17
+DqhGe5NO7GoCns3XxqjpggME9eCEQooeKHlLCAkX2/XttwVSRlrNsdVb82iKy7E=
+=M4QQ
+-----END PGP PUBLIC KEY BLOCK-----
+
 pub    EE9E7DC9D92FC896
 sub    3B7272A25F20140F
 -----BEGIN PGP PUBLIC KEY BLOCK-----
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index d3b3695..55a065a 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -438,6 +438,7 @@
          <trusted-key id="ea0b70b5050192c98cfa7e4f3f36885c24df4b75" group="org.mozilla"/>
          <trusted-key id="ea23db1360d9029481e7f2efecdfea3cb4493b94" group="jline"/>
          <trusted-key id="eaa526b91dd83ba3e1b9636fa730529ca355a63e" group="org.ccil.cowan.tagsoup"/>
+         <trusted-key id="eb1b3de71713c9ec2e87cc26ee92349ad86de446" group="com.google.j2objc"/>
          <trusted-key id="ec86f41279f2ec8ffd2f54906ccc36cc6c69fc17" group="com.google"/>
          <trusted-key id="ee0ca873074092f806f59b65d364abaa39a47320" group="com.google.errorprone"/>
          <trusted-key id="f06e94a01b835825e6ab4da369b8e32e23138662" group="org.spdx"/>
@@ -537,6 +538,14 @@
             <sha256 value="19f7d921a20d3be022620dd78bd708b2c16362cece59781c94b74a51f078243c" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
+      <component group="com.google.ads.interactivemedia.v3" name="interactivemedia" version="3.30.3">
+         <artifact name="interactivemedia-3.30.3.aar">
+            <sha256 value="b864d3e53a54935c3a159d6d0c73860a9d728b324d620bf1e5b82e97aca65c21" origin="Generated by Gradle" reason="Artifact is not signed"/>
+         </artifact>
+         <artifact name="interactivemedia-3.30.3.pom">
+            <sha256 value="2d12e7a750d530785b1c2843dda3e0b4c3362120ebdcc519ab4ca4453a6e9340" origin="Generated by Gradle" reason="Artifact is not signed"/>
+         </artifact>
+      </component>
       <component group="com.google.android.apps.common.testing.accessibility.framework" name="accessibility-test-framework" version="2.1">
          <artifact name="accessibility-test-framework-2.1.jar">
             <sha256 value="7b0aa6ed7553597ce0610684a9f7eca8021eee218f2e2f427c04a7fbf5f920bd" origin="Generated by Gradle" reason="Artifact is not signed"/>
diff --git a/health/connect/connect-client/api/current.txt b/health/connect/connect-client/api/current.txt
index 7b0863a..3d5bf74 100644
--- a/health/connect/connect-client/api/current.txt
+++ b/health/connect/connect-client/api/current.txt
@@ -9,7 +9,8 @@
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
     method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
-    method public static String getHealthConnectManageDataAction(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public static String getHealthConnectSettingsAction();
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -29,7 +30,8 @@
   }
 
   public static final class HealthConnectClient.Companion {
-    method public String getHealthConnectManageDataAction(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public String getHealthConnectSettingsAction();
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -41,6 +43,12 @@
     field public static final int SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2; // 0x2
   }
 
+  public final class HealthConnectClientExt {
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.response.ReadRecordResponse<T> readRecord(androidx.health.connect.client.HealthConnectClient, String recordId);
+  }
+
   @kotlin.jvm.JvmDefaultWithCompatibility public interface PermissionController {
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
@@ -65,8 +73,6 @@
     method public operator boolean contains(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     method public operator <T> T? get(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
     method public java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> getDataOrigins();
-    method @Deprecated public <T> T? getMetric(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
-    method @Deprecated public boolean hasMetric(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     property public final java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOrigins;
   }
 
@@ -1395,6 +1401,10 @@
     ctor public ReadRecordsRequest(kotlin.reflect.KClass<T> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
 
+  public final class ReadRecordsRequestKt {
+    method public static inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.request.ReadRecordsRequest<T> ReadRecordsRequest(androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
+  }
+
 }
 
 package androidx.health.connect.client.response {
diff --git a/health/connect/connect-client/api/restricted_current.txt b/health/connect/connect-client/api/restricted_current.txt
index beb3500f..eecd117 100644
--- a/health/connect/connect-client/api/restricted_current.txt
+++ b/health/connect/connect-client/api/restricted_current.txt
@@ -9,7 +9,8 @@
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
     method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
-    method public static String getHealthConnectManageDataAction(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public static String getHealthConnectSettingsAction();
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -29,7 +30,8 @@
   }
 
   public static final class HealthConnectClient.Companion {
-    method public String getHealthConnectManageDataAction(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public String getHealthConnectSettingsAction();
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -41,6 +43,12 @@
     field public static final int SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2; // 0x2
   }
 
+  public final class HealthConnectClientExt {
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.response.ReadRecordResponse<T> readRecord(androidx.health.connect.client.HealthConnectClient, String recordId);
+  }
+
   @kotlin.jvm.JvmDefaultWithCompatibility public interface PermissionController {
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
@@ -65,8 +73,6 @@
     method public operator boolean contains(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     method public operator <T> T? get(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
     method public java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> getDataOrigins();
-    method @Deprecated public <T> T? getMetric(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
-    method @Deprecated public boolean hasMetric(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     property public final java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOrigins;
   }
 
@@ -1418,6 +1424,10 @@
     ctor public ReadRecordsRequest(kotlin.reflect.KClass<T> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
 
+  public final class ReadRecordsRequestKt {
+    method public static inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.request.ReadRecordsRequest<T> ReadRecordsRequest(androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
+  }
+
 }
 
 package androidx.health.connect.client.response {
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt
index b36a5fc..366dcc12 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt
@@ -20,6 +20,7 @@
 
 import androidx.annotation.Sampled
 import androidx.health.connect.client.HealthConnectClient
+import androidx.health.connect.client.deleteRecords
 import androidx.health.connect.client.records.StepsRecord
 import androidx.health.connect.client.time.TimeRangeFilter
 import java.time.Instant
@@ -30,8 +31,7 @@
     uid1: String,
     uid2: String
 ) {
-    healthConnectClient.deleteRecords(
-        StepsRecord::class,
+    healthConnectClient.deleteRecords<StepsRecord>(
         recordIdsList = listOf(uid1, uid2),
         clientRecordIdsList = emptyList()
     )
@@ -43,8 +43,7 @@
     startTime: Instant,
     endTime: Instant
 ) {
-    healthConnectClient.deleteRecords(
-        StepsRecord::class,
+    healthConnectClient.deleteRecords<StepsRecord>(
         timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
     )
 }
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
index b18cba92..33be6e1 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
@@ -22,6 +22,7 @@
 import androidx.annotation.Sampled
 import androidx.health.connect.client.PermissionController
 import androidx.health.connect.client.permission.HealthPermission
+import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
 import androidx.health.connect.client.records.StepsRecord
 
 @Sampled
@@ -42,6 +43,22 @@
 }
 
 @Sampled
+fun RequestBackgroundReadPermission(activity: ActivityResultCaller) {
+    val requestPermission =
+        activity.registerForActivityResult(
+            PermissionController.createRequestPermissionResultContract()
+        ) { grantedPermissions: Set<String> ->
+            if (PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND in grantedPermissions) {
+                // It will be possible to read data in background from now on
+            } else {
+                // Permission denied, it won't be possible to read data in background
+            }
+        }
+
+    requestPermission.launch(setOf(PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND))
+}
+
+@Sampled
 suspend fun GetPermissions(permissionController: PermissionController) {
     val grantedPermissions = permissionController.getGrantedPermissions()
 
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt
index e64ecd0..7181326 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt
@@ -22,6 +22,8 @@
 import androidx.annotation.Sampled
 import androidx.health.connect.client.HealthConnectClient
 import androidx.health.connect.client.contracts.ExerciseRouteRequestContract
+import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
+import androidx.health.connect.client.readRecord
 import androidx.health.connect.client.records.ExerciseRoute
 import androidx.health.connect.client.records.ExerciseRouteResult
 import androidx.health.connect.client.records.ExerciseSessionRecord
@@ -40,8 +42,7 @@
 ) {
     val response =
         healthConnectClient.readRecords(
-            ReadRecordsRequest(
-                StepsRecord::class,
+            ReadRecordsRequest<StepsRecord>(
                 timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
             )
         )
@@ -58,8 +59,7 @@
 ) {
     val response =
         healthConnectClient.readRecords(
-            ReadRecordsRequest(
-                ExerciseSessionRecord::class,
+            ReadRecordsRequest<ExerciseSessionRecord>(
                 timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
             )
         )
@@ -69,8 +69,7 @@
         val heartRateRecords =
             healthConnectClient
                 .readRecords(
-                    ReadRecordsRequest(
-                        HeartRateRecord::class,
+                    ReadRecordsRequest<HeartRateRecord>(
                         timeRangeFilter =
                             TimeRangeFilter.between(
                                 exerciseRecord.startTime,
@@ -103,7 +102,7 @@
 
     // Show exercise route, based on user action
     val exerciseSessionRecord =
-        healthConnectClient.readRecord(ExerciseSessionRecord::class, recordId).record
+        healthConnectClient.readRecord<ExerciseSessionRecord>(recordId).record
 
     when (val exerciseRouteResult = exerciseSessionRecord.exerciseRouteResult) {
         is ExerciseRouteResult.Data -> displayExerciseRoute(exerciseRouteResult.exerciseRoute)
@@ -121,8 +120,7 @@
 ) {
     val response =
         healthConnectClient.readRecords(
-            ReadRecordsRequest(
-                SleepSessionRecord::class,
+            ReadRecordsRequest<SleepSessionRecord>(
                 timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
             )
         )
@@ -130,3 +128,28 @@
         // Process each sleep record
     }
 }
+
+@Sampled
+suspend fun ReadRecordsInBackground(
+    healthConnectClient: HealthConnectClient,
+    startTime: Instant,
+    endTime: Instant,
+) {
+    val grantedPermissions = healthConnectClient.permissionController.getGrantedPermissions()
+
+    // The permission should be requested and granted beforehand when the app is in foreground
+    if (PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND !in grantedPermissions) {
+        return
+    }
+
+    val response =
+        healthConnectClient.readRecords(
+            ReadRecordsRequest<StepsRecord>(
+                timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
+            )
+        )
+
+    for (stepsRecord in response.records) {
+        // Process each record
+    }
+}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
index 00f6c95..1ded78e 100644
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
+++ b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
@@ -24,6 +24,7 @@
 import androidx.health.connect.client.changes.DeletionChange
 import androidx.health.connect.client.changes.UpsertionChange
 import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_PREFIX
+import androidx.health.connect.client.readRecord
 import androidx.health.connect.client.records.HeartRateRecord
 import androidx.health.connect.client.records.NutritionRecord
 import androidx.health.connect.client.records.StepsRecord
@@ -485,6 +486,92 @@
     }
 
     @Test
+    fun aggregateRecordsGroupByPeriod_monthly() = runTest {
+        healthConnectClient.insertRecords(
+            listOf(
+                StepsRecord(
+                    count = 100,
+                    startTime = START_TIME - 40.days,
+                    startZoneOffset = ZONE_OFFSET,
+                    endTime = START_TIME - 40.days + 5.minutes,
+                    endZoneOffset = ZONE_OFFSET
+                ),
+                StepsRecord(
+                    count = 200,
+                    startTime = START_TIME - 40.days + 10.minutes,
+                    startZoneOffset = ZONE_OFFSET,
+                    endTime = START_TIME - 40.days + 30.minutes,
+                    endZoneOffset = ZONE_OFFSET
+                ),
+                StepsRecord(
+                    count = 50,
+                    startTime = START_TIME,
+                    startZoneOffset = ZONE_OFFSET,
+                    endTime = START_TIME + 10.minutes,
+                    endZoneOffset = ZONE_OFFSET
+                )
+            )
+        )
+
+        val queryStartTime = LocalDateTime.ofInstant(START_TIME - 40.days, ZONE_ID)
+        val queryEndTime = LocalDateTime.ofInstant(START_TIME + 2.days, ZONE_ID)
+
+        val aggregateResponse =
+            healthConnectClient.aggregateGroupByPeriod(
+                AggregateGroupByPeriodRequest(
+                    setOf(StepsRecord.COUNT_TOTAL),
+                    TimeRangeFilter.between(
+                        queryStartTime,
+                        queryEndTime,
+                    ),
+                    timeRangeSlicer = Period.ofMonths(1)
+                )
+            )
+
+        with(aggregateResponse) {
+            assertThat(this).hasSize(2)
+
+            assertThat(this[0].startTime).isEqualTo(queryStartTime)
+            assertThat(this[0].endTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[0].result[StepsRecord.COUNT_TOTAL]).isEqualTo(300)
+
+            assertThat(this[1].startTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[1].endTime).isEqualTo(queryEndTime)
+            assertThat(this[1].result[StepsRecord.COUNT_TOTAL]).isEqualTo(50)
+        }
+    }
+
+    @Test
+    fun aggregateRecordsGroupByPeriod_monthly_noData() = runTest {
+        val queryStartTime = LocalDateTime.ofInstant(START_TIME - 40.days, ZONE_ID)
+        val queryEndTime = LocalDateTime.ofInstant(START_TIME + 2.days, ZONE_ID)
+
+        val aggregateResponse =
+            healthConnectClient.aggregateGroupByPeriod(
+                AggregateGroupByPeriodRequest(
+                    setOf(StepsRecord.COUNT_TOTAL),
+                    TimeRangeFilter.between(
+                        queryStartTime,
+                        queryEndTime,
+                    ),
+                    timeRangeSlicer = Period.ofMonths(1)
+                )
+            )
+
+        with(aggregateResponse) {
+            assertThat(this).hasSize(2)
+
+            assertThat(this[0].startTime).isEqualTo(queryStartTime)
+            assertThat(this[0].endTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[0].result[StepsRecord.COUNT_TOTAL]).isNull()
+
+            assertThat(this[1].startTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[1].endTime).isEqualTo(queryEndTime)
+            assertThat(this[1].result[StepsRecord.COUNT_TOTAL]).isNull()
+        }
+    }
+
+    @Test
     fun getChangesToken() = runTest {
         val token =
             healthConnectClient.getChangesToken(
@@ -532,6 +619,87 @@
     }
 
     @Test
+    fun nutritionRecord_roundTrip_valuesEqual() = runTest {
+        val recordId =
+            healthConnectClient
+                .insertRecords(
+                    listOf(
+                        NutritionRecord(
+                            startTime = START_TIME,
+                            startZoneOffset = ZONE_OFFSET,
+                            endTime = START_TIME + 10.minutes,
+                            endZoneOffset = ZONE_OFFSET,
+                            calcium = Mass.grams(15.0),
+                            monounsaturatedFat = Mass.grams(50.0),
+                            energy = Energy.calories(300.0)
+                        )
+                    )
+                )
+                .recordIdsList[0]
+
+        val nutritionRecord = healthConnectClient.readRecord<NutritionRecord>(recordId).record
+
+        with(nutritionRecord) {
+            assertThat(calcium).isEqualTo(Mass.grams(15.0))
+            assertThat(monounsaturatedFat).isEqualTo(Mass.grams(50.0))
+            assertThat(energy).isEqualTo(Energy.calories(300.0))
+        }
+    }
+
+    @Test
+    fun nutritionRecord_roundTrip_zeroValues() = runTest {
+        val recordId =
+            healthConnectClient
+                .insertRecords(
+                    listOf(
+                        NutritionRecord(
+                            startTime = START_TIME,
+                            startZoneOffset = ZONE_OFFSET,
+                            endTime = START_TIME + 10.minutes,
+                            endZoneOffset = ZONE_OFFSET,
+                            calcium = Mass.grams(0.0),
+                            monounsaturatedFat = Mass.grams(0.0),
+                            energy = Energy.calories(0.0)
+                        )
+                    )
+                )
+                .recordIdsList[0]
+
+        val nutritionRecord = healthConnectClient.readRecord<NutritionRecord>(recordId).record
+
+        with(nutritionRecord) {
+            assertThat(calcium).isEqualTo(Mass.grams(0.0))
+            assertThat(monounsaturatedFat).isEqualTo(Mass.grams(0.0))
+            assertThat(energy).isEqualTo(Energy.calories(0.0))
+        }
+    }
+
+    @Test
+    fun nutritionRecord_roundTrip_nullValues() = runTest {
+        val recordId =
+            healthConnectClient
+                .insertRecords(
+                    listOf(
+                        NutritionRecord(
+                            startTime = START_TIME,
+                            startZoneOffset = ZONE_OFFSET,
+                            endTime = START_TIME + 10.minutes,
+                            endZoneOffset = ZONE_OFFSET,
+                        )
+                    )
+                )
+                .recordIdsList[0]
+
+        val nutritionRecord = healthConnectClient.readRecord<NutritionRecord>(recordId).record
+
+        with(nutritionRecord) {
+            assertThat(calcium).isNull()
+            assertThat(monounsaturatedFat).isNull()
+            assertThat(energy).isNull()
+        }
+    }
+
+    @Test
     fun getGrantedPermissions() = runTest {
         assertThat(healthConnectClient.permissionController.getGrantedPermissions())
             .containsExactlyElementsIn(allHealthPermissions)
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt
index 4dcd780..d2edf4b 100644
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt
+++ b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt
@@ -45,6 +45,7 @@
 import java.time.LocalDateTime
 import java.time.Month
 import java.time.Period
+import java.time.ZoneOffset
 import org.junit.Test
 import org.junit.runner.RunWith
 
@@ -202,15 +203,81 @@
         val sdkRequest =
             AggregateGroupByPeriodRequest(
                 setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN, HeartRateRecord.BPM_AVG),
-                TimeRangeFilter.between(Instant.ofEpochMilli(123L), Instant.ofEpochMilli(456L)),
+                TimeRangeFilter.between(
+                    LocalDateTime.parse("2023-09-19T08:30"),
+                    LocalDateTime.parse("2023-09-19T10:30")
+                ),
                 Period.ofDays(1),
                 setOf(DataOrigin("package1"), DataOrigin("package2"), DataOrigin("package3"))
             )
 
         with(sdkRequest.toPlatformRequest()) {
-            with(timeRangeFilter as TimeInstantRangeFilter) {
-                assertThat(startTime).isEqualTo(Instant.ofEpochMilli(123L))
-                assertThat(endTime).isEqualTo(Instant.ofEpochMilli(456L))
+            with(timeRangeFilter as LocalTimeRangeFilter) {
+                assertThat(startTime).isEqualTo(LocalDateTime.parse("2023-09-19T08:30"))
+                assertThat(endTime).isEqualTo(LocalDateTime.parse("2023-09-19T10:30"))
+            }
+            assertThat(aggregationTypes)
+                .containsExactly(
+                    PlatformHeartRateRecord.BPM_MAX,
+                    PlatformHeartRateRecord.BPM_MIN,
+                    PlatformHeartRateRecord.BPM_AVG
+                )
+            assertThat(dataOriginsFilters)
+                .containsExactly(
+                    PlatformDataOrigin.Builder().setPackageName("package1").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package2").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package3").build()
+                )
+        }
+    }
+
+    @Test
+    fun aggregateGroupByPeriodRequest_fromSdkToPlatform_instantTime() {
+        val sdkRequest =
+            AggregateGroupByPeriodRequest(
+                setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN, HeartRateRecord.BPM_AVG),
+                TimeRangeFilter.between(
+                    LocalDateTime.parse("2023-09-19T08:30").toInstant(ZoneOffset.UTC),
+                    LocalDateTime.parse("2023-09-19T10:30").toInstant(ZoneOffset.UTC)
+                ),
+                Period.ofDays(1),
+                setOf(DataOrigin("package1"), DataOrigin("package2"), DataOrigin("package3"))
+            )
+
+        with(sdkRequest.toPlatformRequest()) {
+            with(timeRangeFilter as LocalTimeRangeFilter) {
+                assertThat(startTime).isEqualTo(LocalDateTime.parse("2023-09-19T08:30"))
+                assertThat(endTime).isEqualTo(LocalDateTime.parse("2023-09-19T10:30"))
+            }
+            assertThat(aggregationTypes)
+                .containsExactly(
+                    PlatformHeartRateRecord.BPM_MAX,
+                    PlatformHeartRateRecord.BPM_MIN,
+                    PlatformHeartRateRecord.BPM_AVG
+                )
+            assertThat(dataOriginsFilters)
+                .containsExactly(
+                    PlatformDataOrigin.Builder().setPackageName("package1").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package2").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package3").build()
+                )
+        }
+    }
+
+    @Test
+    fun aggregateGroupByPeriodRequest_fromSdkToPlatform_noTimeSet() {
+        val sdkRequest =
+            AggregateGroupByPeriodRequest(
+                setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN, HeartRateRecord.BPM_AVG),
+                TimeRangeFilter.none(),
+                Period.ofDays(1),
+                setOf(DataOrigin("package1"), DataOrigin("package2"), DataOrigin("package3"))
+            )
+
+        with(sdkRequest.toPlatformRequest()) {
+            with(timeRangeFilter as LocalTimeRangeFilter) {
+                assertThat(startTime)
+                    .isEqualTo(LocalDateTime.ofInstant(Instant.EPOCH, ZoneOffset.UTC))
             }
             assertThat(aggregationTypes)
                 .containsExactly(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
index 4f74132..9bc35b3 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
@@ -20,7 +20,6 @@
 import android.content.pm.PackageInfo
 import android.content.pm.PackageManager
 import android.os.Build
-import android.os.RemoteException
 import androidx.annotation.ChecksSdkIntAtLeast
 import androidx.annotation.IntDef
 import androidx.annotation.RestrictTo
@@ -44,7 +43,6 @@
 import androidx.health.connect.client.response.ReadRecordsResponse
 import androidx.health.connect.client.time.TimeRangeFilter
 import androidx.health.platform.client.HealthDataService
-import java.io.IOException
 import kotlin.reflect.KClass
 
 @JvmDefaultWithCompatibility
@@ -61,9 +59,9 @@
      *
      * @param records List of records to insert
      * @return List of unique identifiers in the order of inserted records.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * For example, to insert basic data like step counts:
@@ -93,10 +91,10 @@
      * [records] is executed in a transaction - if one fails, none is inserted.
      *
      * @param records List of records to update
-     * @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
-     *   will result in IPC failure.
+     * @throws android.os.RemoteException For any IPC transportation failures. Update with invalid
+     * identifiers will result in IPC failure.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      */
     suspend fun updateRecords(records: List<Record>)
@@ -109,11 +107,11 @@
      * @param recordIdsList List of [androidx.health.connect.client.records.metadata.Metadata.id] of
      *   [Record] to delete
      * @param clientRecordIdsList List of client record IDs of [Record] to delete
-     * @throws RemoteException For any IPC transportation failures. Deleting by invalid identifiers
-     *   such as a non-existing identifier or deleting the same record multiple times will result in
-     *   IPC failure.
+     * @throws android.os.RemoteException For any IPC transportation failures. Deleting by invalid
+     * identifiers such as a non-existing identifier or deleting the same record multiple times will
+     * result in IPC failure.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example usage to delete written steps data by its unique identifier:
@@ -133,9 +131,9 @@
      *
      * @param recordType Which type of [Record] to delete, such as `Steps::class`
      * @param timeRangeFilter The [TimeRangeFilter] to delete from
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example usage to delete written steps data in a time range:
@@ -151,10 +149,10 @@
      * @param recordId [androidx.health.connect.client.records.metadata.Metadata.id] of [Record] to
      *   read
      * @return The [Record] data point.
-     * @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
-     *   will result in IPC failure.
+     * @throws android.os.RemoteException For any IPC transportation failures. Update with invalid
+     * identifiers will result in IPC failure.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      */
     suspend fun <T : Record> readRecord(
@@ -168,9 +166,9 @@
      * @param T the type of [Record]
      * @param request [ReadRecordsRequest] object specifying time range and other filters
      * @return a response containing a collection of [Record]s.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to read basic data like step counts:
@@ -186,9 +184,9 @@
      * @param request [AggregateRequest] object specifying [AggregateMetric]s to aggregate and other
      *   filters.
      * @return the [AggregationResult] that contains aggregated values.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to aggregate cumulative data like distance:
@@ -216,9 +214,9 @@
      *   aggregate and other filters.
      * @return a list of [AggregationResultGroupedByDuration]s, each contains aggregated values and
      *   start/end time of the row. The list is sorted by time in ascending order.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to retrieve cumulative step count for each minute within provided time range:
@@ -244,9 +242,9 @@
      *   aggregate and other filters.
      * @return a list of [AggregationResultGroupedByPeriod]s, each contains aggregated values and
      *   start/end time of the row. The list is sorted by time in ascending order.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to retrieve cumulative step count for each month within provided time range:
@@ -270,7 +268,7 @@
      *
      * @param request Includes interested types of record to observe changes and optional filters.
      * @return a changes-token
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
      * @throws IllegalStateException If service is not available.
      * @see getChanges
@@ -301,7 +299,7 @@
      * @param changesToken A Changes-Token that represents a specific point in time in Android
      *   Health Platform.
      * @return a [ChangesResponse] with changes since provided [changesToken].
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
      * @throws IllegalStateException If service is not available.
      * @see getChangesToken
@@ -320,13 +318,6 @@
             "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS"
 
         /**
-         * The minimum version code of the default provider APK that supports manage data intent
-         * action.
-         */
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        internal const val ACTION_MANAGE_DATA_MIN_SUPPORTED_VERSION_CODE = 82932
-
-        /**
          * Intent action to open Health Connect settings on this phone. Developers should use this
          * if they want to re-direct the user to Health Connect.
          */
@@ -337,6 +328,12 @@
                 "android.health.connect.action.HEALTH_HOME_SETTINGS"
             else "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS"
 
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        internal val ACTION_HEALTH_CONNECT_MANAGE_DATA =
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+                "android.health.connect.action.MANAGE_HEALTH_DATA"
+            else "androidx.health.ACTION_MANAGE_HEALTH_DATA"
+
         /**
          * The Health Connect SDK is unavailable on this device at the time. This can be due to
          * the device running a lower than required Android Version.
@@ -344,6 +341,7 @@
          * Apps should hide any integration points to Health Connect in this case.
          */
         const val SDK_UNAVAILABLE = 1
+
         /**
          * The Health Connect SDK APIs are currently unavailable, the provider is either not
          * installed or needs to be updated.
@@ -351,6 +349,7 @@
          * Apps may choose to redirect to package installers to find a suitable APK.
          */
         const val SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2
+
         /**
          * The Health Connect SDK APIs are available.
          *
@@ -363,11 +362,11 @@
         @RestrictTo(RestrictTo.Scope.LIBRARY)
         @IntDef(
             value =
-                [
-                    SDK_UNAVAILABLE,
-                    SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED,
-                    SDK_AVAILABLE,
-                ]
+            [
+                SDK_UNAVAILABLE,
+                SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED,
+                SDK_AVAILABLE,
+            ]
         )
         annotation class AvailabilityStatus
 
@@ -469,26 +468,30 @@
         }
 
         /**
-         * Intent action to open Health Connect data management screen on this phone. Developers
+         * Intent to open Health Connect data management screen on this phone. Developers
          * should use this if they want to re-direct the user to Health Connect data management.
          *
          * @param context the context
-         * @return Intent action to open Health Connect data management screen.
+         * @param providerPackageName optional alternative package provider to choose for backend
+         * implementation
+         * @return Intent to open Health Connect data management screen.
          */
+        @JvmOverloads
         @JvmStatic
-        fun getHealthConnectManageDataAction(context: Context): String {
-            val action = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
-                "android.health.connect.action.MANAGE_HEALTH_DATA"
-            } else if (isProviderAvailable(
-                    context = context,
-                    providerVersionCode = ACTION_MANAGE_DATA_MIN_SUPPORTED_VERSION_CODE
-                )
+        fun getHealthConnectManageDataIntent(
+            context: Context,
+            providerPackageName: String = DEFAULT_PROVIDER_PACKAGE_NAME,
+        ): Intent {
+            val pm = context.packageManager
+            val manageDataIntent = Intent(ACTION_HEALTH_CONNECT_MANAGE_DATA)
+
+            return if (isProviderAvailable(context, providerPackageName) &&
+                pm.resolveActivity(manageDataIntent, /* flags */ 0) != null
             ) {
-                "androidx.health.ACTION_MANAGE_HEALTH_DATA"
+                manageDataIntent
             } else {
-                ACTION_HEALTH_CONNECT_SETTINGS
+                Intent(ACTION_HEALTH_CONNECT_SETTINGS)
             }
-            return action
         }
 
         @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.P)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClientExt.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClientExt.kt
new file mode 100644
index 0000000..fad5135
--- /dev/null
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClientExt.kt
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2023 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.
+ */
+@file:JvmName("HealthConnectClientExt")
+
+package androidx.health.connect.client
+
+import android.os.RemoteException
+import androidx.health.connect.client.records.Record
+import androidx.health.connect.client.response.ReadRecordResponse
+import androidx.health.connect.client.time.TimeRangeFilter
+import java.io.IOException
+
+/**
+ * Deletes one or more [Record] by their identifiers. Deletion of multiple [Record] is executed
+ * in single transaction - if one fails, none is deleted.
+ *
+ * @param T Which type of [Record] to delete, such as `Steps`.
+ * @param recordIdsList List of [androidx.health.connect.client.records.metadata.Metadata.id] of
+ *   [Record] to delete
+ * @param clientRecordIdsList List of client record IDs of [Record] to delete
+ * @throws RemoteException For any IPC transportation failures. Deleting by invalid identifiers
+ *   such as a non-existing identifier or deleting the same record multiple times will result in
+ *   IPC failure.
+ * @throws SecurityException For requests with unpermitted access.
+ * @throws IOException For any disk I/O issues.
+ * @throws IllegalStateException If service is not available.
+ *
+ * @see HealthConnectClient.deleteRecords
+ *
+ * Example usage to delete written steps data by its unique identifier:
+ *
+ * @sample androidx.health.connect.client.samples.DeleteByUniqueIdentifier
+ */
+suspend inline fun <reified T : Record> HealthConnectClient.deleteRecords(
+    recordIdsList: List<String>,
+    clientRecordIdsList: List<String>,
+) {
+    deleteRecords(
+        recordType = T::class,
+        recordIdsList = recordIdsList,
+        clientRecordIdsList = clientRecordIdsList,
+    )
+}
+
+/**
+ * Deletes any [Record] of type [T] in the given [timeRangeFilter] (automatically
+ * filtered to [Record] belonging to the calling application). Deletion of multiple [Record] is
+ * executed in a transaction - if one fails, none is deleted.
+ *
+ * @param T Which type of [Record] to delete, such as `Steps`.
+ * @param timeRangeFilter The [TimeRangeFilter] to delete from
+ * @throws RemoteException For any IPC transportation failures.
+ * @throws SecurityException For requests with unpermitted access.
+ * @throws IOException For any disk I/O issues.
+ * @throws IllegalStateException If service is not available.
+ *
+ * @see HealthConnectClient.deleteRecords
+ *
+ * Example usage to delete written steps data in a time range:
+ *
+ * @sample androidx.health.connect.client.samples.DeleteByTimeRange
+ */
+suspend inline fun <reified T : Record> HealthConnectClient.deleteRecords(
+    timeRangeFilter: TimeRangeFilter,
+) {
+    deleteRecords(
+        recordType = T::class,
+        timeRangeFilter = timeRangeFilter,
+    )
+}
+
+/**
+ * Reads one [Record] point of type [T] and with the specified [recordId].
+ *
+ * @param T Which type of [Record] to read, such as `Steps`.
+ * @param recordId [androidx.health.connect.client.records.metadata.Metadata.id] of [Record] to
+ *   read
+ * @return The [Record] data point.
+ * @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
+ *   will result in IPC failure.
+ * @throws SecurityException For requests with unpermitted access.
+ * @throws IOException For any disk I/O issues.
+ * @throws IllegalStateException If service is not available.
+ *
+ * @see HealthConnectClient.readRecord
+ */
+suspend inline fun <reified T : Record> HealthConnectClient.readRecord(
+    recordId: String
+): ReadRecordResponse<T> =
+    readRecord(
+        recordType = T::class,
+        recordId = recordId,
+    )
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt
index 0bd6c2b..b533072 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt
@@ -47,19 +47,6 @@
      * @param metric an aggregate metric identifier.
      * @return whether given metric is set.
      */
-    @Deprecated(
-        message = "Please use contains(AggregateMetric)",
-        replaceWith = ReplaceWith("contains(metric)"),
-    )
-    fun hasMetric(metric: AggregateMetric<*>): Boolean = contains(metric)
-
-    /**
-     * Checks whether the aggregation result contains a metric or not. If there is no relevant
-     * record that contribute to requested metric, the metric will not be provided.
-     *
-     * @param metric an aggregate metric identifier.
-     * @return whether given metric is set.
-     */
     operator fun contains(metric: AggregateMetric<*>): Boolean =
         when (metric.converter) {
             is Converter.FromLong -> metric.metricKey in longValues
@@ -76,22 +63,6 @@
      *
      * @see contains
      */
-    @Deprecated(
-        message = "Please use get(AggregateMetric)",
-        replaceWith = ReplaceWith("get(metric)"),
-    )
-    fun <T : Any> getMetric(metric: AggregateMetric<T>): T? = get(metric)
-
-    /**
-     * Retrieves a metric with given metric identifier.
-     *
-     * If there are no relevant records contributing to the requested metric, the metric will not be
-     * provided.
-     *
-     * @return the value of the metric, or null if not set.
-     *
-     * @see contains
-     */
     operator fun <T : Any> get(metric: AggregateMetric<T>): T? =
         when (metric.converter) {
             is Converter.FromLong -> longValues[metric.metricKey]?.let(metric.converter)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
index ceb540b..9f5f592 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
@@ -63,16 +63,17 @@
 internal constructor(
     private val delegate: HealthDataAsyncClient,
     private val allPermissions: List<String> =
-        buildList() {
+        buildList {
             addAll(
                 HealthPermission.RECORD_TYPE_TO_PERMISSION.flatMap {
-                    listOf<String>(
+                    listOf(
                         HealthPermission.WRITE_PERMISSION_PREFIX + it.value,
                         HealthPermission.READ_PERMISSION_PREFIX + it.value
                     )
                 }
             )
             add(HealthPermission.PERMISSION_WRITE_EXERCISE_ROUTE)
+            add(HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND)
         },
 ) : HealthConnectClient, PermissionController {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
index 0a7a446..eac2033 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
@@ -25,7 +25,9 @@
 import android.health.connect.ReadRecordsRequestUsingIds
 import android.health.connect.RecordIdFilter
 import android.health.connect.changelog.ChangeLogsRequest
+import android.os.Build
 import android.os.RemoteException
+import android.os.ext.SdkExtensions
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
 import androidx.core.os.asOutcomeReceiver
@@ -36,6 +38,7 @@
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod
 import androidx.health.connect.client.changes.DeletionChange
 import androidx.health.connect.client.changes.UpsertionChange
+import androidx.health.connect.client.impl.platform.records.toPlatformLocalTimeRangeFilter
 import androidx.health.connect.client.impl.platform.records.toPlatformRecord
 import androidx.health.connect.client.impl.platform.records.toPlatformRecordClass
 import androidx.health.connect.client.impl.platform.records.toPlatformRequest
@@ -61,10 +64,7 @@
 import kotlinx.coroutines.asExecutor
 import kotlinx.coroutines.suspendCancellableCoroutine
 
-/**
- * Implements the [HealthConnectClient] with APIs in UpsideDownCake.
- *
- */
+/** Implements the [HealthConnectClient] with APIs in UpsideDownCake. */
 @RequiresApi(api = 34)
 class HealthConnectClientUpsideDownImpl : HealthConnectClient, PermissionController {
 
@@ -242,7 +242,33 @@
                     )
                 }
             }
-            .map { it.toSdkResponse(request.metrics) }
+            .mapIndexed { index, platformResponse ->
+                if (
+                    SdkExtensions.getExtensionVersion(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) >= 10 ||
+                        (request.timeRangeSlicer.months == 0 && request.timeRangeSlicer.years == 0)
+                ) {
+                    platformResponse.toSdkResponse(request.metrics)
+                } else {
+                    // Handle bug in the Platform for versions of module before SDK extensions 10
+                    val requestTimeRangeFilter =
+                        request.timeRangeFilter.toPlatformLocalTimeRangeFilter()
+                    val bucketStartTime =
+                        requestTimeRangeFilter.startTime!!.plus(
+                            request.timeRangeSlicer.multipliedBy(index)
+                        )
+                    val bucketEndTime = bucketStartTime.plus(request.timeRangeSlicer)
+                    platformResponse.toSdkResponse(
+                        metrics = request.metrics,
+                        bucketStartTime = bucketStartTime,
+                        bucketEndTime =
+                            if (requestTimeRangeFilter.endTime!!.isBefore(bucketEndTime)) {
+                                requestTimeRangeFilter.endTime!!
+                            } else {
+                                bucketEndTime
+                            }
+                    )
+                }
+            }
     }
 
     override suspend fun getChangesToken(request: ChangesTokenRequest): String {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
index ad43fd6..7d09ee9 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
@@ -294,7 +294,8 @@
         laps = laps.map { it.toSdkExerciseLap() }.sortedBy { it.startTime },
         segments = segments.map { it.toSdkExerciseSegment() }.sortedBy { it.startTime },
         metadata = metadata.toSdkMetadata(),
-        exerciseRouteResult = route?.let { ExerciseRouteResult.Data(it.toSdkExerciseRoute()) }
+        exerciseRouteResult =
+            route?.let { ExerciseRouteResult.Data(it.toSdkExerciseRoute()) }
                 ?: if (hasRoute()) ExerciseRouteResult.ConsentRequired()
                 else ExerciseRouteResult.NoData(),
     )
@@ -386,48 +387,48 @@
         name = mealName,
         mealType = mealType.toSdkMealType(),
         metadata = metadata.toSdkMetadata(),
-        biotin = biotin?.toSdkMass(),
-        caffeine = caffeine?.toSdkMass(),
-        calcium = calcium?.toSdkMass(),
-        energy = energy?.toSdkEnergy(),
-        energyFromFat = energyFromFat?.toSdkEnergy(),
-        chloride = chloride?.toSdkMass(),
-        cholesterol = cholesterol?.toSdkMass(),
-        chromium = chromium?.toSdkMass(),
-        copper = copper?.toSdkMass(),
-        dietaryFiber = dietaryFiber?.toSdkMass(),
-        folate = folate?.toSdkMass(),
-        folicAcid = folicAcid?.toSdkMass(),
-        iodine = iodine?.toSdkMass(),
-        iron = iron?.toSdkMass(),
-        magnesium = magnesium?.toSdkMass(),
-        manganese = manganese?.toSdkMass(),
-        molybdenum = molybdenum?.toSdkMass(),
-        monounsaturatedFat = monounsaturatedFat?.toSdkMass(),
-        niacin = niacin?.toSdkMass(),
-        pantothenicAcid = pantothenicAcid?.toSdkMass(),
-        phosphorus = phosphorus?.toSdkMass(),
-        polyunsaturatedFat = polyunsaturatedFat?.toSdkMass(),
-        potassium = potassium?.toSdkMass(),
-        protein = protein?.toSdkMass(),
-        riboflavin = riboflavin?.toSdkMass(),
-        saturatedFat = saturatedFat?.toSdkMass(),
-        selenium = selenium?.toSdkMass(),
-        sodium = sodium?.toSdkMass(),
-        sugar = sugar?.toSdkMass(),
-        thiamin = thiamin?.toSdkMass(),
-        totalCarbohydrate = totalCarbohydrate?.toSdkMass(),
-        totalFat = totalFat?.toSdkMass(),
-        transFat = transFat?.toSdkMass(),
-        unsaturatedFat = unsaturatedFat?.toSdkMass(),
-        vitaminA = vitaminA?.toSdkMass(),
-        vitaminB12 = vitaminB12?.toSdkMass(),
-        vitaminB6 = vitaminB6?.toSdkMass(),
-        vitaminC = vitaminC?.toSdkMass(),
-        vitaminD = vitaminD?.toSdkMass(),
-        vitaminE = vitaminE?.toSdkMass(),
-        vitaminK = vitaminK?.toSdkMass(),
-        zinc = zinc?.toSdkMass()
+        biotin = biotin?.toNonDefaultSdkMass(),
+        caffeine = caffeine?.toNonDefaultSdkMass(),
+        calcium = calcium?.toNonDefaultSdkMass(),
+        energy = energy?.toNonDefaultSdkEnergy(),
+        energyFromFat = energyFromFat?.toNonDefaultSdkEnergy(),
+        chloride = chloride?.toNonDefaultSdkMass(),
+        cholesterol = cholesterol?.toNonDefaultSdkMass(),
+        chromium = chromium?.toNonDefaultSdkMass(),
+        copper = copper?.toNonDefaultSdkMass(),
+        dietaryFiber = dietaryFiber?.toNonDefaultSdkMass(),
+        folate = folate?.toNonDefaultSdkMass(),
+        folicAcid = folicAcid?.toNonDefaultSdkMass(),
+        iodine = iodine?.toNonDefaultSdkMass(),
+        iron = iron?.toNonDefaultSdkMass(),
+        magnesium = magnesium?.toNonDefaultSdkMass(),
+        manganese = manganese?.toNonDefaultSdkMass(),
+        molybdenum = molybdenum?.toNonDefaultSdkMass(),
+        monounsaturatedFat = monounsaturatedFat?.toNonDefaultSdkMass(),
+        niacin = niacin?.toNonDefaultSdkMass(),
+        pantothenicAcid = pantothenicAcid?.toNonDefaultSdkMass(),
+        phosphorus = phosphorus?.toNonDefaultSdkMass(),
+        polyunsaturatedFat = polyunsaturatedFat?.toNonDefaultSdkMass(),
+        potassium = potassium?.toNonDefaultSdkMass(),
+        protein = protein?.toNonDefaultSdkMass(),
+        riboflavin = riboflavin?.toNonDefaultSdkMass(),
+        saturatedFat = saturatedFat?.toNonDefaultSdkMass(),
+        selenium = selenium?.toNonDefaultSdkMass(),
+        sodium = sodium?.toNonDefaultSdkMass(),
+        sugar = sugar?.toNonDefaultSdkMass(),
+        thiamin = thiamin?.toNonDefaultSdkMass(),
+        totalCarbohydrate = totalCarbohydrate?.toNonDefaultSdkMass(),
+        totalFat = totalFat?.toNonDefaultSdkMass(),
+        transFat = transFat?.toNonDefaultSdkMass(),
+        unsaturatedFat = unsaturatedFat?.toNonDefaultSdkMass(),
+        vitaminA = vitaminA?.toNonDefaultSdkMass(),
+        vitaminB12 = vitaminB12?.toNonDefaultSdkMass(),
+        vitaminB6 = vitaminB6?.toNonDefaultSdkMass(),
+        vitaminC = vitaminC?.toNonDefaultSdkMass(),
+        vitaminD = vitaminD?.toNonDefaultSdkMass(),
+        vitaminE = vitaminE?.toNonDefaultSdkMass(),
+        vitaminK = vitaminK?.toNonDefaultSdkMass(),
+        zinc = zinc?.toNonDefaultSdkMass()
     )
 
 private fun PlatformOvulationTestRecord.toSdkOvulationTestRecord() =
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt
index cce4e13..34699be 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt
@@ -38,6 +38,8 @@
 import androidx.health.connect.client.request.ReadRecordsRequest
 import androidx.health.connect.client.time.TimeRangeFilter
 import java.time.Instant
+import java.time.LocalDateTime
+import java.time.ZoneOffset
 
 fun ReadRecordsRequest<out Record>.toPlatformRequest():
     ReadRecordsRequestUsingFilters<out PlatformRecord> {
@@ -66,6 +68,26 @@
     }
 }
 
+fun TimeRangeFilter.toPlatformLocalTimeRangeFilter(): LocalTimeRangeFilter {
+    return when {
+        localStartTime != null || localEndTime != null ->
+            LocalTimeRangeFilter.Builder()
+                .setStartTime(localStartTime)
+                .setEndTime(localEndTime)
+                .build()
+        startTime != null || endTime != null ->
+            LocalTimeRangeFilter.Builder()
+                .setStartTime(startTime?.toLocalDateTime())
+                .setEndTime(endTime?.toLocalDateTime())
+                .build()
+        else ->
+            // Platform doesn't allow both startTime and endTime to be null
+            LocalTimeRangeFilter.Builder().setStartTime(Instant.EPOCH.toLocalDateTime()).build()
+    }
+}
+
+private fun Instant.toLocalDateTime() = LocalDateTime.ofInstant(this, ZoneOffset.UTC)
+
 fun ChangesTokenRequest.toPlatformRequest(): ChangeLogTokenRequest {
     return ChangeLogTokenRequest.Builder()
         .apply {
@@ -94,7 +116,10 @@
 }
 
 fun AggregateGroupByPeriodRequest.toPlatformRequest(): AggregateRecordsRequest<Any> {
-    return AggregateRecordsRequest.Builder<Any>(timeRangeFilter.toPlatformTimeRangeFilter())
+    return AggregateRecordsRequest.Builder<Any>(
+            timeRangeFilter
+                .toPlatformLocalTimeRangeFilter() /* Platform only takes LocalTimeRange filter in aggregate by period request. */
+        )
         .apply {
             dataOriginFilter.forEach { addDataOriginsFilter(it.toPlatformDataOrigin()) }
             metrics.forEach { addAggregationType(it.toAggregationType()) }
@@ -106,12 +131,12 @@
 fun AggregateMetric<Any>.toAggregationType(): AggregationType<Any> {
     return DOUBLE_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
         ?: DURATION_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: ENERGY_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: LENGTH_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: LONG_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: GRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: KILOGRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: POWER_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: VOLUME_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: throw IllegalArgumentException("Unsupported aggregation type $metricKey")
+        ?: ENERGY_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: LENGTH_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: LONG_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: GRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: KILOGRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: POWER_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: VOLUME_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: throw IllegalArgumentException("Unsupported aggregation type $metricKey")
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt
index d07820f..30e2279 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt
@@ -34,6 +34,7 @@
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod
 import androidx.health.connect.client.units.Energy
 import androidx.health.connect.client.units.Mass
+import java.time.LocalDateTime
 import java.time.ZoneOffset
 
 fun AggregateRecordsResponse<Any>.toSdkResponse(metrics: Set<AggregateMetric<Any>>) =
@@ -57,6 +58,17 @@
 fun AggregateRecordsGroupedByPeriodResponse<Any>.toSdkResponse(metrics: Set<AggregateMetric<Any>>) =
     AggregationResultGroupedByPeriod(buildAggregationResult(metrics, ::get), startTime, endTime)
 
+fun AggregateRecordsGroupedByPeriodResponse<Any>.toSdkResponse(
+    metrics: Set<AggregateMetric<Any>>,
+    bucketStartTime: LocalDateTime,
+    bucketEndTime: LocalDateTime
+) =
+    AggregationResultGroupedByPeriod(
+        buildAggregationResult(metrics, ::get),
+        bucketStartTime,
+        bucketEndTime
+    )
+
 @VisibleForTesting
 internal fun buildAggregationResult(
     metrics: Set<AggregateMetric<Any>>,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt
index c9a23f9..b6b8bd8 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt
@@ -77,6 +77,9 @@
     return BloodGlucose.millimolesPerLiter(inMillimolesPerLiter)
 }
 
+internal fun PlatformEnergy.toNonDefaultSdkEnergy() =
+    takeIf { inCalories != Double.MIN_VALUE }?.toSdkEnergy()
+
 internal fun PlatformEnergy.toSdkEnergy(): Energy {
     return Energy.calories(inCalories)
 }
@@ -85,6 +88,9 @@
     return Length.meters(inMeters)
 }
 
+internal fun PlatformMass.toNonDefaultSdkMass() =
+    takeIf { inGrams != Double.MIN_VALUE }?.toSdkMass()
+
 internal fun PlatformMass.toSdkMass(): Mass {
     return Mass.grams(inGrams)
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
index 6c665b0..51c1863 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
@@ -146,6 +146,19 @@
          */
         const val PERMISSION_WRITE_EXERCISE_ROUTE = PERMISSION_PREFIX + "WRITE_EXERCISE_ROUTE"
 
+        /**
+         * A permission to read data in background.
+         *
+         * An attempt to read data in background without this permission may result
+         * in an error.
+         *
+         * @sample androidx.health.connect.client.samples.RequestBackgroundReadPermission
+         * @sample androidx.health.connect.client.samples.ReadRecordsInBackground
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY) // Hidden for now
+        const val PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND =
+            PERMISSION_PREFIX + "READ_HEALTH_DATA_IN_BACKGROUND"
+
         // Read permissions for ACTIVITY.
         internal const val READ_ACTIVE_CALORIES_BURNED =
             PERMISSION_PREFIX + "READ_ACTIVE_CALORIES_BURNED"
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
index e328742..9da5e4a 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
@@ -21,6 +21,27 @@
 import kotlin.reflect.KClass
 
 /**
+ * A convenience factory function for [ReadRecordsRequest] with `reified` record type [T].
+ *
+ * @see [ReadRecordsRequest] for more information.
+ */
+inline fun <reified T : Record> ReadRecordsRequest(
+    timeRangeFilter: TimeRangeFilter,
+    dataOriginFilter: Set<DataOrigin> = emptySet(),
+    ascendingOrder: Boolean = true,
+    pageSize: Int = 1000,
+    pageToken: String? = null,
+): ReadRecordsRequest<T> =
+    ReadRecordsRequest(
+        recordType = T::class,
+        timeRangeFilter = timeRangeFilter,
+        dataOriginFilter = dataOriginFilter,
+        ascendingOrder = ascendingOrder,
+        pageSize = pageSize,
+        pageToken = pageToken,
+    )
+
+/**
  * Request object to read [Record]s in Android Health Platform determined by time range and other
  * filters.
  *
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt
index 81036fd..8ad0c67 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt
@@ -123,11 +123,11 @@
         installService(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
 
         assertThat(
-                HealthConnectClient.getSdkStatus(
-                    context,
-                    HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
-                )
+            HealthConnectClient.getSdkStatus(
+                context,
+                HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
             )
+        )
             .isEqualTo(HealthConnectClient.SDK_AVAILABLE)
         assertThat(HealthConnectClient.getOrCreate(context))
             .isInstanceOf(HealthConnectClientImpl::class.java)
@@ -146,11 +146,11 @@
         installService(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
 
         assertThat(
-                HealthConnectClient.getSdkStatusLegacy(
-                    context,
-                    HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
-                )
+            HealthConnectClient.getSdkStatusLegacy(
+                context,
+                HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
             )
+        )
             .isEqualTo(HealthConnectClient.SDK_AVAILABLE)
         assertThat(HealthConnectClient.getOrCreateLegacy(context))
             .isInstanceOf(HealthConnectClientImpl::class.java)
@@ -180,15 +180,23 @@
 
     @Test
     @Config(sdk = [Build.VERSION_CODES.P])
+    fun getHealthConnectManageDataAction_noProvider_returnsDefaultIntent() {
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
+            HealthConnectClient.ACTION_HEALTH_CONNECT_SETTINGS
+        )
+    }
+
+    @Test
+    @Config(sdk = [Build.VERSION_CODES.P])
     fun getHealthConnectManageDataAction_unsupportedClient_returnsDefaultIntent() {
         installPackage(
             context,
             HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME,
-            versionCode = HealthConnectClient.DEFAULT_PROVIDER_MIN_VERSION_CODE,
+            versionCode = HealthConnectClient.DEFAULT_PROVIDER_MIN_VERSION_CODE - 1,
             enabled = true
         )
 
-        assertThat(HealthConnectClient.getHealthConnectManageDataAction(context)).isEqualTo(
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
             HealthConnectClient.ACTION_HEALTH_CONNECT_SETTINGS
         )
     }
@@ -199,12 +207,13 @@
         installPackage(
             context,
             HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME,
-            versionCode = HealthConnectClient.ACTION_MANAGE_DATA_MIN_SUPPORTED_VERSION_CODE,
+            versionCode = HealthConnectClient.DEFAULT_PROVIDER_MIN_VERSION_CODE,
             enabled = true
         )
+        installDataManagementHandler(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
         installService(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
 
-        assertThat(HealthConnectClient.getHealthConnectManageDataAction(context)).isEqualTo(
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
             "androidx.health.ACTION_MANAGE_HEALTH_DATA"
         )
     }
@@ -212,7 +221,7 @@
     @Test
     @Config(minSdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     fun getHealthConnectManageDataAction_platformSupported() {
-        assertThat(HealthConnectClient.getHealthConnectManageDataAction(context)).isEqualTo(
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
             "android.health.connect.action.MANAGE_HEALTH_DATA"
         )
     }
@@ -233,6 +242,16 @@
         Shadows.shadowOf(packageManager).installPackage(packageInfo)
     }
 
+    private fun installDataManagementHandler(context: Context, packageName: String) {
+        val packageManager = context.packageManager
+        val componentName =
+            ComponentName(packageName, HealthConnectClient.ACTION_HEALTH_CONNECT_MANAGE_DATA)
+        val intentFilter = IntentFilter(HealthConnectClient.ACTION_HEALTH_CONNECT_MANAGE_DATA)
+        val shadowPackageManager = Shadows.shadowOf(packageManager)
+        shadowPackageManager.addActivityIfNotPresent(componentName)
+        shadowPackageManager.addIntentFilterForActivity(componentName, intentFilter)
+    }
+
     private fun installService(context: Context, packageName: String) {
         val packageManager = context.packageManager
         val serviceIntentFilter =
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
index bc640cd..7379cf4 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
@@ -227,6 +227,22 @@
     }
 
     @Test
+    fun getGrantedPermissions_backgroundRead() = runTest {
+        fakeAhpServiceStub.addGrantedPermission(
+            androidx.health.platform.client.permission.Permission(
+                PermissionProto.Permission.newBuilder()
+                    .setPermission(HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND)
+                    .build()
+            )
+        )
+
+        val response = testBlocking { healthConnectClient.getGrantedPermissions() }
+
+        assertThat(response)
+            .containsExactly(HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND)
+    }
+
+    @Test
     fun insertRecords_steps() = runTest {
         fakeAhpServiceStub.insertDataResponse = InsertDataResponse(listOf("0"))
         val response = testBlocking {
diff --git a/hilt/hilt-common/api/1.1.0-beta01.txt b/hilt/hilt-common/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..5b7216f
--- /dev/null
+++ b/hilt/hilt-common/api/1.1.0-beta01.txt
@@ -0,0 +1,8 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+  @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface HiltWorker {
+  }
+
+}
+
diff --git a/hilt/hilt-common/api/restricted_1.1.0-beta01.txt b/hilt/hilt-common/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..5b7216f
--- /dev/null
+++ b/hilt/hilt-common/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,8 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+  @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface HiltWorker {
+  }
+
+}
+
diff --git a/hilt/hilt-compiler/build.gradle b/hilt/hilt-compiler/build.gradle
index aec41ba..39dfec8 100644
--- a/hilt/hilt-compiler/build.gradle
+++ b/hilt/hilt-compiler/build.gradle
@@ -32,7 +32,7 @@
     kapt(libs.autoService)
     compileOnly(libs.gradleIncapHelper)
     kapt(libs.gradleIncapHelperProcessor)
-    implementation(project(":room:room-compiler-processing"))
+    implementation("androidx.room:room-compiler-processing:2.6.0-beta01")
     implementation(libs.javapoet)
     implementation(libs.kspApi)
 
diff --git a/hilt/hilt-navigation-compose/api/1.1.0-beta01.txt b/hilt/hilt-navigation-compose/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..99cdd72
--- /dev/null
+++ b/hilt/hilt-navigation-compose/api/1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.compose {
+
+  public final class HiltViewModelKt {
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM hiltViewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key);
+  }
+
+}
+
diff --git a/hilt/hilt-navigation-compose/api/res-1.1.0-beta01.txt b/hilt/hilt-navigation-compose/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-navigation-compose/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-navigation-compose/api/restricted_1.1.0-beta01.txt b/hilt/hilt-navigation-compose/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..40d2a82
--- /dev/null
+++ b/hilt/hilt-navigation-compose/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.compose {
+
+  public final class HiltViewModelKt {
+    method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.lifecycle.ViewModelProvider.Factory? createHiltViewModelFactory(androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner);
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM hiltViewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key);
+  }
+
+}
+
diff --git a/hilt/hilt-navigation-fragment/api/1.1.0-beta01.txt b/hilt/hilt-navigation-fragment/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..7cbc428
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.fragment {
+
+  public final class HiltNavGraphViewModelLazyKt {
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
+  }
+
+}
+
diff --git a/hilt/hilt-navigation-fragment/api/res-1.1.0-beta01.txt b/hilt/hilt-navigation-fragment/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-navigation-fragment/api/restricted_1.1.0-beta01.txt b/hilt/hilt-navigation-fragment/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..7cbc428
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.fragment {
+
+  public final class HiltNavGraphViewModelLazyKt {
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
+  }
+
+}
+
diff --git a/hilt/hilt-navigation/api/1.1.0-beta01.txt b/hilt/hilt-navigation/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..551dabc
--- /dev/null
+++ b/hilt/hilt-navigation/api/1.1.0-beta01.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.hilt.navigation {
+
+  public final class HiltViewModelFactory {
+    method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.lifecycle.ViewModelProvider.Factory delegateFactory);
+    method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
+  }
+
+}
+
diff --git a/hilt/hilt-navigation/api/res-1.1.0-beta01.txt b/hilt/hilt-navigation/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-navigation/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-navigation/api/restricted_1.1.0-beta01.txt b/hilt/hilt-navigation/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..551dabc
--- /dev/null
+++ b/hilt/hilt-navigation/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.hilt.navigation {
+
+  public final class HiltViewModelFactory {
+    method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.lifecycle.ViewModelProvider.Factory delegateFactory);
+    method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
+  }
+
+}
+
diff --git a/hilt/hilt-work/api/1.1.0-beta01.txt b/hilt/hilt-work/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..09dc5535
--- /dev/null
+++ b/hilt/hilt-work/api/1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+  public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+    method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+}
+
diff --git a/hilt/hilt-work/api/res-1.1.0-beta01.txt b/hilt/hilt-work/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-work/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-work/api/restricted_1.1.0-beta01.txt b/hilt/hilt-work/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..db6037f
--- /dev/null
+++ b/hilt/hilt-work/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+  public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+    method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WorkerAssistedFactory<T extends androidx.work.ListenableWorker> {
+    method public T create(android.content.Context, androidx.work.WorkerParameters);
+  }
+
+}
+
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt
index 520e21d7..7eaecb6 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt
@@ -17,8 +17,6 @@
 package androidx.inspection.gradle
 
 import com.android.build.api.variant.Variant
-import java.io.File
-import java.util.Locale
 import org.gradle.api.Project
 import org.gradle.api.file.Directory
 import org.gradle.api.provider.Provider
@@ -32,18 +30,3 @@
 ): Provider<Directory> {
     return layout.buildDirectory.dir("androidx_inspection/$baseName/${variant.name}")
 }
-
-// Functions below will be removed once registerGenerateProguardDetectionFileTask is migrated
-// that needs newly added function "addGeneratedSourceDirectory"
-@Suppress("DEPRECATION") // BaseVariant
-internal fun com.android.build.gradle.api.BaseVariant.taskName(baseName: String) =
-    "$baseName${name.capitalize(Locale.ENGLISH)}"
-
-@Suppress("DEPRECATION") // BaseVariant
-internal fun Project.taskWorkingDir(
-    variant: com.android.build.gradle.api.BaseVariant,
-    baseName: String
-): File {
-    val inspectionDir = File(project.buildDir, "androidx_inspection")
-    return File(File(inspectionDir, baseName), variant.dirName)
-}
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
index aa6d722..ce4758a8 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
@@ -16,6 +16,7 @@
 
 package androidx.inspection.gradle
 
+import com.android.build.api.variant.Variant
 import java.io.File
 import org.gradle.api.DefaultTask
 import org.gradle.api.GradleException
@@ -30,7 +31,6 @@
  * Task purposely empty, unused class that would be removed by proguard. See javadoc below for more
  * information.
  */
-@Suppress("UnstableApiUsage")
 @DisableCachingByDefault(because = "Simply generates a small file and doesn't benefit from caching")
 abstract class GenerateProguardDetectionFileTask : DefaultTask() {
 
@@ -43,6 +43,7 @@
     @get:OutputDirectory
     abstract val outputDir: DirectoryProperty
 
+    @Suppress("LoggingStringTemplateAsArgument")
     @TaskAction
     fun generateProguardDetectionFile() {
         val packageName = generatePackageName(mavenGroup.get(), mavenArtifactId.get())
@@ -56,7 +57,7 @@
 
         val text = """
             package $packageName;
-            
+
             /**
              * Purposely empty, unused class that would be removed by proguard.
              *
@@ -73,11 +74,7 @@
     }
 }
 
-@ExperimentalStdlibApi
-@Suppress("DEPRECATION") // BaseVariant
-fun Project.registerGenerateProguardDetectionFileTask(
-    variant: com.android.build.gradle.api.BaseVariant
-) {
+fun Project.registerGenerateProguardDetectionFileTask(variant: Variant) {
     val outputDir = taskWorkingDir(variant, "generateProguardDetection")
     val taskName = variant.taskName("generateProguardDetection")
     val mavenGroup = project.group as? String
@@ -88,7 +85,7 @@
         it.mavenGroup.set(mavenGroup)
         it.mavenArtifactId.set(mavenArtifactId)
     }
-    variant.registerJavaGeneratingTask(task, outputDir)
+    variant.sources.java?.addGeneratedSourceDirectory(task) { it.outputDir }
 }
 
 /**
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
index 79d870d..d77b646 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
@@ -16,6 +16,7 @@
 
 package androidx.inspection.gradle
 
+import com.android.build.api.artifact.SingleArtifact
 import com.android.build.api.variant.AndroidComponentsExtension
 import com.android.build.api.variant.Variant
 import com.android.build.gradle.LibraryExtension
@@ -23,6 +24,12 @@
 import com.google.protobuf.gradle.ProtobufExtension
 import com.google.protobuf.gradle.ProtobufPlugin
 import java.io.File
+import java.nio.file.Files
+import java.nio.file.attribute.FileTime
+import org.apache.tools.zip.ZipEntry
+import org.apache.tools.zip.ZipFile
+import org.apache.tools.zip.ZipOutputStream
+import org.gradle.api.DefaultTask
 import org.gradle.api.GradleException
 import org.gradle.api.Plugin
 import org.gradle.api.Project
@@ -31,10 +38,20 @@
 import org.gradle.api.artifacts.VersionCatalogsExtension
 import org.gradle.api.artifacts.type.ArtifactTypeDefinition
 import org.gradle.api.attributes.Attribute
+import org.gradle.api.file.FileCollection
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.PathSensitive
+import org.gradle.api.tasks.PathSensitivity
 import org.gradle.api.tasks.StopExecutionException
+import org.gradle.api.tasks.TaskAction
 import org.gradle.kotlin.dsl.apply
 import org.gradle.kotlin.dsl.create
 import org.gradle.kotlin.dsl.dependencies
+import org.gradle.kotlin.dsl.register
 
 /**
  * A plugin which, when present, ensures that intermediate inspector
@@ -185,25 +202,31 @@
     libraryProject.dependencies {
         add(consumeInspector.name, inspectorProject)
     }
-    val consumeInspectorFiles = libraryProject.files(consumeInspector)
 
+    val consumeInspectorFiles = libraryProject.files(consumeInspector)
     generateProguardDetectionFile(libraryProject)
-    val libExtension = libraryProject.extensions.getByType(LibraryExtension::class.java)
-    libExtension.libraryVariants.all { variant ->
-        variant.packageLibraryProvider.configure { zip ->
-            zip.from(consumeInspectorFiles)
-            zip.rename {
-                if (it == consumeInspectorFiles.asFileTree.singleFile.name) {
-                    "inspector.jar"
-                } else it
-            }
-        }
+
+    val componentsExtension =
+        libraryProject.extensions.findByType(AndroidComponentsExtension::class.java)
+            ?: throw GradleException("android plugin must be used")
+    componentsExtension.onVariants { variant: Variant ->
+        val updateArtifact = libraryProject.tasks
+            .register<InspectionTransformerTask>("${variant.name}UpdateArtifact")
+        updateArtifact.configure { it.inspectorJar = consumeInspectorFiles }
+
+        variant.artifacts.use(updateArtifact)
+            .wiredWithFiles(
+                InspectionTransformerTask::aarFile,
+                InspectionTransformerTask::updatedAarFile
+            )
+            .toTransform(SingleArtifact.AAR)
     }
 
     libraryProject.configurations.create(IMPORT_INSPECTOR_DEPENDENCIES) {
         it.setupReleaseAttribute()
     }
-    libraryProject.dependencies.add(IMPORT_INSPECTOR_DEPENDENCIES,
+    libraryProject.dependencies.add(
+        IMPORT_INSPECTOR_DEPENDENCIES,
         libraryProject.dependencies.project(
             mapOf(
                 "path" to inspectorProjectPath,
@@ -256,8 +279,10 @@
 
 @ExperimentalStdlibApi
 private fun generateProguardDetectionFile(libraryProject: Project) {
-    val libExtension = libraryProject.extensions.getByType(LibraryExtension::class.java)
-    libExtension.libraryVariants.all { variant ->
+    val componentsExtension =
+        libraryProject.extensions.findByType(AndroidComponentsExtension::class.java)
+            ?: throw GradleException("android plugin must be used")
+    componentsExtension.onVariants { variant ->
         libraryProject.registerGenerateProguardDetectionFileTask(variant)
     }
 }
@@ -272,3 +297,75 @@
      */
     var name: String? = null
 }
+
+/**
+ * This task adds inspector.jar compiled from the corresponding inspection project to
+ * the aar.
+ */
+@Suppress("SyntheticAccessor")
+@CacheableTask
+abstract class InspectionTransformerTask : DefaultTask() {
+    @get:InputFile
+    @get:PathSensitive(PathSensitivity.RELATIVE)
+    abstract val aarFile: RegularFileProperty
+
+    @get:OutputFile
+    abstract val updatedAarFile: RegularFileProperty
+
+    @get:InputFiles
+    @get:PathSensitive(PathSensitivity.RELATIVE)
+    abstract var inspectorJar: FileCollection
+
+    @TaskAction
+    fun taskAction() {
+        val aar = aarFile.get().asFile
+        val updatedAar = updatedAarFile.get().asFile
+        val tempDir = Files.createTempDirectory("${name}Unzip").toFile()
+        tempDir.deleteOnExit()
+        ZipFile(aar).use { aarFile -> aarFile.unzipTo(tempDir) }
+        ZipOutputStream(updatedAar.outputStream()).use { stream ->
+            tempDir.listFiles()?.forEach { file -> stream.addFileRecursive(null, file) }
+            stream.addFileRecursive(null, inspectorJar.singleFile, "inspector.jar")
+        }
+        tempDir.deleteRecursively()
+    }
+}
+
+private fun ZipFile.unzipTo(tempDir: File) {
+    entries.iterator().forEach { entry ->
+        if (entry.isDirectory) {
+            File(tempDir, entry.name).mkdirs()
+        } else {
+            val file = File(tempDir, entry.name)
+            file.parentFile.mkdirs()
+            getInputStream(entry).use { stream -> file.writeBytes(stream.readBytes()) }
+        }
+    }
+}
+
+private fun ZipOutputStream.addFileRecursive(
+    parentPath: String?,
+    file: File,
+    nameOverride: String? = null
+) {
+    val name = nameOverride ?: file.name
+    val entryPath = if (parentPath != null) "$parentPath/$name" else name
+    val entry = ZipEntry(file, entryPath)
+
+    // Reset creation time of entry to make it deterministic.
+    entry.time = 0
+    entry.creationTime = FileTime.fromMillis(0)
+
+    if (file.isFile) {
+        putNextEntry(entry)
+        file.inputStream().use { stream -> stream.copyTo(this) }
+        closeEntry()
+    } else if (file.isDirectory) {
+        val listFiles = file.listFiles()
+        if (!listFiles.isNullOrEmpty()) {
+            putNextEntry(entry)
+            closeEntry()
+            listFiles.forEach { containedFile -> addFileRecursive(entryPath, containedFile) }
+        }
+    }
+}
diff --git a/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt b/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
index 00b6f06..3404fae 100644
--- a/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
+++ b/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
@@ -17,15 +17,14 @@
 package androidx.inspection.gradle
 
 import androidx.testutils.gradle.ProjectSetupRule
-import java.io.BufferedReader
 import java.io.File
-import java.io.InputStreamReader
 import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
 import kotlin.test.assertTrue
+import org.apache.tools.zip.ZipFile
 import org.gradle.testkit.runner.GradleRunner
 import org.gradle.testkit.runner.TaskOutcome
 import org.junit.Before
-import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -37,33 +36,33 @@
     val projectSetup = ProjectSetupRule()
 
     lateinit var gradleRunner: GradleRunner
-    lateinit var dxExecutable: String
 
     @Before
     fun setUp() {
-        val sdkDir = projectSetup.getSdkDirectory()
-        dxExecutable = File(sdkDir, "build-tools/${projectSetup.props.buildToolsVersion}/dx")
-            .absolutePath
-        File("src/test/test-data", "app-project").copyRecursively(projectSetup.rootDir)
-
+        File("src/test/test-data").copyRecursively(projectSetup.rootDir)
         gradleRunner = GradleRunner.create()
             .withProjectDir(projectSetup.rootDir)
             .withPluginClasspath()
     }
 
-    @Ignore // b/193918205
     @Test
-    fun applyInspection() {
-        File(projectSetup.rootDir, "settings.gradle")
-            .writeText("rootProject.name = \"test-inspector\"")
-        projectSetup.writeDefaultBuildGradle(
-            prefix = """
+    fun testInspectorJar() {
+        with(projectSetup) {
+            val prefix =
+                "import static androidx.inspection.gradle.InspectionPluginKt.packageInspector\n\n" +
+                "plugins { id(\"com.android.library\") }\n"
+            File(rootDir, "lib/build.gradle")
+                .writeText("$prefix\n\n" +
+                    "$repositories\n\n$androidProject\n${namespace("foox.lib")}\n" +
+                    "packageInspector(project, \":lib-inspector\")"
+                )
+            val inspectorPlugins = """
                 plugins {
                     id("com.android.library")
                     id("androidx.inspection")
                 }
-            """.trimIndent(),
-            suffix = """
+            """.trimIndent()
+            val suffix = """
                 dependencies {
                     implementation("androidx.inspection:inspection:1.0.0")
                 }
@@ -72,32 +71,31 @@
                         targetSdkVersion 30
                     }
                 }
-            """
-        )
-        val output = gradleRunner.withArguments("dexInspectorRelease", "--stacktrace").build()
-        assertEquals(output.task(":dexInspectorRelease")!!.outcome, TaskOutcome.SUCCESS)
-        val artifact = File(
-            projectSetup.rootDir,
-            "build/androidx_inspection/dexedInspector/release/test-inspector.jar"
-        )
+            """.trimIndent()
+
+            File(rootDir, "lib-inspector/build.gradle")
+                .writeText(
+                    "$inspectorPlugins\n$repositories\n\n$androidProject\n" +
+                        "${namespace("foox.lib.inspector")}\n$suffix"
+                )
+        }
+
+        val task = ":lib:assembleRelease"
+        val output = gradleRunner.withArguments(task).build()
+        assertEquals(output.task(task)!!.outcome, TaskOutcome.SUCCESS)
+        val artifact = File(projectSetup.rootDir, "lib/build/outputs/aar/lib-release.aar")
         assertTrue { artifact.exists() }
-        assertDeclaredInDex(artifact, "Ltest/inspector/TestInspector;")
-        assertDeclaredInDex(artifact, "Ltest/inspector/TestInspectorProtocol;")
-        assertDeclaredInDex(artifact, "Ldeps/test/inspector/com/google/protobuf/ByteString;")
-    }
-
-    // rely that classes should have a constructor and it is declared in class itself
-    private fun assertDeclaredInDex(artifact: File, className: String) {
-        val exec = Runtime.getRuntime().exec(
-            arrayOf(dxExecutable, "--find-usages", artifact.absolutePath, className, "<init>")
-        )
-        exec.waitFor()
-        assertEquals(exec.exitValue(), 0)
-
-        assertTrue {
-            BufferedReader(InputStreamReader(exec.inputStream)).readLines().any {
-                it.contains("<init> method declared")
+        val inspectorJar = ZipFile(artifact).use { aarFile ->
+            aarFile.entries.toList().find {
+                it.name == "inspector.jar"
             }
         }
+        assertNotNull(inspectorJar)
     }
 }
+
+private fun namespace(name: String) = """
+    android {
+         namespace "$name"
+    }
+""".trimIndent()
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/AndroidManifest.xml
similarity index 92%
rename from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
rename to inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/AndroidManifest.xml
index 148c23e..f04d862 100644
--- a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
+++ b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/AndroidManifest.xml
@@ -14,6 +14,5 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.inspection.test.project">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 </manifest>
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/java/test/inspector/TestInspector.java b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/java/test/inspector/TestInspector.java
similarity index 100%
rename from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/java/test/inspector/TestInspector.java
rename to inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/java/test/inspector/TestInspector.java
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/proto/test_protocol.proto b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/proto/test_protocol.proto
similarity index 100%
rename from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/proto/test_protocol.proto
rename to inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/proto/test_protocol.proto
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml b/inspection/inspection-gradle-plugin/src/test/test-data/lib/src/main/AndroidManifest.xml
similarity index 92%
copy from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
copy to inspection/inspection-gradle-plugin/src/test/test-data/lib/src/main/AndroidManifest.xml
index 148c23e..f04d862 100644
--- a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
+++ b/inspection/inspection-gradle-plugin/src/test/test-data/lib/src/main/AndroidManifest.xml
@@ -14,6 +14,5 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.inspection.test.project">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 </manifest>
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/settings.gradle b/inspection/inspection-gradle-plugin/src/test/test-data/settings.gradle
new file mode 100644
index 0000000..94ec3be
--- /dev/null
+++ b/inspection/inspection-gradle-plugin/src/test/test-data/settings.gradle
@@ -0,0 +1,3 @@
+rootProject.name = "inspection-plugin-test"
+include "lib"
+include "lib-inspector"
\ No newline at end of file
diff --git a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
index 2235d47..84914ad 100644
--- a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
+++ b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
@@ -38,4 +38,5 @@
   void reportErrorWithFd(int errorType, in android.content.res.AssetFileDescriptor afd) = 3;
   const int JS_EVALUATION_ERROR = 0;
   const int MEMORY_LIMIT_EXCEEDED = 1;
+  const int FILE_DESCRIPTOR_IO_ERROR = 2;
 }
diff --git a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
index 78a0831..2c024c8 100644
--- a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
+++ b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
@@ -44,4 +44,5 @@
   const String EVALUATE_WITHOUT_TRANSACTION_LIMIT = "EVALUATE_WITHOUT_TRANSACTION_LIMIT";
   const String CONSOLE_MESSAGING = "CONSOLE_MESSAGING";
   const String ISOLATE_CLIENT = "ISOLATE_CLIENT";
+  const String EVALUATE_FROM_FD = "EVALUATE_FROM_FD";
 }
diff --git a/javascriptengine/javascriptengine/api/current.txt b/javascriptengine/javascriptengine/api/current.txt
index 77b4206c..19d2a86 100644
--- a/javascriptengine/javascriptengine/api/current.txt
+++ b/javascriptengine/javascriptengine/api/current.txt
@@ -52,6 +52,8 @@
   public final class JavaScriptIsolate implements java.lang.AutoCloseable {
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void clearConsoleCallback();
     method public void close();
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.content.res.AssetFileDescriptor);
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.os.ParcelFileDescriptor);
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public boolean provideNamedData(String, byte[]);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(androidx.javascriptengine.JavaScriptConsoleCallback);
@@ -66,6 +68,7 @@
     method public boolean isFeatureSupported(String);
     method public static boolean isSupported();
     field public static final String JS_FEATURE_CONSOLE_MESSAGING = "JS_FEATURE_CONSOLE_MESSAGING";
+    field public static final String JS_FEATURE_EVALUATE_FROM_FD = "JS_FEATURE_EVALUATE_FROM_FD";
     field public static final String JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT = "JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT";
     field public static final String JS_FEATURE_ISOLATE_MAX_HEAP_SIZE = "JS_FEATURE_ISOLATE_MAX_HEAP_SIZE";
     field public static final String JS_FEATURE_ISOLATE_TERMINATION = "JS_FEATURE_ISOLATE_TERMINATION";
diff --git a/javascriptengine/javascriptengine/api/restricted_current.txt b/javascriptengine/javascriptengine/api/restricted_current.txt
index 77b4206c..19d2a86 100644
--- a/javascriptengine/javascriptengine/api/restricted_current.txt
+++ b/javascriptengine/javascriptengine/api/restricted_current.txt
@@ -52,6 +52,8 @@
   public final class JavaScriptIsolate implements java.lang.AutoCloseable {
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void clearConsoleCallback();
     method public void close();
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.content.res.AssetFileDescriptor);
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.os.ParcelFileDescriptor);
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public boolean provideNamedData(String, byte[]);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(androidx.javascriptengine.JavaScriptConsoleCallback);
@@ -66,6 +68,7 @@
     method public boolean isFeatureSupported(String);
     method public static boolean isSupported();
     field public static final String JS_FEATURE_CONSOLE_MESSAGING = "JS_FEATURE_CONSOLE_MESSAGING";
+    field public static final String JS_FEATURE_EVALUATE_FROM_FD = "JS_FEATURE_EVALUATE_FROM_FD";
     field public static final String JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT = "JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT";
     field public static final String JS_FEATURE_ISOLATE_MAX_HEAP_SIZE = "JS_FEATURE_ISOLATE_MAX_HEAP_SIZE";
     field public static final String JS_FEATURE_ISOLATE_TERMINATION = "JS_FEATURE_ISOLATE_TERMINATION";
diff --git a/javascriptengine/javascriptengine/build.gradle b/javascriptengine/javascriptengine/build.gradle
index da6e844..b6684a5 100644
--- a/javascriptengine/javascriptengine/build.gradle
+++ b/javascriptengine/javascriptengine/build.gradle
@@ -49,6 +49,9 @@
             version 1
         }
     }
+    aaptOptions {
+        noCompress 'js'
+    }
     namespace "androidx.javascriptengine"
 }
 
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/javascriptengine/javascriptengine/src/androidTest/assets/print_hello.js
similarity index 77%
rename from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
rename to javascriptengine/javascriptengine/src/androidTest/assets/print_hello.js
index 40b8f5b..e8d47d5 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/javascriptengine/javascriptengine/src/androidTest/assets/print_hello.js
@@ -14,7 +14,5 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
-
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+function hello() { return 'hello'; }
+hello();
diff --git a/javascriptengine/javascriptengine/src/androidTest/assets/wrong_js.txt b/javascriptengine/javascriptengine/src/androidTest/assets/wrong_js.txt
new file mode 100644
index 0000000..541b9aa
--- /dev/null
+++ b/javascriptengine/javascriptengine/src/androidTest/assets/wrong_js.txt
@@ -0,0 +1 @@
+Non javascript file.
diff --git a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
index d1f5af0..3de5e059 100644
--- a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
+++ b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
@@ -17,6 +17,8 @@
 package androidx.javascriptengine;
 
 import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
 
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
@@ -35,6 +37,10 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Vector;
 import java.util.concurrent.CountDownLatch;
@@ -50,6 +56,13 @@
     // and should be much smaller (for the purposes of testing).
     private static final long REASONABLE_HEAP_SIZE = 100 * 1024 * 1024;
 
+    private static class InputStreamThrowsReadError extends InputStream {
+        @Override
+        public int read() throws IOException {
+            throw new IOException("Mock InputStream read error");
+        }
+    }
+
     @Before
     public void setUp() {
         Assume.assumeTrue(JavaScriptSandbox.isSupported());
@@ -288,6 +301,52 @@
 
     @Test
     @MediumTest
+    public void testEvaluateJSFileAsAfd() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        try (AssetFileDescriptor afd = context.getAssets().openFd("print_hello.js")) {
+            ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                    JavaScriptSandbox.createConnectedInstanceAsync(context);
+
+            try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+                    JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                Assume.assumeTrue(jsSandbox.isFeatureSupported(
+                        JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD));
+                ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(afd);
+                String result = resultFuture.get(5, TimeUnit.SECONDS);
+                Assert.assertEquals("hello", result);
+            }
+        }
+    }
+
+    @Test
+    @MediumTest
+    public void testEvaluateJSFileAsPfd() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        String fileName  = "test_print_hello.js";
+        String fileContent = "function hello() { return 'hello'; } hello();";
+        try (FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE)) {
+            fos.write(fileContent.getBytes(StandardCharsets.UTF_8));
+            File jsFile = new File(context.getFilesDir(), fileName);
+            try (ParcelFileDescriptor pfd = ParcelFileDescriptor.open(jsFile,
+                    ParcelFileDescriptor.MODE_READ_ONLY)) {
+                ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                        JavaScriptSandbox.createConnectedInstanceAsync(context);
+                try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+                        JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                    Assume.assumeTrue(jsSandbox.isFeatureSupported(
+                            JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD));
+                    ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(pfd);
+                    String result = resultFuture.get(5, TimeUnit.SECONDS);
+                    Assert.assertEquals("hello", result);
+                }
+            } finally {
+                jsFile.delete();
+            }
+        }
+    }
+
+    @Test
+    @MediumTest
     public void testArrayBufferWasmCompilation() throws Throwable {
         final String success = "success";
         // The bytes of a minimal WebAssembly module, courtesy of v8/test/cctest/test-api-wasm.cc
@@ -672,7 +731,7 @@
 
     @Test
     @LargeTest
-    public void testIsolateCreationAfterCrash() throws Throwable {
+    public void testIsolateCreationAfterOom() throws Throwable {
         final long maxHeapSize = REASONABLE_HEAP_SIZE;
         // We need to beat the v8 optimizer to ensure it really allocates the required memory. Note
         // that we're allocating an array of elements - not bytes. Filling will ensure that the
@@ -710,17 +769,23 @@
                     }
                 }
 
-                final CountDownLatch latch = new CountDownLatch(1);
+                final CountDownLatch latch1 = new CountDownLatch(1);
                 jsIsolate1.addOnTerminatedCallback(Runnable::run, info -> {
                     Assert.assertEquals(TerminationInfo.STATUS_MEMORY_LIMIT_EXCEEDED,
                             info.getStatus());
-                    latch.countDown();
+                    latch1.countDown();
                 });
-                Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+                Assert.assertTrue(latch1.await(5, TimeUnit.SECONDS));
 
-                // Check that new isolates can no longer be created in the same sandbox.
-                Assert.assertThrows(IllegalStateException.class,
-                        () -> jsSandbox.createIsolate(isolateStartupParameters));
+                // Check that new isolates can still be created in the sandbox but are created dead.
+                final JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate();
+                final CountDownLatch latch2 = new CountDownLatch(1);
+                jsIsolate2.addOnTerminatedCallback(Runnable::run, info -> {
+                    Assert.assertEquals(TerminationInfo.STATUS_SANDBOX_DEAD,
+                            info.getStatus());
+                    latch2.countDown();
+                });
+                Assert.assertTrue(latch2.await(5, TimeUnit.SECONDS));
             }
         }
 
@@ -737,6 +802,50 @@
     }
 
     @Test
+    @LargeTest
+    public void testIsolateCreationAfterDeath() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                JavaScriptSandbox.createConnectedInstanceAsync(context);
+        try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+            jsSandbox.killImmediatelyOnThread();
+            try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                final CountDownLatch latch = new CountDownLatch(1);
+                jsIsolate.addOnTerminatedCallback(Runnable::run, info -> {
+                    Assert.assertEquals(TerminationInfo.STATUS_SANDBOX_DEAD,
+                            info.getStatus());
+                    Assert.assertEquals("sandbox was dead before call to createIsolate",
+                            info.getMessage());
+                    latch.countDown();
+                });
+                Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+            }
+        }
+    }
+
+    @Test
+    @LargeTest
+    public void testIsolateCreationAfterUnbinding() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                JavaScriptSandbox.createConnectedInstanceAsync(context);
+        try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+            jsSandbox.unbindService();
+            try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                final CountDownLatch latch = new CountDownLatch(1);
+                jsIsolate.addOnTerminatedCallback(Runnable::run, info -> {
+                    Assert.assertEquals(TerminationInfo.STATUS_SANDBOX_DEAD,
+                            info.getStatus());
+                    Assert.assertEquals("sandbox found dead during call to createIsolate",
+                            info.getMessage());
+                    latch.countDown();
+                });
+                Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+            }
+        }
+    }
+
+    @Test
     @MediumTest
     public void testAsyncPromiseCallbacks() throws Throwable {
         // Unlike testPromiseReturn and testPromiseEvaluationThrow, this test is guaranteed to
@@ -1159,7 +1268,7 @@
                     latch.countDown();
                 });
 
-                jsSandbox.close();
+                jsSandbox.killImmediatelyOnThread();
 
                 Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
             }
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java
index c10d56fd..74ce8a0 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java
@@ -16,6 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
+
 import androidx.annotation.NonNull;
 import androidx.concurrent.futures.CallbackToFutureAdapter;
 import androidx.core.util.Consumer;
@@ -44,11 +47,19 @@
     @NonNull
     @Override
     public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull String code) {
-        return CallbackToFutureAdapter.getFuture(completer -> {
-            final String futureDebugMessage = "evaluateJavascript Future";
-            completer.setException(mTerminationInfo.toJavaScriptException());
-            return futureDebugMessage;
-        });
+        return getEnvironmentDeadFuture();
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        return getEnvironmentDeadFuture();
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        return getEnvironmentDeadFuture();
     }
 
     @Override
@@ -86,4 +97,12 @@
 
     @Override
     public void removeOnTerminatedCallback(@NonNull Consumer<TerminationInfo> callback) {}
+
+    private ListenableFuture<String> getEnvironmentDeadFuture() {
+        return CallbackToFutureAdapter.getFuture(completer -> {
+            final String futureDebugMessage = "evaluateJavascript Future";
+            completer.setException(mTerminationInfo.toJavaScriptException());
+            return futureDebugMessage;
+        });
+    }
 }
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/FileDescriptorIOException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/FileDescriptorIOException.java
new file mode 100644
index 0000000..d87dd72
--- /dev/null
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/FileDescriptorIOException.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2023 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 androidx.javascriptengine;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * Indicates that streaming JavaScript code into the JS evaluation environment has failed.
+ *
+ * The JavaScript isolate may continue to be used after this exception has been thrown. The
+ * JavaScript evaluation will not proceed if the JavaScript code streaming fails.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public final class FileDescriptorIOException extends JavaScriptException {
+    public FileDescriptorIOException(@NonNull String error) {
+        super(error);
+    }
+    public FileDescriptorIOException() {
+        super();
+    }
+}
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java
index ba944b1..58f204b 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java
@@ -16,6 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
+
 import androidx.annotation.NonNull;
 import androidx.core.util.Consumer;
 
@@ -43,6 +46,20 @@
                 "Calling evaluateJavaScriptAsync() when " + mDescription);
     }
 
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        throw new IllegalStateException(
+                "Calling evaluateJavaScriptAsync() when " + mDescription);
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        throw new IllegalStateException(
+                "Calling evaluateJavaScriptAsync() when " + mDescription);
+    }
+
     @Override
     public void setConsoleCallback(@NonNull Executor executor,
             @NonNull JavaScriptConsoleCallback callback) {
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java
index 6188bc9..2ac876a 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java
@@ -16,6 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
+
 import androidx.annotation.NonNull;
 import androidx.core.util.Consumer;
 
@@ -38,6 +41,12 @@
     @NonNull
     ListenableFuture<String> evaluateJavaScriptAsync(@NonNull String code);
 
+    @NonNull
+    ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd);
+
+    @NonNull
+    ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd);
+
     void setConsoleCallback(@NonNull Executor executor,
             @NonNull JavaScriptConsoleCallback callback);
 
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java
index 8f7f2f9..eceddcb 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java
@@ -19,6 +19,7 @@
 import android.content.res.AssetFileDescriptor;
 import android.os.Binder;
 import android.os.DeadObjectException;
+import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -265,6 +266,37 @@
         });
     }
 
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        return CallbackToFutureAdapter.getFuture(completer -> {
+            final String futureDebugMessage = "evaluateJavascript Future";
+            IJsSandboxIsolateSyncCallbackStubWrapper callbackStub =
+                    new IJsSandboxIsolateSyncCallbackStubWrapper(completer);
+            try {
+                mJsIsolateStub.evaluateJavascriptWithFd(afd, callbackStub);
+                addPending(completer);
+            } catch (DeadObjectException e) {
+                // The sandbox process has died.
+                mJsIsolate.maybeSetSandboxDead();
+                completer.setException(new SandboxDeadException());
+            } catch (RemoteException e) {
+                completer.setException(new RuntimeException(e));
+            }
+            // Debug string.
+            return futureDebugMessage;
+        });
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        long length = pfd.getStatSize() >= 0 ? pfd.getStatSize() :
+                AssetFileDescriptor.UNKNOWN_LENGTH;
+        AssetFileDescriptor wrapperAfd = new AssetFileDescriptor(pfd, 0, length);
+        return evaluateJavaScriptAsync(wrapperAfd);
+    }
+
     @Override
     public void setConsoleCallback(@NonNull Executor executor,
             @NonNull JavaScriptConsoleCallback callback) {
@@ -358,6 +390,9 @@
                 // the app to have already set up a race condition.
                 completer.setException(terminationInfo.toJavaScriptException());
                 break;
+            case IJsSandboxIsolateSyncCallback.FILE_DESCRIPTOR_IO_ERROR:
+                completer.setException(new FileDescriptorIOException(error));
+                break;
             default:
                 completer.setException(new JavaScriptException(
                         "Unknown error: code " + type + ": " + error));
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
index ab19538..dc43886 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
@@ -16,7 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
 import android.os.Binder;
+import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -37,7 +39,7 @@
 import javax.annotation.concurrent.GuardedBy;
 
 /**
- * Environment within a {@link JavaScriptSandbox} where Javascript is executed.
+ * Environment within a {@link JavaScriptSandbox} where JavaScript is executed.
  * <p>
  * A single {@link JavaScriptSandbox} process can contain any number of {@link JavaScriptIsolate}
  * instances where JS can be evaluated independently and in parallel.
@@ -84,6 +86,20 @@
             IsolateStartupParameters settings) throws RemoteException {
         final JavaScriptIsolate isolate = new JavaScriptIsolate(sandbox);
         isolate.initialize(settings);
+        isolate.mGuard.open("close");
+        return isolate;
+    }
+
+    @NonNull
+    static JavaScriptIsolate createDead(@NonNull JavaScriptSandbox sandbox,
+            @NonNull String message) {
+        final JavaScriptIsolate isolate = new JavaScriptIsolate(sandbox);
+        final TerminationInfo terminationInfo =
+                new TerminationInfo(TerminationInfo.STATUS_SANDBOX_DEAD, message);
+        synchronized (isolate.mLock) {
+            isolate.mIsolateState = new EnvironmentDeadState(terminationInfo);
+        }
+        isolate.mGuard.open("close");
         return isolate;
     }
 
@@ -110,7 +126,6 @@
                     instanceCallback);
             mIsolateState = new IsolateUsableState(this, jsIsolateStub,
                     settings.getMaxEvaluationReturnSizeBytes());
-            mGuard.open("close");
         }
     }
 
@@ -211,6 +226,74 @@
     }
 
     /**
+     * Reads and evaluates the JavaScript code in the file described by the given
+     * AssetFileDescriptor.
+     * <p>
+     * Please refer to the documentation of {@link #evaluateJavaScriptAsync(String)} as the
+     * behavior of this method is similar other than for the input type.
+     * <p>
+     * This API exposes the underlying file to the service. In case the service process is
+     * compromised for unforeseen reasons, it might be able to read from the {@code
+     * AssetFileDescriptor} beyond the given length and offset.  This API does <strong> not
+     * </strong> close the given {@code AssetFileDescriptor}.
+     * <p>
+     * <strong>Note: The underlying file must be UTF-8 encoded.</strong>
+     * <p>
+     * This overload is useful when the source of the data is easily readable as a
+     * {@code AssetFileDescriptor}, e.g. an asset or raw resource.
+     *
+     * @param afd An {@code AssetFileDescriptor} for a file containing UTF-8 encoded JavaScript
+     *            code that is evaluated. Returns a String or a Promise of a String in case
+     *            {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN} is supported
+     * @return Future that evaluates to the result String of the evaluation or exceptions (see
+     * {@link JavaScriptException} and subclasses) if there is an error
+     */
+    @SuppressWarnings("NullAway")
+    @NonNull
+    @RequiresFeature(name = JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD,
+            enforcement = "androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported")
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        Objects.requireNonNull(afd);
+        synchronized (mLock) {
+            return mIsolateState.evaluateJavaScriptAsync(afd);
+        }
+    }
+
+    /**
+     * Reads and evaluates the JavaScript code in the file described by the given
+     * {@code ParcelFileDescriptor}.
+     * <p>
+     * Please refer to the documentation of {@link #evaluateJavaScriptAsync(String)} as the
+     * behavior of this method is similar other than for the input type.
+     * <p>
+     * This API exposes the underlying file to the service. In case the service process is
+     * compromised for unforeseen reasons, it might be able to read from the {@code
+     * ParcelFileDescriptor} beyond the given length and offset. This API does <strong> not
+     * </strong> close the given {@code ParcelFileDescriptor}.
+     * <p>
+     * <strong>Note: The underlying file must be UTF-8 encoded.</strong>
+     * <p>
+     * This overload is useful when the source of the data is easily readable as a
+     * {@code ParcelFileDescriptor}, e.g. a file from shared memory or the app's data directory.
+     *
+     * @param pfd A {@code ParcelFileDescriptor} for a file containing UTF-8 encoded JavaScript
+     *            code that is evaluated. Returns a String or a Promise of a String in case
+     *             {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN} is supported
+     * @return Future that evaluates to the result String of the evaluation or exceptions (see
+     * {@link JavaScriptException} and subclasses) if there is an error
+     */
+    @SuppressWarnings("NullAway")
+    @NonNull
+    @RequiresFeature(name = JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD,
+            enforcement = "androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported")
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        Objects.requireNonNull(pfd);
+        synchronized (mLock) {
+            return mIsolateState.evaluateJavaScriptAsync(pfd);
+        }
+    }
+
+    /**
      * Closes the {@link JavaScriptIsolate} object and renders it unusable.
      * <p>
      * Once closed, no more method calls should be made. Pending evaluations will reject with
@@ -227,9 +310,13 @@
      */
     @Override
     public void close() {
+        closeWithDescription("isolate closed");
+    }
+
+    void closeWithDescription(@NonNull String description) {
         synchronized (mLock) {
             mIsolateState.close();
-            mIsolateState = new IsolateClosedState("isolate closed");
+            mIsolateState = new IsolateClosedState(description);
         }
         // Do not hold mLock whilst calling into JavaScriptSandbox, as JavaScriptSandbox also has
         // its own lock and may want to call into JavaScriptIsolate from another thread.
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
index 8a5c048..2919740 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
@@ -21,8 +21,10 @@
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.content.pm.PackageInfo;
+import android.os.DeadObjectException;
 import android.os.IBinder;
 import android.os.RemoteException;
+import android.util.Log;
 import android.webkit.WebView;
 
 import androidx.annotation.NonNull;
@@ -81,6 +83,7 @@
  * {@link JavaScriptIsolate} object cannot be shared.
  */
 public final class JavaScriptSandbox implements AutoCloseable {
+    private static final String TAG = "JavaScriptSandbox";
     // TODO(crbug.com/1297672): Add capability to this class to support spawning
     // different processes as needed. This might require that we have a static
     // variable in here that tracks the existing services we are connected to and
@@ -92,10 +95,9 @@
     private final Object mLock = new Object();
     private final CloseGuardHelper mGuard = CloseGuardHelper.create();
 
-    // This is null iff the sandbox is closed.
-    @Nullable
+    @NonNull
     @GuardedBy("mLock")
-    private IJsSandboxService mJsSandboxService;
+    private final IJsSandboxService mJsSandboxService;
 
     // Don't use mLock for the connection, allowing it to be severed at any time, regardless of
     // the status of the main mLock. Use an AtomicReference instead.
@@ -111,6 +113,16 @@
     @NonNull
     private Set<JavaScriptIsolate> mActiveIsolateSet;
 
+    private enum State {
+        ALIVE,
+        DEAD,
+        CLOSED,
+    }
+
+    @GuardedBy("mLock")
+    @NonNull
+    private State mState;
+
     final ExecutorService mThreadPoolTaskExecutor =
             Executors.newCachedThreadPool(new ThreadFactory() {
                 private final AtomicInteger mCount = new AtomicInteger(1);
@@ -135,6 +147,7 @@
                     JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT,
                     JS_FEATURE_CONSOLE_MESSAGING,
                     JS_FEATURE_ISOLATE_CLIENT,
+                    JS_FEATURE_EVALUATE_FROM_FD,
             })
     @Retention(RetentionPolicy.SOURCE)
     @Target({ElementType.PARAMETER, ElementType.METHOD})
@@ -222,6 +235,15 @@
     static final String JS_FEATURE_ISOLATE_CLIENT =
             "JS_FEATURE_ISOLATE_CLIENT";
 
+    /**
+     * When this feature is present,
+     * {@link JavaScriptIsolate#evaluateJavaScriptAsync(android.content.res.AssetFileDescriptor)},
+     * and {@link JavaScriptIsolate#evaluateJavaScriptAsync(android.os.ParcelFileDescriptor)}
+     * can be used to evaluate JavaScript code of known and unknown length from file descriptors.
+     */
+    public static final String JS_FEATURE_EVALUATE_FROM_FD =
+            "JS_FEATURE_EVALUATE_FROM_FD";
+
     // This set must not be modified after JavaScriptSandbox construction.
     @NonNull
     private final HashSet<String> mClientSideFeatureSet;
@@ -268,7 +290,7 @@
         @Override
         public void onBindingDied(ComponentName name) {
             runShutdownTasks(
-                    new RuntimeException("JavaScriptSandbox internal error: onBindingDead()"));
+                    new RuntimeException("JavaScriptSandbox internal error: onBindingDied()"));
         }
 
         @Override
@@ -279,7 +301,8 @@
 
         private void runShutdownTasks(@NonNull Exception e) {
             if (mJsSandbox != null) {
-                mJsSandbox.close();
+                Log.e(TAG, "Sandbox has died", e);
+                mJsSandbox.killImmediatelyOnThread();
             } else {
                 mContext.unbindService(this);
                 sIsReadyToConnect.set(true);
@@ -419,6 +442,7 @@
         final List<String> features = mJsSandboxService.getSupportedFeatures();
         mClientSideFeatureSet = buildClientSideFeatureSet(features);
         mActiveIsolateSet = new HashSet<>();
+        mState = State.ALIVE;
         mGuard.open("close");
         // This should be at the end of the constructor.
     }
@@ -435,6 +459,9 @@
     /**
      * Creates and returns an {@link JavaScriptIsolate} within which JS can be executed with the
      * specified settings.
+     * <p>
+     * If the sandbox is dead, this will still return an isolate, but evaluations will fail with
+     * {@link SandboxDeadException}.
      *
      * @param settings configuration used to set up the isolate
      */
@@ -442,18 +469,28 @@
     public JavaScriptIsolate createIsolate(@NonNull IsolateStartupParameters settings) {
         Objects.requireNonNull(settings);
         synchronized (mLock) {
-            // TODO(b/290750354, b/290749782): Implement separate closed vs dead state and use
-            //  that instead of a mConnection nullness check.
-            if (mJsSandboxService == null || mConnection.get() == null) {
-                throw new IllegalStateException(
-                        "Attempting to createIsolate on a service that isn't connected");
-            }
-            final JavaScriptIsolate isolate;
-            try {
-                isolate = JavaScriptIsolate.create(this, settings);
-            } catch (RemoteException e) {
-                // TODO(b/286055647): Handle sandbox dying during createIsolate more sensibly.
-                throw new RuntimeException(e);
+            JavaScriptIsolate isolate;
+            switch (mState) {
+                case ALIVE:
+                    try {
+                        isolate = JavaScriptIsolate.create(this, settings);
+                    } catch (DeadObjectException e) {
+                        killDueToException(e);
+                        isolate = JavaScriptIsolate.createDead(this,
+                                "sandbox found dead during call to createIsolate");
+                    } catch (RemoteException e) {
+                        killDueToException(e);
+                        throw new RuntimeException(e);
+                    }
+                    break;
+                case DEAD:
+                    isolate = JavaScriptIsolate.createDead(this,
+                            "sandbox was dead before call to createIsolate");
+                    break;
+                case CLOSED:
+                    throw new IllegalStateException("Cannot create isolate in closed sandbox");
+                default:
+                    throw new AssertionError("unreachable");
             }
             mActiveIsolateSet.add(isolate);
             return isolate;
@@ -465,7 +502,7 @@
     IJsSandboxIsolate createIsolateOnService(@NonNull IsolateStartupParameters settings,
             @Nullable IJsSandboxIsolateClient isolateInstanceCallback) throws RemoteException {
         synchronized (mLock) {
-            Objects.requireNonNull(mJsSandboxService);
+            assert mState == State.ALIVE;
             if (isFeatureSupported(JavaScriptSandbox.JS_FEATURE_ISOLATE_CLIENT)) {
                 return mJsSandboxService.createIsolate2(settings.getMaxHeapSizeBytes(),
                         isolateInstanceCallback);
@@ -501,6 +538,11 @@
         if (features.contains(IJsSandboxService.ISOLATE_CLIENT + ":DEV")) {
             featureSet.add(JS_FEATURE_ISOLATE_CLIENT);
         }
+        // Temporarily adding :DEV suffix for this feature flag
+        // TODO: Figure out a long term solution for dev flags compatible with stableAidl
+        if (features.contains(IJsSandboxService.EVALUATE_FROM_FD + ":DEV")) {
+            featureSet.add(JS_FEATURE_EVALUATE_FROM_FD);
+        }
         return featureSet;
     }
 
@@ -536,20 +578,18 @@
      * can be made. Closing terminates the isolated process immediately. All pending evaluations are
      * immediately terminated. Once closed, the client may call
      * {@link JavaScriptSandbox#createConnectedInstanceAsync(Context)} to create another
-     * {@link JavaScriptSandbox}.
+     * {@link JavaScriptSandbox}. You should still call close even if the sandbox has died,
+     * otherwise you will not be able to create a new one.
      */
     @Override
     public void close() {
         synchronized (mLock) {
-            if (mJsSandboxService == null) {
+            if (mState == State.CLOSED) {
                 return;
             }
             unbindService();
-            // Currently we consider that we are ready for a new connection once we unbind. This
-            // might not be true if the process is not immediately killed by ActivityManager once it
-            // is unbound.
             sIsReadyToConnect.set(true);
-            mJsSandboxService = null;
+            mState = State.CLOSED;
         }
         notifyIsolatesAboutClosure();
         // This is the closest thing to a .close() method for ExecutorServices. This doesn't
@@ -559,22 +599,67 @@
         mThreadPoolTaskExecutor.shutdownNow();
     }
 
-    // Unbind the service if it hasn't been unbound already.
-    private void unbindService() {
+    /**
+     * Unbind the service if it hasn't been unbound already.
+     * <p>
+     * By itself, this will not put the sandbox into an official dead state, but any subsequent
+     * interaction with the sandbox will result in a DeadObjectException. As this method does NOT
+     * trigger ConnectionSetup.onServiceDisconnected or .onBindingDied, it is also useful for
+     * testing how methods handle DeadObjectException without a race against these callbacks.
+     * <p>
+     * This will not, by itself, make JSE ready to create a new sandbox. The JavaScriptSandbox
+     * object must still be explicitly closed.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @VisibleForTesting
+    public void unbindService() {
         final ConnectionSetup connection = mConnection.getAndSet(null);
         if (connection != null) {
             mContext.unbindService(connection);
         }
     }
 
-    // Kill the sandbox immediately.
-    //
-    // This will unbind the sandbox service so that any future IPC will fail immediately.
-    // However, isolates will be notified asynchronously, from the main thread.
+    /**
+     * Kill the sandbox and immediately update state and trigger callbacks/futures on the calling
+     * thread.
+     * <p>
+     * There is a risk of deadlock if this is called from an isolate-related callback. In order
+     * to kill from code holding arbitrary locks, use {@link #kill} instead.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @VisibleForTesting
+    public void killImmediatelyOnThread() {
+        synchronized (mLock) {
+            if (mState != State.ALIVE) {
+                return;
+            }
+            mState = State.DEAD;
+            unbindService();
+        }
+        notifyIsolatesAboutDeath();
+    }
+
+    /**
+     * Kill the sandbox.
+     * <p>
+     * This will unbind the sandbox service so that any future IPC will fail immediately.
+     * However, isolates will be notified asynchronously, from mContext's main executor.
+     */
     void kill() {
         unbindService();
-        // TODO(b/290750354, b/290749782): Implement separate closed vs dead state.
-        getMainExecutor().execute(this::close);
+        getMainExecutor().execute(this::killImmediatelyOnThread);
+    }
+
+    /**
+     * Same as {@link #kill}, but logs information about the cause.
+     */
+    void killDueToException(Exception e) {
+        if (e instanceof DeadObjectException) {
+            Log.e(TAG, "Sandbox died before or during during remote call", e);
+        } else {
+            Log.e(TAG, "Killing sandbox due to exception", e);
+        }
+        kill();
     }
 
     private void notifyIsolatesAboutClosure() {
@@ -586,8 +671,21 @@
             mActiveIsolateSet = Collections.emptySet();
         }
         for (JavaScriptIsolate isolate : activeIsolateSet) {
-            isolate.maybeSetIsolateDead(new TerminationInfo(TerminationInfo.STATUS_SANDBOX_DEAD,
-                    "sandbox closed"));
+            final TerminationInfo terminationInfo =
+                    new TerminationInfo(TerminationInfo.STATUS_SANDBOX_DEAD, "sandbox closed");
+            isolate.maybeSetIsolateDead(terminationInfo);
+        }
+    }
+
+    private void notifyIsolatesAboutDeath() {
+        // Do not hold mLock whilst calling into JavaScriptIsolate, as JavaScriptIsolate also has
+        // its own lock and may want to call into JavaScriptSandbox from another thread.
+        final JavaScriptIsolate[] activeIsolateSet;
+        synchronized (mLock) {
+            activeIsolateSet = mActiveIsolateSet.toArray(new JavaScriptIsolate[0]);
+        }
+        for (JavaScriptIsolate isolate : activeIsolateSet) {
+            isolate.maybeSetSandboxDead();
         }
     }
 
@@ -596,11 +694,7 @@
     protected void finalize() throws Throwable {
         try {
             mGuard.warnIfOpen();
-            synchronized (mLock) {
-                if (mJsSandboxService != null) {
-                    close();
-                }
-            }
+            close();
         } finally {
             super.finalize();
         }
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/StreamingFailedException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/StreamingFailedException.java
new file mode 100644
index 0000000..c9af354
--- /dev/null
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/StreamingFailedException.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2023 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 androidx.javascriptengine;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * Indicates that streaming JavaScript code into the JS evaluation environment has failed.
+ *
+ * The JavaScript isolate may continue to be used after this exception has been thrown. The
+ * JavaScript evaluation will not proceed if the JavaScript code streaming fails.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public final class StreamingFailedException extends JavaScriptException {
+    public StreamingFailedException(@NonNull String error) {
+        super(error);
+    }
+    public StreamingFailedException() {
+        super();
+    }
+}
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
index 1aeac99..fcc2b11 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
@@ -87,14 +87,30 @@
     /**
      * Checks if the given AssetFileDescriptor passes certain conditions.
      */
-    public static void checkAssetFileDescriptor(@NonNull AssetFileDescriptor afd) {
-        if (afd.getStartOffset() != 0) {
-            throw new UnsupportedOperationException(
-                    "AssetFileDescriptor.getStartOffset() != 0");
+
+    public static void checkAssetFileDescriptor(@NonNull AssetFileDescriptor afd,
+            boolean allowUnknownLength) {
+        if (afd.getStartOffset() < 0) {
+            throw new IllegalArgumentException(
+                    "AssetFileDescriptor offset should be >= 0");
         }
-        if (afd.getLength() < 0) {
+        if (afd.getLength() != AssetFileDescriptor.UNKNOWN_LENGTH && afd.getLength() < 0) {
+            throw new IllegalArgumentException(
+                    "AssetFileDescriptor should have valid length");
+        }
+        if (afd.getDeclaredLength() != AssetFileDescriptor.UNKNOWN_LENGTH
+                && afd.getDeclaredLength() < 0) {
+            throw new IllegalArgumentException(
+                    "AssetFileDescriptor should have valid declared length");
+        }
+        if (afd.getLength() == AssetFileDescriptor.UNKNOWN_LENGTH && afd.getStartOffset() != 0) {
             throw new UnsupportedOperationException(
-                    "AssetFileDescriptor.getLength() should be >=0");
+                    "AssetFileDescriptor offset should be 0 for unknown length");
+        }
+
+        if (!allowUnknownLength && afd.getLength() == AssetFileDescriptor.UNKNOWN_LENGTH) {
+            throw new UnsupportedOperationException(
+                    "AssetFileDescriptor should have known length");
         }
     }
 
@@ -155,7 +171,7 @@
             boolean truncate)
             throws IOException, LengthLimitExceededException {
         try {
-            Utils.checkAssetFileDescriptor(afd);
+            Utils.checkAssetFileDescriptor(afd, /*allowUnknownLength=*/ false);
             int lengthToRead = (int) afd.getLength();
             if (afd.getLength() > maxLength) {
                 if (truncate) {
diff --git a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
index 9e67eb9..cbb7313 100644
--- a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
+++ b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
@@ -30,6 +30,8 @@
     const int JS_EVALUATION_ERROR = 0;
     // The evaluation failed and the isolate crashed due to running out of heap memory.
     const int MEMORY_LIMIT_EXCEEDED = 1;
+    // The evaluation failed due to IO errors while reading from the file descriptor.
+    const int FILE_DESCRIPTOR_IO_ERROR = 2;
 
     /**
      * @param afd      input AssetFileDescriptor containing the return value of JS evaluation
diff --git a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
index 8afe48c..376de39 100644
--- a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
+++ b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
@@ -69,6 +69,12 @@
      */
     const String ISOLATE_CLIENT = "ISOLATE_CLIENT";
 
+     /**
+     * Feature flag indicating that an embedder can evaluate JavaScript through
+     * an AssetFileDescriptor or ParcelFileDescriptor with knwon or unknown length.
+     */
+    const String EVALUATE_FROM_FD = "EVALUATE_FROM_FD";
+
     /**
      * @return A list of feature names supported by this implementation.
      */
diff --git a/libraryversions.toml b/libraryversions.toml
index 7d65e62..94aaac9 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -41,9 +41,9 @@
 CORE_REMOTEVIEWS = "1.1.0-alpha01"
 CORE_ROLE = "1.2.0-alpha01"
 CORE_SPLASHSCREEN = "1.1.0-alpha02"
-CORE_TELECOM = "1.0.0-alpha01"
+CORE_TELECOM = "1.0.0-alpha02"
 CORE_UWB = "1.0.0-alpha08"
-CREDENTIALS = "1.2.0-beta04"
+CREDENTIALS = "1.2.0-rc01"
 CREDENTIALS_FIDO_QUARANTINE = "1.0.0-alpha01"
 CURSORADAPTER = "1.1.0-alpha01"
 CUSTOMVIEW = "1.2.0-alpha03"
@@ -72,9 +72,9 @@
 HEALTH_CONNECT = "1.1.0-alpha05"
 HEALTH_SERVICES_CLIENT = "1.1.0-alpha02"
 HEIFWRITER = "1.1.0-alpha03"
-HILT = "1.1.0-alpha02"
-HILT_NAVIGATION = "1.1.0-alpha03"
-HILT_NAVIGATION_COMPOSE = "1.1.0-alpha02"
+HILT = "1.1.0-beta01"
+HILT_NAVIGATION = "1.1.0-beta01"
+HILT_NAVIGATION_COMPOSE = "1.1.0-beta01"
 INPUT_MOTIONPREDICTION = "1.0.0-beta03"
 INSPECTION = "1.0.0"
 INTERPOLATOR = "1.1.0-alpha01"
@@ -137,7 +137,7 @@
 TRACING = "1.3.0-alpha02"
 TRACING_PERFETTO = "1.0.0-beta03"
 TRANSITION = "1.5.0-alpha03"
-TV = "1.0.0-alpha09"
+TV = "1.0.0-alpha10"
 TVPROVIDER = "1.1.0-alpha02"
 VECTORDRAWABLE = "1.2.0-rc01"
 VECTORDRAWABLE_ANIMATED = "1.2.0-rc01"
diff --git a/lifecycle/lifecycle-compiler/build.gradle b/lifecycle/lifecycle-compiler/build.gradle
index b5ac1f6..5a4e902 100644
--- a/lifecycle/lifecycle-compiler/build.gradle
+++ b/lifecycle/lifecycle-compiler/build.gradle
@@ -30,23 +30,23 @@
     testImplementation(libs.jsr250)
 }
 
-// The following tasks are used to regenerate src/test/test-data/lib/src/test-library.jar
-// and is run manually when these jars need updating.
+// The following tasks are used to create test-library.jar used by ValidCasesTest.kt
 // We actually need to compile :lifecycle:lifecycle-common, but compileJava is easier
-tasks.register("compileTestLibrarySource", JavaCompile).configure {
-    dependsOn(compileJava)
-    source "src/test/test-data/lib/src"
-    classpath = project.compileJava.classpath
-    destinationDirectory.set(new File(project.buildDir, "test-data/lib/classes"))
+def compileTestLibrarySource = tasks.register("compileTestLibrarySource", JavaCompile) {
+    it.dependsOn(compileJava)
+    it.source "src/test/test-data/lib/src"
+    it.classpath = project.compileJava.classpath
+    it.destinationDirectory.set(layout.buildDirectory.dir("test-data-lib-classes"))
 }
 
-tasks.register("jarTestLibrarySource", Jar).configure {
-    dependsOn("compileTestLibrarySource")
-    from compileTestLibrarySource.destinationDir
-    archiveFileName.set("test-library.jar")
-    destinationDirectory.set(file("src/test/test-data/lib/"))
+def testLibraryJar = tasks.register("jarTestLibrarySource", Jar) {
+    it.from(compileTestLibrarySource.map { it.destinationDirectory })
+    it.archiveFileName.set("test-library.jar")
+    it.destinationDirectory.set(layout.buildDirectory.dir("test-data-lib-jar"))
 }
 
+sourceSets.test.output.dir(testLibraryJar.map { it.destinationDirectory })
+
 tasks.withType(Test).configureEach {
     // https://github.com/google/compile-testing/issues/222
     it.jvmArgs "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"
diff --git a/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt b/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
index 1889a41..a24d8b9 100644
--- a/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
+++ b/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
@@ -155,8 +155,10 @@
         }
     }
 
-    private fun libraryClasspathFiles() =
-        getSystemClasspathFiles() + File("src/test/test-data/lib/test-library.jar")
+    private fun libraryClasspathFiles(): Set<File> {
+        val testLibrary = ValidCasesTest::class.java.classLoader.getResource("test-library.jar")
+        return getSystemClasspathFiles() + File(testLibrary!!.toURI())
+    }
 
     private fun getSystemClasspathFiles(): Set<File> {
         val pathSeparator = System.getProperty("path.separator")
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java
index 94d3643..0794b8e 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java
@@ -24,6 +24,7 @@
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.OnLifecycleEvent;
 
+@SuppressWarnings("deprecation")
 public class LibraryBaseObserver implements LifecycleObserver {
     @OnLifecycleEvent(ON_START)
     public void doOnStart() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
index 5412e29..52ba23ab 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
@@ -20,8 +20,9 @@
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleOwner;
 import java.lang.Override;
-import javax.annotation.Generated;
+import javax.annotation.processing.Generated;
 
+@SuppressWarnings("deprecation")
 @Generated("androidx.lifecycle.LifecycleProcessor")
 public class LibraryBaseObserver_LifecycleAdapter implements GenericLifecycleObserver {
     final LibraryBaseObserver mReceiver;
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java
index 75004ac..daec0e2 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java
@@ -23,6 +23,7 @@
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.OnLifecycleEvent;
 
+@SuppressWarnings("deprecation")
 public class ObserverNoAdapter implements LifecycleObserver {
     @OnLifecycleEvent(ON_STOP)
     public void doOnStop() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java
index 382e3d8..9f9dc00 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java
@@ -24,6 +24,7 @@
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.OnLifecycleEvent;
 
+@SuppressWarnings("deprecation")
 public class PPObserverNoAdapter implements LifecycleObserver {
     @OnLifecycleEvent(ON_START)
     protected void doOnStart() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java
index 828e9c0..da10478 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java
@@ -24,6 +24,7 @@
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.OnLifecycleEvent;
 
+@SuppressWarnings("deprecation")
 public class PPObserverWithAdapter implements LifecycleObserver {
     @OnLifecycleEvent(ON_START)
     protected void doOnStart() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/test-library.jar b/lifecycle/lifecycle-compiler/src/test/test-data/lib/test-library.jar
deleted file mode 100644
index 587dbd5..0000000
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/test-library.jar
+++ /dev/null
Binary files differ
diff --git a/paging/integration-tests/testapp/lint-baseline.xml b/paging/integration-tests/testapp/lint-baseline.xml
index 9aa9f52..e56a951 100644
--- a/paging/integration-tests/testapp/lint-baseline.xml
+++ b/paging/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.3.0-alpha02" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0-alpha02)" variant="all" version="8.3.0-alpha02">
 
     <issue
         id="MissingInflatedId"
@@ -7,7 +7,9 @@
         errorLine1="        final Button addButton = findViewById(R.id.addButton);"
         errorLine2="                                              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"
+            line="51"
+            column="47"/>
     </issue>
 
     <issue
@@ -16,7 +18,196 @@
         errorLine1="        final Button clearButton = findViewById(R.id.clearButton);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"
+            line="54"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO(() -> {"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="55"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO(() -> {"
+        errorLine2="                                                       ^">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="55"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO(() -> {"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="55"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="78"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="78"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="                () -> mDatabase.getCustomerDao().insert(createCustomer()));"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="79"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="84"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="84"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="                () -> mDatabase.getCustomerDao().removeAll());"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="85"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="InvalidationTracker.addWeakObserver can only be called from within the same library group prefix (referenced groupId=`androidx.room` with prefix androidx from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        db.getInvalidationTracker().addWeakObserver(mObserver);"
+        errorLine2="                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java"
+            line="57"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="InvalidationTracker.refreshVersionsSync can only be called from within the same library group prefix (referenced groupId=`androidx.room` with prefix androidx from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        mDb.getInvalidationTracker().refreshVersionsSync();"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java"
+            line="62"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance()"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="51"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="            .executeOnDiskIO { database.customerDao.insert(createCustomer()) }"
+        errorLine2="             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="52"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="            .executeOnDiskIO { database.customerDao.insert(createCustomer()) }"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="52"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO {"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="56"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO {"
+        errorLine2="                                                       ^">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="56"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO {"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="56"
+            column="26"/>
     </issue>
 
     <issue
@@ -25,7 +216,9 @@
         errorLine1="    public String getName() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="45"
+            column="12"/>
     </issue>
 
     <issue
@@ -34,7 +227,9 @@
         errorLine1="    public void setName(String name) {"
         errorLine2="                        ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="49"
+            column="25"/>
     </issue>
 
     <issue
@@ -43,7 +238,9 @@
         errorLine1="    public String getLastName() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="53"
+            column="12"/>
     </issue>
 
     <issue
@@ -52,7 +249,9 @@
         errorLine1="    public void setLastName(String lastName) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="57"
+            column="29"/>
     </issue>
 
     <issue
@@ -61,7 +260,9 @@
         errorLine1="    void insert(Customer customer);"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="39"
+            column="17"/>
     </issue>
 
     <issue
@@ -70,7 +271,9 @@
         errorLine1="    void insertAll(Customer[] customers);"
         errorLine2="                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="46"
+            column="20"/>
     </issue>
 
     <issue
@@ -79,7 +282,9 @@
         errorLine1="    DataSource.Factory&lt;Integer, Customer> loadPagedAgeOrder();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="59"
+            column="5"/>
     </issue>
 
     <issue
@@ -88,7 +293,9 @@
         errorLine1="    PagingSource&lt;Integer, Customer> loadPagedAgeOrderPagingSource();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="65"
+            column="5"/>
     </issue>
 
     <issue
@@ -97,7 +304,9 @@
         errorLine1="    LiveData&lt;List&lt;Customer>> all();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="77"
+            column="5"/>
     </issue>
 
     <issue
@@ -106,7 +315,9 @@
         errorLine1="    List&lt;Customer> customerNameInitial(int limit);"
         errorLine2="    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="82"
+            column="5"/>
     </issue>
 
     <issue
@@ -115,7 +326,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadAfter(String key, int limit);"
         errorLine2="    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="85"
+            column="5"/>
     </issue>
 
     <issue
@@ -124,7 +337,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadAfter(String key, int limit);"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="85"
+            column="42"/>
     </issue>
 
     <issue
@@ -133,7 +348,9 @@
         errorLine1="    int customerNameCountAfter(String key);"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="88"
+            column="32"/>
     </issue>
 
     <issue
@@ -142,7 +359,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadBefore(String key, int limit);"
         errorLine2="    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="91"
+            column="5"/>
     </issue>
 
     <issue
@@ -151,7 +370,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadBefore(String key, int limit);"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="91"
+            column="43"/>
     </issue>
 
     <issue
@@ -160,7 +381,9 @@
         errorLine1="    int customerNameCountBefore(String key);"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="94"
+            column="33"/>
     </issue>
 
     <issue
@@ -169,7 +392,9 @@
         errorLine1="    public CustomerViewModel(Application application) {"
         errorLine2="                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="44"
+            column="30"/>
     </issue>
 
     <issue
@@ -178,7 +403,9 @@
         errorLine1="    protected void onCreate(final Bundle savedInstanceState) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"
+            line="42"
+            column="35"/>
     </issue>
 
     <issue
@@ -187,7 +414,9 @@
         errorLine1="    protected void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"
+            line="79"
+            column="40"/>
     </issue>
 
     <issue
@@ -196,7 +425,9 @@
         errorLine1="    protected void onCreate(final Bundle savedInstanceState) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"
+            line="40"
+            column="35"/>
     </issue>
 
 </issues>
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
index 1fe8c8a..6800bf7 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
@@ -46,7 +46,6 @@
         createDb();
     }
 
-    @SuppressLint("RestrictedApi")
     private void createDb() {
         mDatabase = Room.databaseBuilder(this.getApplication(), SampleDatabase.class,
                         "customerDatabase")
@@ -75,7 +74,6 @@
         return customer;
     }
 
-    @SuppressLint("RestrictedApi")
     void insertCustomer() {
         ArchTaskExecutor.getInstance().executeOnDiskIO(
                 () -> mDatabase.getCustomerDao().insert(createCustomer()));
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java
index c135800..4786b8f 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java
@@ -15,8 +15,6 @@
  */
 package androidx.paging.integration.testapp.room;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.paging.DataSource;
 import androidx.paging.ItemKeyedDataSource;
@@ -47,7 +45,6 @@
     /**
      * Create a DataSource from the customer table of the given database
      */
-    @SuppressLint("RestrictedApi")
     private LastNameAscCustomerDataSource(SampleDatabase db) {
         mDb = db;
         mCustomerDao = db.getCustomerDao();
@@ -61,7 +58,6 @@
     }
 
     @Override
-    @SuppressLint("RestrictedApi")
     public boolean isInvalid() {
         mDb.getInvalidationTracker().refreshVersionsSync();
         return super.isInvalid();
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt
index 5c202ee..32ffe30 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt
@@ -16,7 +16,6 @@
 
 package androidx.paging.integration.testapp.v3room
 
-import android.annotation.SuppressLint
 import android.app.Application
 import androidx.arch.core.executor.ArchTaskExecutor
 import androidx.lifecycle.AndroidViewModel
@@ -48,13 +47,11 @@
         return customer
     }
 
-    @SuppressLint("RestrictedApi")
     internal fun insertCustomer() {
         ArchTaskExecutor.getInstance()
             .executeOnDiskIO { database.customerDao.insert(createCustomer()) }
     }
 
-    @SuppressLint("RestrictedApi")
     internal fun clearAllCustomers() {
         ArchTaskExecutor.getInstance().executeOnDiskIO {
             database.runInTransaction {
diff --git a/paging/paging-common/build.gradle b/paging/paging-common/build.gradle
index be57c54..7601d0b 100644
--- a/paging/paging-common/build.gradle
+++ b/paging/paging-common/build.gradle
@@ -76,8 +76,8 @@
             dependsOn(commonTest)
             dependencies {
                 implementation(libs.junit)
-                implementation(libs.mockitoCore4)
-                implementation(libs.mockitoKotlin4)
+                implementation(libs.mockitoCore)
+                implementation(libs.mockitoKotlin)
                 implementation(project(":internal-testutils-common"))
                 implementation(project(":internal-testutils-ktx"))
             }
diff --git a/playground-common/playground.properties b/playground-common/playground.properties
index 846b428..3a1d1fe 100644
--- a/playground-common/playground.properties
+++ b/playground-common/playground.properties
@@ -25,6 +25,6 @@
 kotlin.code.style=official
 # Disable docs
 androidx.enableDocumentation=false
-androidx.playground.snapshotBuildId=10710650
+androidx.playground.snapshotBuildId=10844108
 androidx.playground.metalavaBuildId=10726547
 androidx.studio.type=playground
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
index e8985b4..42da8b0 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
@@ -140,7 +140,7 @@
 }
 
 androidx {
-    name = "androidx.privacysandbox.sdkruntime:sdkruntime-client"
+    name = "SdkRuntime Client"
     type = LibraryType.PUBLISHED_LIBRARY
     inceptionYear = "2022"
     description = "Provides components for SdkRuntime aware Applications"
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt
index a7e1317..5ee872d 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt
@@ -21,6 +21,7 @@
 import android.os.Binder
 import android.os.Build
 import android.os.Bundle
+import androidx.privacysandbox.sdkruntime.client.activity.LocalSdkActivityHandlerRegistry
 import androidx.privacysandbox.sdkruntime.client.activity.SdkActivity
 import androidx.privacysandbox.sdkruntime.client.loader.CatchingSdkActivityHandler
 import androidx.privacysandbox.sdkruntime.client.loader.asTestSdk
@@ -242,6 +243,31 @@
     }
 
     @Test
+    fun unloadSdk_unregisterActivityHandlers() {
+        val context = ApplicationProvider.getApplicationContext<Context>()
+        val managerCompat = SdkSandboxManagerCompat.from(context)
+
+        val packageName = TestSdkConfigs.forSdkName("v4").packageName
+        val localSdk = runBlocking {
+            managerCompat.loadSdk(
+                packageName,
+                Bundle()
+            )
+        }
+
+        val testSdk = localSdk.asTestSdk()
+        val token = testSdk.registerSdkSandboxActivityHandler(CatchingSdkActivityHandler())
+
+        val registeredBefore = LocalSdkActivityHandlerRegistry.isRegistered(token)
+        assertThat(registeredBefore).isTrue()
+
+        managerCompat.unloadSdk(packageName)
+
+        val registeredAfter = LocalSdkActivityHandlerRegistry.isRegistered(token)
+        assertThat(registeredAfter).isFalse()
+    }
+
+    @Test
     // TODO(b/249982507) DexmakerMockitoInline requires P+. Rewrite to support P-
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
     fun addSdkSandboxProcessDeathCallback_whenSandboxNotAvailable_dontDelegateToSandbox() {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt
index 3f49f5d..c94614e 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt
@@ -50,7 +50,10 @@
     @Test
     fun tryStart_whenHandlerRegistered_startSdkActivityAndReturnTrue() {
         val handler = TestHandler()
-        val registeredToken = LocalSdkActivityHandlerRegistry.register(handler)
+        val registeredToken = LocalSdkActivityHandlerRegistry.register(
+            "LocalSdkActivityStarterTest.sdk",
+            handler
+        )
 
         val startResult = with(ActivityScenario.launch(EmptyActivity::class.java)) {
             withActivity {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt
index e7e0b13..1d4260a 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt
@@ -43,7 +43,7 @@
     fun setUp() {
         locallyLoadedSdks = LocallyLoadedSdks()
         appOwnedSdkRegistry = StubAppOwnedSdkInterfaceRegistry()
-        controller = LocalController(locallyLoadedSdks, appOwnedSdkRegistry)
+        controller = LocalController(SDK_PACKAGE_NAME, locallyLoadedSdks, appOwnedSdkRegistry)
     }
 
     @Test
@@ -88,6 +88,34 @@
     }
 
     @Test
+    fun registerSdkSandboxActivityHandler_registerWithCorrectSdkPackageName() {
+        val token =
+            controller.registerSdkSandboxActivityHandler(object : SdkSandboxActivityHandlerCompat {
+                override fun onActivityCreated(activityHolder: ActivityHolder) {
+                    // do nothing
+                }
+            })
+
+        val anotherSdkController = LocalController(
+            "LocalControllerTest.anotherSdk",
+            locallyLoadedSdks,
+            appOwnedSdkRegistry
+        )
+        val anotherSdkHandler = object : SdkSandboxActivityHandlerCompat {
+            override fun onActivityCreated(activityHolder: ActivityHolder) {
+                // do nothing
+            }
+        }
+        val anotherSdkToken =
+            anotherSdkController.registerSdkSandboxActivityHandler(anotherSdkHandler)
+
+        LocalSdkActivityHandlerRegistry.unregisterAllActivityHandlersForSdk(SDK_PACKAGE_NAME)
+
+        assertThat(LocalSdkActivityHandlerRegistry.isRegistered(token)).isFalse()
+        assertThat(LocalSdkActivityHandlerRegistry.isRegistered(anotherSdkToken)).isTrue()
+    }
+
+    @Test
     fun unregisterSdkSandboxActivityHandler_delegateToLocalSdkActivityHandlerRegistry() {
         val handler = object : SdkSandboxActivityHandlerCompat {
             override fun onActivityCreated(activityHolder: ActivityHolder) {
@@ -129,4 +157,8 @@
         override fun getAppOwnedSdkSandboxInterfaces(): List<AppOwnedSdkSandboxInterfaceCompat> =
             appOwnedSdks
     }
+
+    companion object {
+        private const val SDK_PACKAGE_NAME = "LocalControllerTest.sdk"
+    }
 }
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
index 646f891..7fdaba7 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
@@ -304,7 +304,9 @@
             val sdkLoader = SdkLoader(
                 TestClassLoaderFactory(testStorage),
                 context,
-                controller
+                object : SdkLoader.ControllerFactory {
+                    override fun createControllerFor(sdkConfig: LocalSdkConfig) = controller
+                }
             )
             return sdkLoader.loadSdk(sdkConfig)
         }
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt
index e693b00..ff79f98 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt
@@ -50,7 +50,7 @@
         val context = ApplicationProvider.getApplicationContext<Context>()
         sdkLoader = SdkLoader.create(
             context = context,
-            controller = NoOpImpl(),
+            controllerFactory = NoOpFactory,
         )
         testSdkConfig = TestSdkConfigs.CURRENT_WITH_RESOURCES
 
@@ -127,7 +127,7 @@
         val context = ApplicationProvider.getApplicationContext<Context>()
         val sdkLoaderWithLowSpaceMode = SdkLoader.create(
             context = context,
-            controller = NoOpImpl(),
+            controllerFactory = NoOpFactory,
             lowSpaceThreshold = Long.MAX_VALUE
         )
 
@@ -141,7 +141,7 @@
     fun testLowSpace_notFailApi27() {
         val sdkLoaderWithLowSpaceMode = SdkLoader.create(
             context = ApplicationProvider.getApplicationContext(),
-            controller = NoOpImpl(),
+            controllerFactory = NoOpFactory,
             lowSpaceThreshold = Long.MAX_VALUE
         )
 
@@ -152,6 +152,10 @@
         assertThat(entryPointClass).isNotNull()
     }
 
+    private object NoOpFactory : SdkLoader.ControllerFactory {
+        override fun createControllerFor(sdkConfig: LocalSdkConfig) = NoOpImpl()
+    }
+
     private class NoOpImpl : SdkSandboxControllerCompat.SandboxControllerImpl {
         override fun getSandboxedSdks(): List<SandboxedSdkCompat> {
             throw UnsupportedOperationException("NoOp")
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt
index 8414411..e3106df 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt
@@ -29,10 +29,11 @@
 import androidx.annotation.RequiresApi
 import androidx.annotation.RequiresExtension
 import androidx.core.os.asOutcomeReceiver
+import androidx.privacysandbox.sdkruntime.client.activity.LocalSdkActivityHandlerRegistry
 import androidx.privacysandbox.sdkruntime.client.activity.LocalSdkActivityStarter
 import androidx.privacysandbox.sdkruntime.client.config.LocalSdkConfigsHolder
 import androidx.privacysandbox.sdkruntime.client.controller.AppOwnedSdkRegistry
-import androidx.privacysandbox.sdkruntime.client.controller.LocalController
+import androidx.privacysandbox.sdkruntime.client.controller.LocalControllerFactory
 import androidx.privacysandbox.sdkruntime.client.controller.LocallyLoadedSdks
 import androidx.privacysandbox.sdkruntime.client.controller.impl.LocalAppOwnedSdkRegistry
 import androidx.privacysandbox.sdkruntime.client.controller.impl.PlatformAppOwnedSdkRegistry
@@ -163,6 +164,7 @@
             platformApi.unloadSdk(sdkName)
         } else {
             localEntry.sdkProvider.beforeUnloadSdk()
+            LocalSdkActivityHandlerRegistry.unregisterAllActivityHandlersForSdk(sdkName)
         }
     }
 
@@ -450,8 +452,8 @@
                     } else {
                         LocalAppOwnedSdkRegistry()
                     }
-                    val controller = LocalController(localSdks, appOwnedSdkRegistry)
-                    val sdkLoader = SdkLoader.create(context, controller)
+                    val controllerFactory = LocalControllerFactory(localSdks, appOwnedSdkRegistry)
+                    val sdkLoader = SdkLoader.create(context, controllerFactory)
                     val platformApi = PlatformApiFactory.create(context)
                     instance = SdkSandboxManagerCompat(
                         platformApi,
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt
index 7b2b726..b3006b9 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt
@@ -32,22 +32,25 @@
     private val mapsLock = Any()
 
     @GuardedBy("mapsLock")
-    private val handlerToToken =
-        hashMapOf<SdkSandboxActivityHandlerCompat, IBinder>()
+    private val handlerToHandlerInfo =
+        hashMapOf<SdkSandboxActivityHandlerCompat, HandlerInfo>()
 
     @GuardedBy("mapsLock")
     private val tokenToHandler =
         hashMapOf<IBinder, SdkSandboxActivityHandlerCompat>()
 
-    fun register(handler: SdkSandboxActivityHandlerCompat): IBinder =
+    fun register(
+        sdkPackageName: String,
+        handler: SdkSandboxActivityHandlerCompat
+    ): IBinder =
         synchronized(mapsLock) {
-            val existingToken = handlerToToken[handler]
-            if (existingToken != null) {
-                return existingToken
+            val existingInfo = handlerToHandlerInfo[handler]
+            if (existingInfo != null) {
+                return existingInfo.token
             }
 
             val token = Binder()
-            handlerToToken[handler] = token
+            handlerToHandlerInfo[handler] = HandlerInfo(token, sdkPackageName)
             tokenToHandler[token] = handler
 
             return token
@@ -55,12 +58,23 @@
 
     fun unregister(handler: SdkSandboxActivityHandlerCompat) =
         synchronized(mapsLock) {
-            val unregisteredToken = handlerToToken.remove(handler)
-            if (unregisteredToken != null) {
-                tokenToHandler.remove(unregisteredToken)
+            val unregisteredInfo = handlerToHandlerInfo.remove(handler)
+            if (unregisteredInfo != null) {
+                tokenToHandler.remove(unregisteredInfo.token)
             }
         }
 
+    fun unregisterAllActivityHandlersForSdk(sdkPackageName: String) = synchronized(mapsLock) {
+        val it = handlerToHandlerInfo.values.iterator()
+        while (it.hasNext()) {
+            val next = it.next()
+            if (next.sdkPackageName == sdkPackageName) {
+                it.remove()
+                tokenToHandler.remove(next.token)
+            }
+        }
+    }
+
     fun isRegistered(token: IBinder): Boolean =
         synchronized(mapsLock) {
             return tokenToHandler.containsKey(token)
@@ -80,4 +94,9 @@
             ?: throw IllegalStateException("There is no registered handler to notify")
         handler.onActivityCreated(activityHolder)
     }
+
+    private data class HandlerInfo(
+        val token: IBinder,
+        val sdkPackageName: String
+    )
 }
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt
index 59cc703..c079804 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt
@@ -27,6 +27,7 @@
  * Local implementation that will be injected to locally loaded SDKs.
  */
 internal class LocalController(
+    private val sdkPackageName: String,
     private val locallyLoadedSdks: LocallyLoadedSdks,
     private val appOwnedSdkRegistry: AppOwnedSdkRegistry
 ) : SdkSandboxControllerCompat.SandboxControllerImpl {
@@ -41,7 +42,7 @@
     override fun registerSdkSandboxActivityHandler(
         handlerCompat: SdkSandboxActivityHandlerCompat
     ): IBinder {
-        return LocalSdkActivityHandlerRegistry.register(handlerCompat)
+        return LocalSdkActivityHandlerRegistry.register(sdkPackageName, handlerCompat)
     }
 
     override fun unregisterSdkSandboxActivityHandler(
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerFactory.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerFactory.kt
new file mode 100644
index 0000000..e6d1f0c
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerFactory.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2023 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 androidx.privacysandbox.sdkruntime.client.controller
+
+import androidx.privacysandbox.sdkruntime.client.config.LocalSdkConfig
+import androidx.privacysandbox.sdkruntime.client.loader.SdkLoader
+import androidx.privacysandbox.sdkruntime.core.controller.SdkSandboxControllerCompat
+
+/**
+ * Create [LocalController] instance for specific sdk.
+ */
+internal class LocalControllerFactory(
+    private val locallyLoadedSdks: LocallyLoadedSdks,
+    private val appOwnedSdkRegistry: AppOwnedSdkRegistry
+) : SdkLoader.ControllerFactory {
+    override fun createControllerFor(
+        sdkConfig: LocalSdkConfig
+    ): SdkSandboxControllerCompat.SandboxControllerImpl {
+        return LocalController(sdkConfig.packageName, locallyLoadedSdks, appOwnedSdkRegistry)
+    }
+}
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt
index 596830e..adf7a7ee 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt
@@ -29,13 +29,19 @@
 internal class SdkLoader internal constructor(
     private val classLoaderFactory: ClassLoaderFactory,
     private val appContext: Context,
-    private val controller: SdkSandboxControllerCompat.SandboxControllerImpl
+    private val controllerFactory: ControllerFactory
 ) {
 
     internal interface ClassLoaderFactory {
         fun createClassLoaderFor(sdkConfig: LocalSdkConfig, parent: ClassLoader): ClassLoader
     }
 
+    internal interface ControllerFactory {
+        fun createControllerFor(
+            sdkConfig: LocalSdkConfig
+        ): SdkSandboxControllerCompat.SandboxControllerImpl
+    }
+
     /**
      * Loading SDK in separate classloader:
      *  1. Create classloader for sdk;
@@ -94,6 +100,7 @@
         sdkVersion: Int,
         sdkConfig: LocalSdkConfig
     ): LocalSdkProvider {
+        val controller = controllerFactory.createControllerFor(sdkConfig)
         SandboxControllerInjector.inject(sdkClassLoader, sdkVersion, controller)
         return SdkProviderV1.create(sdkClassLoader, sdkConfig, appContext)
     }
@@ -120,7 +127,7 @@
          */
         fun create(
             context: Context,
-            controller: SdkSandboxControllerCompat.SandboxControllerImpl,
+            controllerFactory: ControllerFactory,
             lowSpaceThreshold: Long = 100 * 1024 * 1024
         ): SdkLoader {
             val cachedLocalSdkStorage = CachedLocalSdkStorage.create(
@@ -134,7 +141,7 @@
                     fallback = InMemorySdkClassLoaderFactory.create(context)
                 )
             )
-            return SdkLoader(classLoaderFactory, context, controller)
+            return SdkLoader(classLoaderFactory, context, controllerFactory)
         }
     }
 }
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/build.gradle b/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
index 2d6f9b2..3185bbd 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
@@ -51,9 +51,9 @@
 }
 
 androidx {
-    name = "androidx.privacysandbox.sdkruntime:sdkruntime-core"
+    name = "SdkRuntime Core"
     type = LibraryType.PUBLISHED_LIBRARY
     inceptionYear = "2022"
-    description = "Provides components for SdkRuntime aware SDKs"
+    description = "Provides shared components for SdkRuntime libraries"
     metalavaK2UastEnabled = true
 }
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt
index bcac996..48748c6 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt
@@ -164,34 +164,30 @@
         UiThreadStatement.runOnUiThread {
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.INITIALIZED)
-            activityLifecycleCallbackCaptor.value.onActivityCreated(activityMock, bundleMock)
+
+            activityLifecycleCallbackCaptor.value.onActivityPostCreated(activityMock, bundleMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.CREATED)
 
-            activityLifecycleCallbackCaptor.value.onActivityStarted(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPostStarted(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.STARTED)
 
-            activityLifecycleCallbackCaptor.value.onActivityResumed(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPostResumed(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.RESUMED)
 
-            activityLifecycleCallbackCaptor.value.onActivityPaused(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPrePaused(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.STARTED)
 
-            activityLifecycleCallbackCaptor.value.onActivityStopped(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPreStopped(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.CREATED)
 
-            activityLifecycleCallbackCaptor.value.onActivityDestroyed(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPreDestroyed(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.DESTROYED)
-
-            val currentState = activityHolderCaptor.value.lifecycle.currentState
-            activityLifecycleCallbackCaptor.value.onActivitySaveInstanceState(
-                activityMock, bundleMock)
-            assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(currentState)
         }
     }
 
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md
index 24cc6ec..6729e20 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md
@@ -4,4 +4,4 @@
 
 # Package androidx.privacysandbox.sdkruntime.core
 
-This package provides components for implementing SdkRuntime aware SDKs.
+This package provides shared components for implementing SdkRuntime aware Apps and SDKs.
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt
index 1ccf8de5..a143ea0 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt
@@ -96,33 +96,46 @@
 
         private fun proxyLifeCycleEvents() {
             val callback = object : Application.ActivityLifecycleCallbacks {
-                override fun onActivityCreated(p0: Activity, p1: Bundle?) {
-                    lifecycleRegistry.currentState = Lifecycle.State.CREATED
+                override fun onActivityCreated(activity: Activity, bundle: Bundle?) {}
+
+                override fun onActivityPostCreated(
+                    activity: Activity,
+                    savedInstanceState: Bundle?
+                ) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
                 }
 
-                override fun onActivityStarted(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.STARTED
+                override fun onActivityStarted(activity: Activity) {}
+
+                override fun onActivityPostStarted(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)
                 }
 
-                override fun onActivityResumed(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.RESUMED
+                override fun onActivityResumed(activity: Activity) {}
+
+                override fun onActivityPostResumed(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
                 }
 
-                override fun onActivityPaused(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.STARTED
+                override fun onActivityPrePaused(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
                 }
 
-                override fun onActivityStopped(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.CREATED
+                override fun onActivityPaused(activity: Activity) {}
+
+                override fun onActivityPreStopped(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP)
                 }
 
-                override fun onActivityDestroyed(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.DESTROYED
+                override fun onActivityStopped(activity: Activity) {}
+
+                override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
+
+                override fun onActivityPreDestroyed(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
                 }
 
-                override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
-                    // No need for proxying
-                }
+                override fun onActivityDestroyed(activity: Activity) {}
             }
             platformActivity.registerActivityLifecycleCallbacks(callback)
         }
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/api/current.txt b/privacysandbox/sdkruntime/sdkruntime-provider/api/current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/api/current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/api/res-current.txt b/privacysandbox/sdkruntime/sdkruntime-provider/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/api/res-current.txt
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/api/restricted_current.txt b/privacysandbox/sdkruntime/sdkruntime-provider/api/restricted_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle b/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle
new file mode 100644
index 0000000..02a5786
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+
+import androidx.build.LibraryType
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+    id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+    api project(path: ':privacysandbox:sdkruntime:sdkruntime-core')
+}
+
+android {
+    namespace "androidx.privacysandbox.sdkruntime.provider"
+}
+
+androidx {
+    name = "SdkRuntime Provider"
+    type = LibraryType.PUBLISHED_LIBRARY
+    inceptionYear = "2023"
+    description = "Provides components for SdkRuntime aware SDKs"
+}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/privacysandbox/sdkruntime/sdkruntime-provider/src/main/java/androidx/privacysandbox/sdkruntime/provider/package-info.java
similarity index 70%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to privacysandbox/sdkruntime/sdkruntime-provider/src/main/java/androidx/privacysandbox/sdkruntime/provider/package-info.java
index 40b8f5b..e0778fd 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/src/main/java/androidx/privacysandbox/sdkruntime/provider/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2023 The Android Open Source Project
+ * Copyright (C) 2023 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.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
-
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+/**
+ * This package provides components for implementing SdkRuntime aware SDKs.
+ */
+package androidx.privacysandbox.sdkruntime.provider;
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
index 4722066..194a413 100644
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
+++ b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
@@ -79,10 +79,26 @@
      * [LocalAdapter] fetches UI from a provider living on same process as the client but on a
      * different class loader.
      */
-    private class LocalAdapter(private val adapterInterface: ISandboxedUiAdapter) :
+    private class LocalAdapter(adapterInterface: ISandboxedUiAdapter) :
         SandboxedUiAdapter {
         private val uiProviderBinder = adapterInterface.asBinder()
 
+        private val targetSessionClientClass = Class.forName(
+            SandboxedUiAdapter.SessionClient::class.java.name,
+            /* initialize = */ false,
+            uiProviderBinder.javaClass.classLoader
+        )
+
+        // The adapterInterface provided must have a openSession method on its class.
+        // Since the object itself has been instantiated on a different classloader, we
+        // need reflection to get hold of it.
+        private val openSessionMethod: Method = Class.forName(
+            SandboxedUiAdapter::class.java.name,
+            /*initialize=*/ false,
+            uiProviderBinder.javaClass.classLoader
+        ).getMethod("openSession", Context::class.java, IBinder::class.java, Int::class.java,
+            Int::class.java, Boolean::class.java, Executor::class.java, targetSessionClientClass)
+
         @SuppressLint("BanUncheckedReflection") // using reflection on library classes
         override fun openSession(
             context: Context,
@@ -94,28 +110,13 @@
             client: SandboxedUiAdapter.SessionClient
         ) {
             try {
-                // openSession call needs to be forwarded to uiProvider object instantiated
-                // on a different classloader.
-                val uiProviderClassLoader = uiProviderBinder.javaClass.classLoader
-                val classOnUiProviderClassLoader = Class.forName(uiProviderBinder::class.java.name,
-                        /*initialize=*/false, uiProviderBinder.javaClass.classLoader)
-                val openSessionMethod = classOnUiProviderClassLoader.methods.first {
-                        method -> method.name.equals("openSession")
-                }
-
                 // We can't pass the client object as-is since it's been created on a different
                 // classloader.
-                val targetSessionClientClass = Class.forName(
-                    SandboxedUiAdapter.SessionClient::class.java.name,
-                    /*initialize=*/ false,
-                    uiProviderClassLoader
-                )
                 val sessionClientProxy = Proxy.newProxyInstance(
-                    uiProviderClassLoader,
+                    uiProviderBinder.javaClass.classLoader,
                     arrayOf(targetSessionClientClass),
                     SessionClientProxyHandler(client)
                 )
-
                 openSessionMethod.invoke(uiProviderBinder, context, windowInputToken, initialWidth,
                         initialHeight, isZOrderOnTop, clientExecutor, sessionClientProxy)
             } catch (exception: Throwable) {
@@ -123,53 +124,35 @@
             }
         }
 
-        private inner class SessionClientProxyHandler(
+        private class SessionClientProxyHandler(
             private val origClient: SandboxedUiAdapter.SessionClient,
         ) : InvocationHandler {
 
             @SuppressLint("BanUncheckedReflection") // using reflection on library classes
-            override fun invoke(proxy: Any, method: Method, args: Array<Any>?): Any? {
+            override fun invoke(proxy: Any, method: Method, args: Array<Any>?): Any {
                 return when (method.name) {
                     "onSessionOpened" -> {
-                        args!! // This method will always have an argument, so safe to !!
-
                         // We have to forward the call to original client, but it won't
-                        // recognize Session class on targetClassLoader. We need another proxy.
-                        val origSessionClass = Class.forName(
-                            SandboxedUiAdapter.Session::class.java.name,
-                            /*initialize=*/ false,
-                            origClient.javaClass.classLoader
-                        )
-                        val sessionProxy = Proxy.newProxyInstance(
-                            origClient.javaClass.classLoader,
-                            arrayOf(origSessionClass),
-                            SessionProxyHandler(args[0])
-                        )
-
-                        val methodOrig = origClient.javaClass.getMethod("onSessionOpened",
-                        SandboxedUiAdapter.Session::class.java)
-                        methodOrig.invoke(origClient, sessionProxy)
+                        // recognize Session class on targetClassLoader. We need proxy for it
+                        // on local ClassLoader.
+                        args!! // This method will always have an argument, so safe to !!
+                        origClient.onSessionOpened(SessionProxy(args[0]))
                     }
                     "onSessionError" -> {
                         args!! // This method will always have an argument, so safe to !!
-
                         val throwable = args[0] as Throwable
-                        val methodOrig = origClient.javaClass.getMethod("onSessionError",
-                        Throwable::class.java)
-                        methodOrig.invoke(origClient, throwable)
+                        origClient.onSessionError(throwable)
                     }
                     "onResizeRequested" -> {
                         args!! // This method will always have an argument, so safe to !!
-
-                        val methodOrig = origClient.javaClass.getMethod("onResizeRequested",
-                                Int::class.java, Int::class.java)
-                        methodOrig.invoke(origClient, args[0], args[1])
+                        val width = args[0] as Int
+                        val height = args[1] as Int
+                        origClient.onResizeRequested(width, height)
                     }
-                    "toString" -> {
-                        origClient.javaClass.getMethod("toString").invoke(origClient)
-                    }
+                    "toString" -> origClient.toString()
+                    "equals" -> proxy === args?.get(0)
+                    "hashCode" -> hashCode()
                     else -> {
-                        // TODO(b/282918647): Implement other methods required
                         throw UnsupportedOperationException(
                             "Unexpected method call object:$proxy, method: $method, args: $args"
                         )
@@ -179,52 +162,51 @@
         }
 
         /**
-         * Create [SandboxedUiAdapter.Session] on [targetClassLoader] that proxies to [origClient]
+         * Create [SandboxedUiAdapter.Session] that proxies to [origSession]
          */
-        private inner class SessionProxyHandler(
-                private val origClient: Any,
-            ) : InvocationHandler {
+        private class SessionProxy(
+            private val origSession: Any,
+        ) : SandboxedUiAdapter.Session {
+
+            private val targetClass = Class.forName(
+                SandboxedUiAdapter.Session::class.java.name,
+                /* initialize = */ false,
+                origSession.javaClass.classLoader
+            ).also {
+                it.cast(origSession)
+            }
+
+            private val getViewMethod = targetClass.getMethod("getView")
+            private val notifyResizedMethod = targetClass.getMethod(
+                "notifyResized", Int::class.java, Int::class.java)
+            private val notifyZOrderChangedMethod =
+                targetClass.getMethod("notifyZOrderChanged", Boolean::class.java)
+            private val notifyConfigurationChangedMethod = targetClass.getMethod(
+                "notifyConfigurationChanged", Configuration::class.java)
+            private val closeMethod = targetClass.getMethod("close")
+
+            override val view: View
+                @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+                get() = getViewMethod.invoke(origSession) as View
 
             @SuppressLint("BanUncheckedReflection") // using reflection on library classes
-            override fun invoke(proxy: Any, method: Method, args: Array<Any>?): Any? {
-                return when (method.name) {
-                    "close" -> {
-                        origClient.javaClass.getMethod("close").invoke(origClient)
-                    }
-                    "getView" -> {
-                        origClient.javaClass.getMethod("getView").invoke(origClient)
-                    }
-                    "notifyResized" -> {
-                        args!! // This method will always have an argument, so safe to !!
+            override fun notifyResized(width: Int, height: Int) {
+                notifyResizedMethod.invoke(origSession, width, height)
+            }
 
-                        val methodOrig = origClient.javaClass.getMethod("notifyResized",
-                                Int::class.java, Int::class.java)
-                        methodOrig.invoke(origClient, args[0], args[1])
-                    }
-                    "notifyZOrderChanged" -> {
-                        args!! // This method will always have an argument, so safe to !!
+            @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+            override fun notifyZOrderChanged(isZOrderOnTop: Boolean) {
+                notifyZOrderChangedMethod.invoke(origSession, isZOrderOnTop)
+            }
 
-                        val methodOrig = origClient.javaClass.getMethod("notifyZOrderChanged",
-                                Boolean::class.java)
-                        methodOrig.invoke(origClient, args[0])
-                    }
-                    "notifyConfigurationChanged" -> {
-                        args!! // This method will always have an argument, so safe to !!
+            @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+            override fun notifyConfigurationChanged(configuration: Configuration) {
+                notifyConfigurationChangedMethod.invoke(origSession, configuration)
+            }
 
-                        val methodOrig = origClient.javaClass.getMethod(
-                            "notifyConfigurationChanged", Configuration::class.java)
-                        methodOrig.invoke(origClient, args[0])
-                    }
-                    "toString" -> {
-                        origClient.javaClass.getMethod("toString").invoke(origClient)
-                    }
-                    else -> {
-                        // TODO(b/282918647): Implement other methods required
-                        throw UnsupportedOperationException(
-                            "Unexpected method call object:$proxy, method: $method, args: $args"
-                        )
-                    }
-                }
+            @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+            override fun close() {
+                closeMethod.invoke(origSession)
             }
         }
     }
diff --git a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
index 77138eb..5134d71 100644
--- a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
+++ b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
@@ -55,14 +55,14 @@
 private class BinderAdapterDelegate(
     private val sandboxContext: Context,
     private val adapter: SandboxedUiAdapter
-) : ISandboxedUiAdapter.Stub() {
+) : ISandboxedUiAdapter.Stub(), SandboxedUiAdapter {
 
     companion object {
         private const val TAG = "BinderAdapterDelegate"
         private const val FRAME_TIMEOUT_MILLIS = 1000.toLong()
     }
 
-    fun openSession(
+    override fun openSession(
         context: Context,
         windowInputToken: IBinder,
         initialWidth: Int,
diff --git a/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt b/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt
index 600af27..cc642bb 100644
--- a/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt
+++ b/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt
@@ -66,6 +66,8 @@
     companion object {
         const val TEST_ONLY_USE_REMOTE_ADAPTER = "testOnlyUseRemoteAdapter"
         const val TIMEOUT = 1000.toLong()
+        const val INITIAL_HEIGHT = 10
+        const val INITIAL_WIDTH = 20
 
         @JvmStatic
         @Parameterized.Parameters(name = "{index}: invokeBackwardsCompatFlow={0}")
@@ -107,12 +109,7 @@
     @Ignore // b/271299184
     @Test
     fun testChangingSandboxedSdkViewLayoutChangesChildLayout() {
-        val adapter = TestSandboxedUiAdapter(
-            false /* hasFailiningTestSession */
-        )
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val userRemoteAdapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(userRemoteAdapter)
+        createAdapterAndEstablishSession()
 
         val layoutChangeLatch = CountDownLatch(1)
         val childAddedLatch = CountDownLatch(1)
@@ -135,10 +132,10 @@
                     top: Int,
                     right: Int,
                     bottom: Int,
-                    old_left: Int,
-                    old_top: Int,
-                    old_right: Int,
-                    old_bottom: Int
+                    oldLeft: Int,
+                    oldTop: Int,
+                    oldRight: Int,
+                    oldBottom: Int
                 ) {
                     assertTrue(left == 10 && top == 10 && right == 10 && bottom == 10)
                     layoutChangeLatch.countDown()
@@ -156,51 +153,19 @@
 
     @Test
     fun testOpenSession_onSetAdapter() {
-        val adapter = TestSandboxedUiAdapter(false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val userRemoteAdapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(userRemoteAdapter)
-
-        assertWithMessage("openSession is called on adapter")
-                .that(adapter.isOpenSessionCalled).isTrue()
-        var isSessionInitialised = try {
-            adapter.session
-            true
-        } catch (e: UninitializedPropertyAccessException) {
-            false
-        }
-        assertTrue(isSessionInitialised)
+        val adapter = createAdapterAndEstablishSession()
+        assertThat(adapter.session).isNotNull()
     }
 
     @Test
     fun testOpenSession_fromAdapter() {
-        val adapter = TestSandboxedUiAdapter(false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        val testSessionClient = TestSessionClient()
-
-        adapterFromCoreLibInfo.openSession(
-            context,
-            Binder(),
-            10 /* initialWidth */,
-            10 /* initialHeight */,
-            true,
-            Runnable::run,
-            testSessionClient
-        )
-
-        assertThat(adapter.isOpenSessionCalled).isTrue()
-        assertThat(testSessionClient.isSessionOpened).isTrue()
+        val adapter = createAdapterAndEstablishSession(viewForSession = null)
+        assertThat(adapter.session).isNotNull()
     }
 
     @Test
     fun testConfigurationChanged() {
-        val sdkAdapter = TestSandboxedUiAdapter(/*hasfailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(sdkAdapter)
-        val adapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-
-        view.setAdapter(adapter)
-        assertThat(sdkAdapter.isOpenSessionCalled).isTrue()
+        val sdkAdapter = createAdapterAndEstablishSession()
 
         activity.runOnUiThread {
             activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
@@ -216,11 +181,7 @@
      */
     @Test
     fun testZOrderChanged() {
-        val adapter = TestSandboxedUiAdapter(/* hasFailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(adapterFromCoreLibInfo)
-        assertThat(adapter.isOpenSessionCalled).isTrue()
+        val adapter = createAdapterAndEstablishSession()
 
         view.orderProviderUiAboveClientUi(!adapter.initialZOrderOnTop)
         val testSession = adapter.session as TestSandboxedUiAdapter.TestSession
@@ -232,11 +193,7 @@
      */
     @Test
     fun testZOrderUnchanged() {
-        val adapter = TestSandboxedUiAdapter(/* hasFailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(adapterFromCoreLibInfo)
-        assertThat(adapter.isOpenSessionCalled).isTrue()
+        val adapter = createAdapterAndEstablishSession()
 
         view.orderProviderUiAboveClientUi(adapter.initialZOrderOnTop)
         val testSession = adapter.session as TestSandboxedUiAdapter.TestSession
@@ -245,7 +202,7 @@
 
     @Test
     fun testHostCanSetZOrderAboveBeforeOpeningSession() {
-        val adapter = openSessionAndWaitToBeActive(true)
+        val adapter = createAdapterAndWaitToBeActive(initialZOrder = true)
         injectInputEventOnView()
         // the injected touch should be handled by the provider in Z-above mode
         assertThat(adapter.touchedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
@@ -253,10 +210,10 @@
 
     @Test
     fun testHostCanSetZOrderBelowBeforeOpeningSession() {
-        // TODO(b/300396631): Skip for backward compats
+        // TODO(b/300396631): Skip for backward compat
         assumeTrue(!invokeBackwardsCompatFlow)
 
-        val adapter = openSessionAndWaitToBeActive(false)
+        val adapter = createAdapterAndWaitToBeActive(initialZOrder = false)
         injectInputEventOnView()
         // the injected touch should not reach the provider in Z-below mode
         assertThat(adapter.touchedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
@@ -264,68 +221,71 @@
 
     @Test
     fun testSessionError() {
-        val adapter = TestSandboxedUiAdapter(true)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterThatFailsToCreateUi =
-            SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(adapterThatFailsToCreateUi)
+        createAdapterAndEstablishSession(hasFailingTestSession = true)
+
         assertThat(errorLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
         assertThat(stateChangeListener.error?.message).isEqualTo("Test Session Exception")
     }
 
     // TODO(b/300056633): Replace with actual e2e test flow that triggers resize request
     @Test
-    fun test_ProviderInitiatedResize_ReceivedByClient() {
-        val sdkAdapter = TestSandboxedUiAdapter(/*hasfailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(sdkAdapter)
-        val adapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
+    fun testResize_ProviderInitiated_ReceivedByClient() {
         val testSessionClient = TestSessionClient()
-
-        adapter.openSession(
-            context,
-            Binder(),
-            /*initialWidth=*/ 10,
-            /*initialHeight=*/ 10,
-            true,
-            Runnable::run,
-            testSessionClient
+        val sdkAdapter = createAdapterAndEstablishSession(
+            viewForSession = null,
+            testSessionClient = testSessionClient
         )
-        assertThat(testSessionClient.isSessionOpened).isTrue()
 
         // Request resize from Session side
         val testSession = sdkAdapter.session as TestSandboxedUiAdapter.TestSession
-        testSession.sessionClient.onResizeRequested(20, 30)
+        testSession.sessionClient.onResizeRequested(INITIAL_WIDTH + 10, INITIAL_HEIGHT + 10)
 
         // Verify SessionClient received the request
-        assertWithMessage("Resized width").that(testSessionClient.resizedWidth).isEqualTo(20)
-        assertWithMessage("Resized height").that(testSessionClient.resizedHeight).isEqualTo(30)
+        assertWithMessage("Resized width").that(testSessionClient.resizedWidth)
+            .isEqualTo(INITIAL_WIDTH + 10)
+        assertWithMessage("Resized height").that(testSessionClient.resizedHeight)
+            .isEqualTo(INITIAL_HEIGHT + 10)
     }
 
     // TODO(b/300056633): Replace with actual e2e test flow that triggers resize request
     @Test
-    fun test_ClientInitiatedResize_ReceivedByProvider() {
-        val sdkAdapter = TestSandboxedUiAdapter(/*hasfailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(sdkAdapter)
-        val adapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
+    fun testResize_ClientInitiated_ReceivedByProvider() {
         val testSessionClient = TestSessionClient()
-        adapter.openSession(
-            context,
-            Binder(),
-            /*initialWidth=*/ 10,
-            /*initialHeight=*/ 10,
-            true,
-            Runnable::run,
-            testSessionClient
+        val sdkAdapter = createAdapterAndEstablishSession(
+            viewForSession = null,
+            testSessionClient = testSessionClient
         )
-        assertThat(testSessionClient.isSessionOpened).isTrue()
 
         // Notify resized from the client
-        testSessionClient.session.notifyResized(20, 30)
+        testSessionClient.session?.notifyResized(INITIAL_WIDTH + 10, INITIAL_HEIGHT + 10)
 
         // Verify Session received the request
         val testSession = sdkAdapter.session as TestSandboxedUiAdapter.TestSession
-        assertWithMessage("Resized width").that(testSession.resizedWidth).isEqualTo(20)
-        assertWithMessage("Resized height").that(testSession.resizedHeight).isEqualTo(30)
+        assertWithMessage("Resized width").that(testSession.resizedWidth)
+            .isEqualTo(INITIAL_WIDTH + 10)
+        assertWithMessage("Resized height").that(testSession.resizedHeight)
+            .isEqualTo(INITIAL_HEIGHT + 10)
+    }
+
+    @Test
+    fun testSessionClientProxy_methodsOnObjectClass() {
+        // Only makes sense when a dynamic proxy is involved in the flow
+        assumeTrue(invokeBackwardsCompatFlow)
+
+        val testSessionClient = TestSessionClient()
+        val sdkAdapter = createAdapterAndEstablishSession(
+            viewForSession = null,
+            testSessionClient = testSessionClient
+        )
+
+        // Verify toString, hashCode and equals have been implemented for dynamic proxy
+        val testSession = sdkAdapter.session as TestSandboxedUiAdapter.TestSession
+        val client = testSession.sessionClient
+        assertThat(client.toString()).isEqualTo(testSessionClient.toString())
+
+        assertThat(client.equals(client)).isTrue()
+        assertThat(client).isNotEqualTo(testSessionClient)
+        assertThat(client.hashCode()).isEqualTo(client.hashCode())
     }
 
     private fun getCoreLibInfoFromAdapter(sdkAdapter: SandboxedUiAdapter): Bundle {
@@ -334,12 +294,50 @@
         return bundle
     }
 
-    private fun openSessionAndWaitToBeActive(initialZOrder: Boolean): TestSandboxedUiAdapter {
-        val adapter = TestSandboxedUiAdapter(/*hasFailingTestSession=*/ false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
+    /**
+     * Creates a [TestSandboxedUiAdapter] and establishes session.
+     *
+     * If [view] is null, then session is opened using the adapter directly. Otherwise, the
+     * created adapter is set on [view] to establish session.
+     */
+    private fun createAdapterAndEstablishSession(
+            hasFailingTestSession: Boolean = false,
+            viewForSession: SandboxedSdkView? = view,
+            testSessionClient: TestSessionClient = TestSessionClient()
+        ): TestSandboxedUiAdapter {
+
+        val adapter = TestSandboxedUiAdapter(hasFailingTestSession)
+        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(
+            getCoreLibInfoFromAdapter(adapter)
+        )
+        if (viewForSession != null) {
+            viewForSession.setAdapter(adapterFromCoreLibInfo)
+        } else {
+            adapterFromCoreLibInfo.openSession(
+                context,
+                windowInputToken = Binder(),
+                INITIAL_WIDTH,
+                INITIAL_HEIGHT,
+                isZOrderOnTop = true,
+                clientExecutor = Runnable::run,
+                testSessionClient
+            )
+        }
+
+        assertWithMessage("openSession is called on adapter")
+            .that(adapter.isOpenSessionCalled).isTrue()
+        if (viewForSession == null) {
+            assertWithMessage("onSessionOpened received by SessionClient")
+                .that(testSessionClient.isSessionOpened).isTrue()
+        }
+        return adapter
+    }
+
+    private fun createAdapterAndWaitToBeActive(initialZOrder: Boolean): TestSandboxedUiAdapter {
         view.orderProviderUiAboveClientUi(initialZOrder)
-        view.setAdapter(adapterFromCoreLibInfo)
+
+        val adapter = createAdapterAndEstablishSession()
+
         val activeLatch = CountDownLatch(1)
         view.addStateChangedListener { state ->
             if (state is SandboxedSdkUiSessionState.Active) {
@@ -385,7 +383,7 @@
      *  If [hasFailingTestSession] is true, the fake server side logic returns error.
      */
     class TestSandboxedUiAdapter(
-        private val hasFailingTestSession: Boolean
+        private val hasFailingTestSession: Boolean = false
     ) : SandboxedUiAdapter {
 
         private val openSessionLatch: CountDownLatch = CountDownLatch(1)
@@ -511,7 +509,11 @@
         private val sessionOpenedLatch = CountDownLatch(1)
         private val resizeRequestedLatch = CountDownLatch(1)
 
-        lateinit var session: SandboxedUiAdapter.Session
+        var session: SandboxedUiAdapter.Session? = null
+            get() {
+                sessionOpenedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)
+                return field
+            }
 
         val isSessionOpened: Boolean
             get() = sessionOpenedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
index d025f34..74a92c3 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
@@ -46,9 +46,9 @@
             // synthesize a source to trigger compilation
             listOf(
                 Source.java(
-                    qName = "foo.bar.SyntheticSource",
+                    qName = "xprocessing.generated.SyntheticSource",
                     code = """
-                    package foo.bar;
+                    package xprocessing.generated;
                     public class SyntheticSource {}
                     """.trimIndent()
                 )
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt
index 6d7cca4..b8f60a7 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt
@@ -56,4 +56,14 @@
      * representing this container does not exist (e.g. a top level Kotlin source file)
      */
     val type: XType?
+
+    /**
+     * Returns true if this member container's origin is Java source or class
+     */
+    fun isFromJava(): Boolean
+
+    /**
+     * Returns true if this member container's origin is Kotlin source or class
+     */
+    fun isFromKotlin(): Boolean
 }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
index 4b1a7e9..ec76f56 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
@@ -225,5 +225,14 @@
      */
     fun getTypeElementsFromPackage(packageName: String): List<XTypeElement>
 
-    // TODO: Add support for getting top level members in a package
+    /**
+     * Returns [XElement]s with the given package name. Note that this call can be expensive.
+     *
+     * @param packageName the package name to look up.
+     *
+     * @return A list of [XElement] with matching package name. This will return declarations
+     * from both dependencies and source. If the package is not found an empty list will be
+     * returned.
+     */
+    fun getElementsFromPackage(packageName: String): List<XElement>
 }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt
index 1f614c7..9151355 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt
@@ -94,6 +94,10 @@
             .map { wrapTypeElement(it) }
     }
 
+    override fun getElementsFromPackage(packageName: String): List<XElement> {
+        return getTypeElementsFromPackage(packageName)
+    }
+
     override fun findType(qName: String): XType? {
         // check for primitives first
         PRIMITIVE_TYPES[qName]?.let {
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
index 506fcb2..f404202 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
@@ -276,6 +276,14 @@
         }
     }
 
+    override fun isFromJava(): Boolean {
+        return element.asType().kind != TypeKind.ERROR && !hasAnnotation(Metadata::class)
+    }
+
+    override fun isFromKotlin(): Boolean {
+        return element.asType().kind != TypeKind.ERROR && hasAnnotation(Metadata::class)
+    }
+
     class DefaultJavacTypeElement(
         env: JavacProcessingEnv,
         element: TypeElement
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt
index 7a61c7b..cd86cce 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt
@@ -103,4 +103,8 @@
             }?.value?.toString() ?: fileName.replace(".kt", "Kt")
         }
     }
+
+    override fun isFromJava(): Boolean = false
+
+    override fun isFromKotlin(): Boolean = true
 }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
index dafd994..b1bd1eac 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
@@ -17,6 +17,7 @@
 package androidx.room.compiler.processing.ksp
 
 import androidx.room.compiler.processing.XConstructorType
+import androidx.room.compiler.processing.XElement
 import androidx.room.compiler.processing.XExecutableType
 import androidx.room.compiler.processing.XFiler
 import androidx.room.compiler.processing.XMessager
@@ -35,6 +36,8 @@
 import com.google.devtools.ksp.symbol.KSAnnotation
 import com.google.devtools.ksp.symbol.KSClassDeclaration
 import com.google.devtools.ksp.symbol.KSFile
+import com.google.devtools.ksp.symbol.KSFunctionDeclaration
+import com.google.devtools.ksp.symbol.KSPropertyDeclaration
 import com.google.devtools.ksp.symbol.KSType
 import com.google.devtools.ksp.symbol.KSTypeAlias
 import com.google.devtools.ksp.symbol.KSTypeArgument
@@ -203,6 +206,18 @@
         return arrayTypeFactory.createWithComponentType(type)
     }
 
+    @OptIn(KspExperimental::class)
+    override fun getElementsFromPackage(packageName: String): List<XElement> {
+        return resolver.getDeclarationsFromPackage(packageName).map {
+            when (it) {
+                is KSClassDeclaration -> wrapClassDeclaration(it)
+                is KSPropertyDeclaration -> KspFieldElement.create(this, it)
+                is KSFunctionDeclaration -> KspMethodElement.create(this, it)
+                else -> error("Unknown element type")
+            }
+        }.toList()
+    }
+
     /**
      * Wraps the given `ksType`.
      *
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
index 51f1463..9d4aba5 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
@@ -49,7 +49,9 @@
 import com.google.devtools.ksp.symbol.KSPropertyDeclaration
 import com.google.devtools.ksp.symbol.KSValueParameter
 import com.google.devtools.ksp.symbol.Modifier
+import com.google.devtools.ksp.symbol.Origin.JAVA
 import com.google.devtools.ksp.symbol.Origin.JAVA_LIB
+import com.google.devtools.ksp.symbol.Origin.KOTLIN
 import com.google.devtools.ksp.symbol.Origin.KOTLIN_LIB
 import com.squareup.javapoet.ClassName
 import com.squareup.kotlinpoet.javapoet.JClassName
@@ -396,6 +398,20 @@
             .toList()
     }
 
+    override fun isFromJava(): Boolean {
+        return when (declaration.origin) {
+            JAVA, JAVA_LIB -> true
+            else -> false
+        }
+    }
+
+    override fun isFromKotlin(): Boolean {
+        return when (declaration.origin) {
+            KOTLIN, KOTLIN_LIB -> true
+            else -> false
+        }
+    }
+
     private class DefaultKspTypeElement(
         env: KspProcessingEnv,
         declaration: KSClassDeclaration
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt
index cb2432f..958c1df 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt
@@ -120,4 +120,8 @@
     override fun hasAnnotationWithPackage(pkg: String): Boolean {
         return false
     }
+
+    override fun isFromJava(): Boolean = false
+
+    override fun isFromKotlin(): Boolean = true
 }
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt
index 1763a8b..e83bbbe 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt
@@ -30,6 +30,7 @@
 import androidx.room.compiler.processing.util.XTestInvocation
 import androidx.room.compiler.processing.util.asJClassName
 import androidx.room.compiler.processing.util.compileFiles
+import androidx.room.compiler.processing.util.getDeclaredField
 import androidx.room.compiler.processing.util.getField
 import androidx.room.compiler.processing.util.getMethodByJvmName
 import androidx.room.compiler.processing.util.getParameter
@@ -1030,6 +1031,185 @@
         }
     }
 
+    @Test
+    fun isFromJavaOrKotlin() {
+        val javaSource = Source.java(
+            "foo.bar.Foo",
+            """
+            package foo.bar;
+            class Foo {
+                void f(String a) {}
+                static class Nested {}
+            }
+            """.trimIndent()
+        )
+        val kotlinSource = Source.kotlin(
+            "Bar.kt",
+            """
+            package foo.bar
+            fun tlf(a: String) = "hello"
+            class Bar {
+                var p: String = "hello"
+                fun f(a: String) {}
+                suspend fun sf(a: String) {}
+                class Nested
+            }
+            fun Bar.ef(a: String) {}
+            """.trimIndent()
+        )
+        runProcessorTestHelper(
+            listOf(javaSource, kotlinSource)
+        ) { invocation, _ ->
+            // Java
+            invocation.processingEnv.requireTypeElement("foo.bar.Foo").let {
+                assertThat(it.closestMemberContainer.isFromJava()).isTrue()
+                assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+                it.getMethodByJvmName("f").let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isTrue()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+                }
+            }
+            invocation.processingEnv.requireTypeElement("foo.bar.Foo.Nested").let {
+                assertThat(it.closestMemberContainer.isFromJava()).isTrue()
+                assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+            }
+
+            // Kotlin
+            invocation.processingEnv.requireTypeElement("foo.bar.Bar").let {
+                assertThat(it.isFromJava()).isFalse()
+                assertThat(it.isFromKotlin()).isTrue()
+                it.getDeclaredField("p").let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                    it.setter!!.let {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                    }
+                    it.getter!!.let {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                    }
+                }
+                it.getMethodByJvmName("f").let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+                    it.parameters.single().let {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                    }
+                }
+                it.getMethodByJvmName("sf").let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+                    it.parameters.forEach {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                    }
+                }
+            }
+            invocation.processingEnv.requireTypeElement("foo.bar.Bar.Nested").let {
+                assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+            }
+
+            // Kotlin top-level elements
+            if (invocation.isKsp) {
+                val topLevelElements = invocation.processingEnv.getElementsFromPackage("foo.bar")
+                topLevelElements.single {
+                    it.name == "tlf"
+                }.let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                }
+                topLevelElements.single {
+                    it.name == "ef"
+                }.let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                    (it as XMethodElement).parameters.forEach {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                    }
+                }
+            } else {
+                invocation.processingEnv.requireTypeElement("foo.bar.BarKt").let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+                    it.getMethodByJvmName("tlf").let {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+                        it.parameters.single().let {
+                            assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                            assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                        }
+                    }
+
+                    it.getMethodByJvmName("ef").let {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+                        it.parameters.forEach {
+                            assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                            assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Test
+    fun isFromJavaOrKotlinErrorTypes() {
+        val javaSource = Source.java(
+            "foo.bar.Foo",
+            """
+            package foo.bar;
+            class Foo {
+                DoNotExist ep;
+            }
+            """.trimIndent()
+        )
+        val kotlinSource = Source.kotlin(
+            "Bar.kt",
+            """
+            package foo.bar
+            class Bar {
+                val ep: DoNotExist = TODO()
+            }
+            """.trimIndent()
+        )
+        // Can't use runProcessorTestHelper() as we can't compile the files referencing an
+        // error type
+        runProcessorTest(
+            listOf(javaSource, kotlinSource)
+        ) { invocation ->
+            // Java
+            invocation.processingEnv.requireTypeElement("foo.bar.Foo").let {
+                it.getField("ep").type.typeElement!!.let {
+                    assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                    assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+                }
+            }
+
+            // Kotlin
+            invocation.processingEnv.requireTypeElement("foo.bar.Bar").let {
+                it.getField("ep").type.typeElement!!.let {
+                    if (invocation.isKsp) {
+                        assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+                        assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+                    }
+                }
+            }
+            invocation.assertCompilationResult {
+                compilationDidFail()
+            }
+        }
+    }
+
     private val enclosingElementJavaSource = Source.java(
         "foo.bar.Test",
         """
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt
index 6a33c86..f123888 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt
@@ -22,6 +22,7 @@
 import androidx.room.compiler.codegen.XTypeName
 import androidx.room.compiler.processing.testcode.OtherAnnotation
 import androidx.room.compiler.processing.util.Source
+import androidx.room.compiler.processing.util.compileFiles
 import androidx.room.compiler.processing.util.getDeclaredMethodByJvmName
 import androidx.room.compiler.processing.util.runKspTest
 import androidx.room.compiler.processing.util.runProcessorTest
@@ -279,7 +280,7 @@
     }
 
     @Test
-    fun getElementsFromPackageIncludesSources() {
+    fun getTypeElementsFromPackageIncludesSources() {
         val source = Source.kotlin(
             "foo/Baz.kt",
             """
@@ -295,12 +296,12 @@
             )
             assertThat(
                 elements
-            ).contains(targetElement)
+            ).containsExactly(targetElement)
         }
     }
 
     @Test
-    fun getElementsFromPackageIncludesBinaries() {
+    fun getTypeElementsFromPackageIncludesBinaries() {
         runProcessorTest { testInvocation ->
             val kspElements = testInvocation.processingEnv.getTypeElementsFromPackage(
                 "com.google.devtools.ksp.processing"
@@ -317,7 +318,7 @@
     }
 
     @Test
-    fun getElementsFromPackageReturnsEmptyListForUnknownPackage() {
+    fun getTypeElementsFromPackageReturnsEmptyListForUnknownPackage() {
         runProcessorTest { testInvocation ->
             val kspElements = testInvocation.processingEnv.getTypeElementsFromPackage(
                 "com.example.unknown.package"
@@ -328,6 +329,69 @@
     }
 
     @Test
+    fun getElementsFromPackageInSource() {
+        val source = Source.kotlin(
+            "Foo.kt",
+            """
+            package foo.bar
+            val p: Int = TODO()
+            fun f(): String = TODO()
+            """.trimIndent()
+        )
+        runProcessorTest(listOf(source)) { invocation ->
+            val elements = invocation.processingEnv.getElementsFromPackage(
+                "foo.bar"
+            )
+            if (invocation.isKsp) {
+                assertThat(
+                    elements.map { it.name }
+                ).containsExactly("p", "f")
+            } else {
+                assertThat(
+                    elements.map { it.name }
+                ).containsExactly("FooKt")
+            }
+        }
+    }
+
+    @Test
+    fun getElementsFromPackageInClass() {
+        val source = Source.kotlin(
+            "Foo.kt",
+            """
+            package foo.bar
+            val p: Int = TODO()
+            fun f(): String = TODO()
+            """.trimIndent()
+        )
+        runProcessorTest(classpath = compileFiles(listOf(source))) { invocation ->
+            val elements = invocation.processingEnv.getElementsFromPackage(
+                "foo.bar"
+            )
+            if (invocation.isKsp) {
+                assertThat(
+                    elements.map { it.name }
+                ).containsExactly("p", "f")
+            } else {
+                assertThat(
+                    elements.map { it.name }
+                ).containsExactly("FooKt")
+            }
+        }
+    }
+
+    @Test
+    fun getElementsFromPackageReturnsEmptyListForUnknownPackage() {
+        runProcessorTest { testInvocation ->
+            val elements = testInvocation.processingEnv.getElementsFromPackage(
+                "com.example.unknown.package"
+            )
+
+            assertThat(elements).isEmpty()
+        }
+    }
+
+    @Test
     fun getAnnotatedParamElements() {
         runProcessorTest(
             listOf(
diff --git a/settings.gradle b/settings.gradle
index 604404e..07f626d 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -909,6 +909,7 @@
 includeProject(":privacysandbox:plugins:plugins-privacysandbox-library", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:sdkruntime-client", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:sdkruntime-core", [BuildType.MAIN])
+includeProject(":privacysandbox:sdkruntime:sdkruntime-provider", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:test-sdks:current", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:test-sdks:v1", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:test-sdks:v2", [BuildType.MAIN])
diff --git a/slidingpanelayout/slidingpanelayout/api/current.txt b/slidingpanelayout/slidingpanelayout/api/current.txt
index 5abadc5..6b138d4 100644
--- a/slidingpanelayout/slidingpanelayout/api/current.txt
+++ b/slidingpanelayout/slidingpanelayout/api/current.txt
@@ -16,6 +16,7 @@
     method @Px public int getParallaxDistance();
     method @Deprecated @ColorInt public int getSliderFadeColor();
     method public boolean isOpen();
+    method public final boolean isOverlappingEnabled();
     method public boolean isSlideable();
     method public void open();
     method public boolean openPane();
@@ -23,6 +24,7 @@
     method public void removeSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener listener);
     method @Deprecated public void setCoveredFadeColor(int);
     method public final void setLockMode(int);
+    method public final void setOverlappingEnabled(boolean);
     method @Deprecated public void setPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener? listener);
     method public void setParallaxDistance(@Px int);
     method @Deprecated public void setShadowDrawable(android.graphics.drawable.Drawable? drawable);
@@ -35,6 +37,7 @@
     method @Deprecated public void smoothSlideClosed();
     method @Deprecated public void smoothSlideOpen();
     property @Deprecated @ColorInt public int coveredFadeColor;
+    property public final boolean isOverlappingEnabled;
     property public boolean isSlideable;
     property public final int lockMode;
     property @Px public int parallaxDistance;
@@ -56,13 +59,9 @@
     ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(int width, int height);
-    field public static final androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams.Companion Companion;
     field public float weight;
   }
 
-  public static final class SlidingPaneLayout.LayoutParams.Companion {
-  }
-
   public static interface SlidingPaneLayout.PanelSlideListener {
     method public void onPanelClosed(android.view.View panel);
     method public void onPanelOpened(android.view.View panel);
diff --git a/slidingpanelayout/slidingpanelayout/api/restricted_current.txt b/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
index 5abadc5..6b138d4 100644
--- a/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
+++ b/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
@@ -16,6 +16,7 @@
     method @Px public int getParallaxDistance();
     method @Deprecated @ColorInt public int getSliderFadeColor();
     method public boolean isOpen();
+    method public final boolean isOverlappingEnabled();
     method public boolean isSlideable();
     method public void open();
     method public boolean openPane();
@@ -23,6 +24,7 @@
     method public void removeSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener listener);
     method @Deprecated public void setCoveredFadeColor(int);
     method public final void setLockMode(int);
+    method public final void setOverlappingEnabled(boolean);
     method @Deprecated public void setPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener? listener);
     method public void setParallaxDistance(@Px int);
     method @Deprecated public void setShadowDrawable(android.graphics.drawable.Drawable? drawable);
@@ -35,6 +37,7 @@
     method @Deprecated public void smoothSlideClosed();
     method @Deprecated public void smoothSlideOpen();
     property @Deprecated @ColorInt public int coveredFadeColor;
+    property public final boolean isOverlappingEnabled;
     property public boolean isSlideable;
     property public final int lockMode;
     property @Px public int parallaxDistance;
@@ -56,13 +59,9 @@
     ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(int width, int height);
-    field public static final androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams.Companion Companion;
     field public float weight;
   }
 
-  public static final class SlidingPaneLayout.LayoutParams.Companion {
-  }
-
   public static interface SlidingPaneLayout.PanelSlideListener {
     method public void onPanelClosed(android.view.View panel);
     method public void onPanelOpened(android.view.View panel);
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml b/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml
index 33523b8..31e4bdb 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml
@@ -25,5 +25,13 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity
+            android:name="androidx.slidingpanelayout.widget.helpers.EmptyTestActivity"
+            android:exported="false">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
     </application>
 </manifest>
\ No newline at end of file
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/DisallowOverlapTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/DisallowOverlapTest.kt
new file mode 100644
index 0000000..4f093e6
--- /dev/null
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/DisallowOverlapTest.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2023 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 androidx.slidingpanelayout.widget
+
+import android.view.View
+import android.view.View.MeasureSpec
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class DisallowOverlapTest {
+    @Test
+    fun twoPaneModeTest() {
+        val context = InstrumentationRegistry.getInstrumentation().context
+        val spl = SlidingPaneLayout(context).apply {
+            isOverlappingEnabled = false
+        }
+
+        val firstPane = View(context).also {
+            spl.addView(it, SlidingPaneLayout.LayoutParams(30, MATCH_PARENT))
+        }
+        val secondPane = View(context).also {
+            spl.addView(it, SlidingPaneLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT))
+        }
+
+        spl.measure(
+            MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY),
+            MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY)
+        )
+
+        assertThat(spl.measuredWidth).isEqualTo(100)
+        assertThat(spl.measuredHeight).isEqualTo(100)
+
+        spl.layout(0, 0, spl.measuredWidth, spl.measuredHeight)
+
+        assertThat(firstPane.measuredWidth).isEqualTo(30)
+        assertThat(secondPane.measuredWidth).isEqualTo(70)
+    }
+}
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt
index 3fe86c3..90ab2389 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt
@@ -17,6 +17,7 @@
 package androidx.slidingpanelayout.widget
 
 import android.view.View
+import androidx.core.view.get
 import androidx.slidingpanelayout.test.R
 import androidx.slidingpanelayout.widget.helpers.TestActivity
 import androidx.slidingpanelayout.widget.helpers.findViewById
@@ -37,7 +38,6 @@
 import androidx.window.testing.layout.FoldingFeature
 import androidx.window.testing.layout.WindowLayoutInfoPublisherRule
 import com.google.common.truth.Truth.assertThat
-import org.hamcrest.core.IsNot.not
 import org.junit.After
 import org.junit.Rule
 import org.junit.Test
@@ -116,9 +116,10 @@
                 val info = WindowLayoutInfo(listOf(feature))
                 rule.overrideWindowLayoutInfo(info)
                 WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(this).bounds
+                val spl = findViewById<SlidingPaneLayout>(R.id.sliding_pane_fold_layout)
+                assertThat(spl.isSlideable).isFalse()
+                assertThat(spl[0].width).isLessThan(spl[1].width)
             }
-            Espresso.onView(ViewMatchers.withId(R.id.sliding_pane_fold_layout))
-                .check(ViewAssertions.matches(not(isTwoPane())))
         }
     }
 
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt
index 82b0b8f..2076ea3 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt
@@ -17,6 +17,8 @@
 package androidx.slidingpanelayout.widget
 
 import android.view.View
+import android.view.View.MeasureSpec
+import android.view.View.MeasureSpec.EXACTLY
 import android.view.ViewGroup
 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
 import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
@@ -25,6 +27,7 @@
 import android.widget.LinearLayout
 import android.widget.ScrollView
 import androidx.slidingpanelayout.test.R
+import androidx.slidingpanelayout.widget.helpers.MeasureCountingView
 import androidx.slidingpanelayout.widget.helpers.TestActivity
 import androidx.slidingpanelayout.widget.helpers.isTwoPane
 import androidx.test.core.app.ActivityScenario
@@ -33,8 +36,10 @@
 import androidx.test.espresso.matcher.ViewMatchers
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
 import androidx.testutils.withActivity
 import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
 import org.hamcrest.core.IsNot.not
 import org.junit.After
 import org.junit.Test
@@ -205,4 +210,80 @@
             }
         }
     }
+
+    @Test
+    fun testSingleLayoutPassLpWidthAndWeight() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(100, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(0, MATCH_PARENT).apply {
+                weight = 1f
+            }
+        )
+    }
+
+    @Test
+    fun testSingleLayoutPassLpWidthAndMatch() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(100, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
+        )
+    }
+
+    @Test
+    fun testSingleLayoutPassMinWidthAndMatch() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
+        ) {
+            minimumWidth = 100
+        }
+    }
+    @Test
+    fun testSingleLayoutPassMinWidthAndWeight() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(0, MATCH_PARENT).apply { weight = 1f }
+        ) {
+            minimumWidth = 100
+        }
+    }
+}
+
+private fun View.measureAndLayout(
+    width: Int,
+    height: Int
+) {
+    measure(
+        MeasureSpec.makeMeasureSpec(width, EXACTLY),
+        MeasureSpec.makeMeasureSpec(height, EXACTLY)
+    )
+    layout(0, 0, measuredWidth, measuredHeight)
+}
+
+private fun testSingleLayoutPass(
+    firstLayoutParams: SlidingPaneLayout.LayoutParams,
+    secondLayoutParams: SlidingPaneLayout.LayoutParams,
+    configFirst: MeasureCountingView.() -> Unit = {}
+) {
+    val context = InstrumentationRegistry.getInstrumentation().context
+    val firstChild = MeasureCountingView(context).apply(configFirst)
+    val secondChild = MeasureCountingView(context)
+    val spl = SlidingPaneLayout(context).apply {
+        isOverlappingEnabled = false
+        addView(firstChild, firstLayoutParams)
+        addView(secondChild, secondLayoutParams)
+    }
+
+    spl.measureAndLayout(300, 300)
+
+    firstChild.assertReportingMeasureCallTraces {
+        assertWithMessage("first child measure count")
+            .that(measureCount)
+            .isEqualTo(1)
+    }
+    secondChild.assertReportingMeasureCallTraces {
+        assertWithMessage("second child measure count")
+            .that(measureCount)
+            .isEqualTo(1)
+    }
 }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/EmptyTestActivity.kt
similarity index 77%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/EmptyTestActivity.kt
index 40b8f5b..7d72c5d9 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/EmptyTestActivity.kt
@@ -14,7 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+package androidx.slidingpanelayout.widget.helpers
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+import android.app.Activity
+
+class EmptyTestActivity : Activity()
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/MeasureCountingView.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/MeasureCountingView.kt
new file mode 100644
index 0000000..8a4cb2d
--- /dev/null
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/MeasureCountingView.kt
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2023 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 androidx.slidingpanelayout.widget.helpers
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.View
+import android.view.View.MeasureSpec.AT_MOST
+
+class MeasureCountingView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null
+) : View(context, attrs) {
+
+    private val _measureCallTraces = mutableListOf<Throwable>()
+    val measureCallTraces: List<Throwable>
+        get() = _measureCallTraces
+
+    val measureCount: Int
+        get() = _measureCallTraces.size
+
+    fun resetMeasureTracking() {
+        _measureCallTraces.clear()
+    }
+
+    /**
+     * Run [block] and append [measureCallTraces] to the
+     * [suppressed exceptions][Throwable.addSuppressed] of any [AssertionError] thrown for analysis
+     */
+    inline fun <R> assertReportingMeasureCallTraces(
+        block: MeasureCountingView.() -> R
+    ): R = try {
+        block()
+    } catch (ae: AssertionError) {
+        for (trace in measureCallTraces) {
+            ae.addSuppressed(trace)
+        }
+        throw ae
+    }
+
+    override fun onMeasure(
+        widthMeasureSpec: Int,
+        heightMeasureSpec: Int
+    ) {
+        _measureCallTraces += Throwable("measure pass ${measureCount + 1}")
+
+        // Default View measurement treats AT_MOST identically to EXACTLY; default to a
+        // content size of 100px
+        val modifiedWidthSpec = if (MeasureSpec.getMode(widthMeasureSpec) == AT_MOST) {
+            MeasureSpec.makeMeasureSpec(
+                MeasureSpec.getSize(widthMeasureSpec).coerceAtMost(100),
+                MeasureSpec.EXACTLY
+            )
+        } else widthMeasureSpec
+        super.onMeasure(modifiedWidthSpec, heightMeasureSpec)
+    }
+}
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml
index 6a0d564..c0a8bb5 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml
@@ -24,14 +24,12 @@
         android:layout_width="10dp"
         android:layout_height="match_parent"
         android:layout_weight="1"
-        android:layout_gravity="left"
         android:text="List" />
 
     <TextView
         android:id="@+id/detail_pane"
         android:layout_width="10dp"
         android:layout_height="match_parent"
-        android:layout_gravity="right"
         android:layout_weight="2"
         android:text="Detail" />
 </androidx.slidingpanelayout.widget.SlidingPaneLayout>
\ No newline at end of file
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml
index 5d9b476..1aabf47 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml
@@ -23,14 +23,12 @@
         android:id="@+id/list_pane"
         android:layout_width="100dp"
         android:layout_height="match_parent"
-        android:layout_gravity="left"
         android:text="List" />
 
     <TextView
         android:id="@+id/detail_pane"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_gravity="right"
         android:layout_weight="1"
         android:paddingLeft="16dp"
         android:paddingRight="16dp"
diff --git a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
index f9d8b6e..0ad221f 100644
--- a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
+++ b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
@@ -16,7 +16,6 @@
 
 package androidx.slidingpanelayout.widget
 
-import android.R
 import android.content.Context
 import android.graphics.Canvas
 import android.graphics.PixelFormat
@@ -27,11 +26,13 @@
 import android.os.Parcelable
 import android.os.Parcelable.ClassLoaderCreator
 import android.util.AttributeSet
-import android.util.Log
 import android.view.MotionEvent
 import android.view.View
+import android.view.View.MeasureSpec
 import android.view.ViewGroup
 import android.view.ViewGroup.LayoutParams
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
 import android.view.ViewGroup.getChildMeasureSpec
 import android.view.accessibility.AccessibilityEvent
 import android.widget.FrameLayout
@@ -40,6 +41,7 @@
 import androidx.annotation.IntDef
 import androidx.annotation.Px
 import androidx.core.content.ContextCompat
+import androidx.core.content.withStyledAttributes
 import androidx.core.graphics.Insets
 import androidx.core.os.HandlerCompat
 import androidx.core.view.AccessibilityDelegateCompat
@@ -47,9 +49,11 @@
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
 import androidx.core.view.animation.PathInterpolatorCompat
 import androidx.core.view.forEach
+import androidx.core.view.forEachIndexed
 import androidx.customview.view.AbsSavedState
 import androidx.customview.widget.Openable
 import androidx.customview.widget.ViewDragHelper
+import androidx.slidingpanelayout.R
 import androidx.transition.ChangeBounds
 import androidx.transition.Transition
 import androidx.transition.TransitionManager
@@ -59,6 +63,7 @@
 import kotlin.math.abs
 import kotlin.math.max
 import kotlin.math.min
+import kotlin.math.roundToInt
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.Job
@@ -101,21 +106,31 @@
     } else ViewCompat.getMinimumWidth(child)
 }
 
-private fun measureChildHeight(child: View, spec: Int, padding: Int): Int {
-    val lp = child.layoutParams as SlidingPaneLayout.LayoutParams
-    val childHeightSpec: Int
-    val skippedFirstPass = lp.width == 0 && lp.weight > 0
-    childHeightSpec = if (skippedFirstPass) {
+private fun getChildHeightMeasureSpec(
+    child: View,
+    skippedFirstPass: Boolean,
+    spec: Int,
+    padding: Int
+): Int {
+    val lp = child.layoutParams
+    return if (skippedFirstPass) {
         // This was skipped the first time; figure out a real height spec.
         getChildMeasureSpec(spec, padding, lp.height)
     } else {
-        View.MeasureSpec.makeMeasureSpec(
-            child.measuredHeight, View.MeasureSpec.EXACTLY
-        )
+        MeasureSpec.makeMeasureSpec(child.measuredHeight, MeasureSpec.EXACTLY)
     }
-    return childHeightSpec
 }
 
+private inline val SlidingPaneLayout.LayoutParams.canInfluenceParentSize: Boolean
+    get() = (width != MATCH_PARENT && width != 0) ||
+        (height != MATCH_PARENT && height != 0)
+
+private inline val SlidingPaneLayout.LayoutParams.weightOnlyWidth: Boolean
+    get() = width == 0 && weight > 0
+
+private inline val SlidingPaneLayout.LayoutParams.canExpandWidth: Boolean
+    get() = width == MATCH_PARENT || weight > 0
+
 /**
  * Utility for calculating layout positioning of child views relative to a [FoldingFeature].
  * This class is not thread-safe.
@@ -247,6 +262,7 @@
  * how to divide leftover space after measurement is complete. It is only relevant for width.
  * When views do not overlap weight behaves as it does in a LinearLayout.
  */
+@Suppress("LeakingThis")
 open class SlidingPaneLayout @JvmOverloads constructor(
     context: Context,
     attrs: AttributeSet? = null,
@@ -379,6 +395,23 @@
             requestLayout()
         }
 
+    /**
+     * When set, if sufficient space is not available to present child panes side by side
+     * while respecting the child pane's [LayoutParams.width] or
+     * [minimum width][View.getMinimumWidth], the [SlidingPaneLayout] may allow the child panes
+     * to overlap. When child panes overlap [lockMode] determines whether the user can drag
+     * the top pane to one side to make the lower pane available for viewing or interaction.
+     *
+     * Defaults to `true`.
+     */
+    var isOverlappingEnabled: Boolean = true
+        set(value) {
+            if (value != field) {
+                field = value
+                requestLayout()
+            }
+        }
+
     private val systemGestureInsets: Insets?
         // Get system gesture insets when SDK version is larger than 29. Otherwise, return null.
         get() {
@@ -399,12 +432,16 @@
     private val windowInfoTracker = WindowInfoTracker.getOrCreate(context)
 
     init {
-        val density = context.resources.displayMetrics.density
         setWillNotDraw(false)
         ViewCompat.setAccessibilityDelegate(this, AccessibilityDelegate())
         ViewCompat.setImportantForAccessibility(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES)
         dragHelper = ViewDragHelper.create(this, 0.5f, DragHelperCallback())
-        dragHelper.minVelocity = MIN_FLING_VELOCITY * density
+        dragHelper.minVelocity = MIN_FLING_VELOCITY * context.resources.displayMetrics.density
+
+        context.withStyledAttributes(attrs, R.styleable.SlidingPaneLayout) {
+            isOverlappingEnabled =
+                getBoolean(R.styleable.SlidingPaneLayout_isOverlappingEnabled, true)
+        }
     }
 
     /**
@@ -487,7 +524,7 @@
         for (listener in panelSlideListeners) {
             listener.onPanelClosed(panel)
         }
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+        sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)
     }
 
     private fun updateObscuredViewsVisibility(panel: View?) {
@@ -622,107 +659,126 @@
         var widthRemaining = widthAvailable
         val childCount = childCount
         if (childCount > 2) {
-            Log.e(TAG, "onMeasure: More than two child views are not supported.")
+            error("SlidingPaneLayout: More than two child views are not supported.")
         }
 
         // We'll find the current one below.
         slideableView = null
 
+        // Make kotlinc happy that this can't change while we run measurement
+        val allowOverlappingPanes = isOverlappingEnabled
+
+        var skippedChildMeasure = false
+
         // First pass. Measure based on child LayoutParams width/height.
-        // Weight will incur a second pass.
-        for (i in 0 until childCount) {
-            val child = getChildAt(i)
+        // Weight will incur a second pass; distributing leftover space in the event of overlap
+        // behaves similar to weight and will also incur a second pass.
+        forEachIndexed { i, child ->
             val lp = child.layoutParams as LayoutParams
             if (child.visibility == GONE) {
                 lp.dimWhenOffset = false
-                continue
+                return@forEachIndexed
             }
             if (lp.weight > 0) {
                 weightSum += lp.weight
 
                 // If we have no width, weight is the only contributor to the final size.
                 // Measure this view on the weight pass only.
-                if (lp.width == 0) continue
+                // If we do have width, then we need to measure this child to see how much space
+                // is left for other children.
+                if (lp.width == 0) {
+                    skippedChildMeasure = true
+                    return@forEachIndexed
+                }
             }
-            var childWidthSpec: Int
             val horizontalMargin = lp.leftMargin + lp.rightMargin
-            val childWidthSize = (widthAvailable - horizontalMargin).coerceAtLeast(0)
+            val widthAvailableToChild =
+                if (allowOverlappingPanes) widthAvailable else widthRemaining
             // When the parent width spec is UNSPECIFIED, measure each of child to get its
             // desired width.
-            childWidthSpec = when (lp.width) {
-                ViewGroup.LayoutParams.WRAP_CONTENT -> {
-                    MeasureSpec.makeMeasureSpec(
-                        childWidthSize,
-                        if (widthMode == MeasureSpec.UNSPECIFIED) widthMode else MeasureSpec.AT_MOST
-                    )
-                }
-                ViewGroup.LayoutParams.MATCH_PARENT -> {
-                    MeasureSpec.makeMeasureSpec(childWidthSize, widthMode)
-                }
-                else -> {
-                    MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY)
-                }
+            val childWidthSpec = when (lp.width) {
+                WRAP_CONTENT -> MeasureSpec.makeMeasureSpec(
+                    (widthAvailableToChild - horizontalMargin).coerceAtLeast(0),
+                    if (widthMode == MeasureSpec.UNSPECIFIED) widthMode else MeasureSpec.AT_MOST
+                )
+                MATCH_PARENT -> MeasureSpec.makeMeasureSpec(
+                    (widthAvailableToChild - horizontalMargin).coerceAtLeast(0),
+                    widthMode
+                )
+                else -> MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY)
             }
+            val childWidthSize = MeasureSpec.getSize(childWidthSpec)
             val childHeightSpec = getChildMeasureSpec(
                 heightMeasureSpec,
-                paddingTop + paddingBottom, lp.height
+                paddingTop + paddingBottom + lp.topMargin + lp.bottomMargin,
+                lp.height
             )
-            child.measure(childWidthSpec, childHeightSpec)
-            val childWidth = child.measuredWidth
-            val childHeight = child.measuredHeight
-            if (childHeight > layoutHeight) {
-                if (heightMode == MeasureSpec.AT_MOST) {
-                    layoutHeight = childHeight.coerceAtMost(maxLayoutHeight)
-                } else if (heightMode == MeasureSpec.UNSPECIFIED) {
-                    layoutHeight = childHeight
+            if (allowOverlappingPanes || lp.canInfluenceParentSize ||
+                MeasureSpec.getMode(childWidthSpec) != MeasureSpec.EXACTLY) {
+                child.measure(childWidthSpec, childHeightSpec)
+                val childWidth = child.measuredWidth
+                val childHeight = child.measuredHeight
+                if (childHeight > layoutHeight) {
+                    if (heightMode == MeasureSpec.AT_MOST) {
+                        layoutHeight = childHeight.coerceAtMost(maxLayoutHeight)
+                    } else if (heightMode == MeasureSpec.UNSPECIFIED) {
+                        layoutHeight = childHeight
+                    }
                 }
+                widthRemaining -= childWidth
+            } else {
+                // Skip actually measuring, but record how much width it will consume
+                widthRemaining -= childWidthSize
+                skippedChildMeasure = true
             }
-            widthRemaining -= childWidth
             // Skip first child (list pane), the list pane is always a non-sliding pane.
-            if (i == 0) {
-                continue
-            }
-            lp.slideable = widthRemaining < 0
-            canSlide = canSlide or lp.slideable
-            if (lp.slideable) {
-                slideableView = child
+            if (i > 0) {
+                lp.slideable = allowOverlappingPanes && widthRemaining < 0
+                canSlide = canSlide or lp.slideable
+                if (lp.slideable) {
+                    slideableView = child
+                }
             }
         }
-        // Second pass. Resolve weight.
-        // Child views overlap when the combined width of child views cannot fit into the
-        // available width. Each of child views is sized to fill all available space. If there is
-        // no overlap, distribute the extra width proportionally to weight.
-        if (canSlide || weightSum > 0) {
-            for (i in 0 until childCount) {
-                val child = getChildAt(i)
-                if (child.visibility == GONE) {
-                    continue
-                }
+
+        // Second pass. Resolve weight. This can still affect the size of the SlidingPaneLayout.
+        // Ideally we only measure any given child view once, but if a child has both nonzero
+        // lp.width and weight, we have to do both.
+        // If overlapping is permitted by [allowOverlappingPanes], child views overlap when
+        // the combined width of child views cannot fit into the available width.
+        // Each of child views is sized to fill all available space. If there is no overlap,
+        // distribute the extra width proportionally to weight.
+        if (canSlide || weightSum > 0 || skippedChildMeasure) {
+            var totalMeasuredWidth = 0
+            forEach { child ->
+                if (child.visibility == GONE) return@forEach
                 val lp = child.layoutParams as LayoutParams
-                val skippedFirstPass = lp.width == 0 && lp.weight > 0
+                val skippedFirstPass = !lp.canInfluenceParentSize || lp.weightOnlyWidth
                 val measuredWidth = if (skippedFirstPass) 0 else child.measuredWidth
-                var newWidth = measuredWidth
-                var childWidthSpec = 0
-                if (canSlide) {
+                val newWidth = when {
                     // Child view consumes available space if the combined width cannot fit into
                     // the layout available width.
-                    val horizontalMargin = lp.leftMargin + lp.rightMargin
-                    newWidth = widthAvailable - horizontalMargin
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(
-                        newWidth, MeasureSpec.EXACTLY
-                    )
-                } else if (lp.weight > 0) {
-                    // Distribute the extra width proportionally similar to LinearLayout
-                    val widthToDistribute = widthRemaining.coerceAtLeast(0)
-                    val addedWidth = (lp.weight * widthToDistribute / weightSum).toInt()
-                    newWidth = measuredWidth + addedWidth
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(newWidth, MeasureSpec.EXACTLY)
+                    canSlide -> widthAvailable - lp.horizontalMargin
+                    lp.weight > 0 -> {
+                        // Distribute the extra width proportionally similar to LinearLayout
+                        val widthToDistribute = widthRemaining.coerceAtLeast(0)
+                        val addedWidth = (lp.weight * widthToDistribute / weightSum).roundToInt()
+                        measuredWidth + addedWidth
+                    }
+                    lp.width == MATCH_PARENT -> {
+                        widthAvailable - lp.horizontalMargin - totalMeasuredWidth
+                    }
+                    lp.width > 0 -> lp.width
+                    else -> measuredWidth
                 }
-                val childHeightSpec = measureChildHeight(
-                    child, heightMeasureSpec,
-                    paddingTop + paddingBottom
-                )
                 if (measuredWidth != newWidth) {
+                    val childWidthSpec = MeasureSpec.makeMeasureSpec(newWidth, MeasureSpec.EXACTLY)
+                    val childHeightSpec = getChildHeightMeasureSpec(
+                        child,
+                        skippedFirstPass,
+                        heightMeasureSpec,
+                        paddingTop + paddingBottom + lp.topMargin + lp.bottomMargin
+                    )
                     child.measure(childWidthSpec, childHeightSpec)
                     val childHeight = child.measuredHeight
                     if (childHeight > layoutHeight) {
@@ -733,68 +789,14 @@
                         }
                     }
                 }
+                totalMeasuredWidth += newWidth + lp.leftMargin + lp.rightMargin
             }
         }
 
-        // At this point, all child views have been measured. Calculate the device fold position
-        // in the view. Update the split position to where the fold when it exists.
-        val leftSplitBounds = tmpRect
-        val rightSplitBounds = tmpRect2
-        val splitViews = foldBoundsCalculator.splitViewPositions(
-            foldingFeature,
-            this,
-            leftSplitBounds,
-            rightSplitBounds
-        )
-        if (splitViews && !canSlide) {
-            for (i in 0 until childCount) {
-                val child = getChildAt(i)
-                if (child.visibility == GONE) {
-                    continue
-                }
-                val splitView = when (i) {
-                    0 -> leftSplitBounds
-                    1 -> rightSplitBounds
-                    else -> error("too many children to split")
-                }
-                val lp = child.layoutParams as LayoutParams
+        // All children have been measured at least once.
 
-                // If child view cannot fit in the separating view, expand the child view to fill
-                // available space.
-                val horizontalMargin = lp.leftMargin + lp.rightMargin
-                val childHeightSpec = MeasureSpec.makeMeasureSpec(
-                    child.measuredHeight,
-                    MeasureSpec.EXACTLY
-                )
-                var childWidthSpec = MeasureSpec.makeMeasureSpec(
-                    splitView.width(),
-                    MeasureSpec.AT_MOST
-                )
-                child.measure(childWidthSpec, childHeightSpec)
-                if (child.measuredWidthAndState and MEASURED_STATE_TOO_SMALL == 1 ||
-                    (getMinimumWidth(child) != 0 && splitView.width() < getMinimumWidth(child))
-                ) {
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(
-                        widthAvailable - horizontalMargin,
-                        MeasureSpec.EXACTLY
-                    )
-                    child.measure(childWidthSpec, childHeightSpec)
-                    // Skip first child (list pane), the list pane is always a non-sliding pane.
-                    if (i == 0) {
-                        continue
-                    }
-                    lp.slideable = true
-                    canSlide = true
-                    slideableView = child
-                } else {
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(
-                        splitView.width(),
-                        MeasureSpec.EXACTLY
-                    )
-                    child.measure(childWidthSpec, childHeightSpec)
-                }
-            }
-        }
+        // By this point we know the parent size and whether we have any sliding panes.
+        // Set the parent size now and notify observers.
         val measuredHeight = layoutHeight + paddingTop + paddingBottom
         setMeasuredDimension(widthSize, measuredHeight)
         if (canSlide != isSlideable) {
@@ -809,7 +811,78 @@
         }
     }
 
+    /**
+     * Returns `true` if any measurement was performed, `false` otherwise
+     */
+    private fun remeasureForFoldingFeature(foldingFeature: FoldingFeature): Boolean {
+        // At this point, all child views have been measured. Calculate the device fold position
+        // in the view. Update the split position to where the fold when it exists.
+        val leftSplitBounds = tmpRect
+        val rightSplitBounds = tmpRect2
+        val hasFold = foldBoundsCalculator.splitViewPositions(
+            foldingFeature,
+            this,
+            leftSplitBounds,
+            rightSplitBounds
+        )
+        if (hasFold) {
+            // Determine if child configuration would prevent following the fold position;
+            // if so, make no changes.
+            forEachIndexed { i, child ->
+                if (child.visibility == GONE) return@forEachIndexed
+                val splitView = when (i) {
+                    0 -> leftSplitBounds
+                    1 -> rightSplitBounds
+                    else -> error("too many children to split")
+                }
+                val lp = child.layoutParams as LayoutParams
+                // If the child has been given exact width settings, don't make changes
+                if (!lp.canExpandWidth) return false
+                // minimumWidth will always be >= 0 so this coerceAtLeast is safe
+                val minChildWidth = getMinimumWidth(child).coerceAtLeast(lp.width)
+                // If the child has a minimum size larger than the area left by the fold's division,
+                // don't make changes
+                if (minChildWidth + lp.horizontalMargin > splitView.width()) return false
+            }
+
+            forEachIndexed { i, child ->
+                if (child.visibility == GONE) return@forEachIndexed
+                val splitView = when (i) {
+                    0 -> leftSplitBounds
+                    1 -> rightSplitBounds
+                    else -> error("too many children to split")
+                }
+                val lp = child.layoutParams as LayoutParams
+
+                val childWidthSpec = MeasureSpec.makeMeasureSpec(
+                    (splitView.width() - lp.horizontalMargin).coerceAtLeast(0),
+                    MeasureSpec.EXACTLY
+                )
+
+                // Use the child's existing height; all children have been measured once since
+                // their last layout
+                val childHeightSpec = MeasureSpec.makeMeasureSpec(
+                    child.measuredHeight,
+                    MeasureSpec.EXACTLY
+                )
+
+                child.measure(childWidthSpec, childHeightSpec)
+            }
+        }
+        return hasFold
+    }
+
     override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
+        val foldingFeature = foldingFeature
+        if (!isSlideable) {
+            if (foldingFeature != null) {
+                // We can't determine the position of the screen fold relative to the placed
+                // SlidingPaneLayout until the SlidingPaneLayout is placed, which is complete
+                // when onLayout is called.
+                remeasureForFoldingFeature(foldingFeature)
+            }
+        }
+
         val isLayoutRtl = isLayoutRtlSupport
         val width = r - l
         val paddingStart = if (isLayoutRtl) paddingRight else paddingLeft
@@ -861,10 +934,10 @@
             // offset for the next child, in order to avoid rendering the content under it.
             var nextXOffset = 0
             if (foldingFeature != null &&
-                foldingFeature!!.orientation == FoldingFeature.Orientation.VERTICAL &&
-                foldingFeature!!.isSeparating
+                foldingFeature.orientation == FoldingFeature.Orientation.VERTICAL &&
+                foldingFeature.isSeparating
             ) {
-                nextXOffset = foldingFeature!!.bounds.width()
+                nextXOffset = foldingFeature.bounds.width()
             }
             nextXStart += child.width + abs(nextXOffset)
         }
@@ -1294,15 +1367,14 @@
      */
     protected open fun canScroll(v: View, checkV: Boolean, dx: Int, x: Int, y: Int): Boolean {
         if (v is ViewGroup) {
-            val group = v
             val scrollX = v.getScrollX()
             val scrollY = v.getScrollY()
-            val count = group.childCount
+            val count = v.childCount
             // Count backwards - let topmost views consume scroll distance first.
             for (i in count - 1 downTo 0) {
                 // TODO: Add versioned support here for transformed views.
                 // This will not work for transformed views in Honeycomb+
-                val child = group.getChildAt(i)
+                val child = v.getChildAt(i)
                 if (x + scrollX >= child.left &&
                     x + scrollX < child.right &&
                     y + scrollY >= child.top &&
@@ -1346,7 +1418,7 @@
         val superState = super.onSaveInstanceState()
         val ss = SavedState(superState)
         ss.isOpen = if (isSlideable) isOpen else preservedOpenState
-        ss.mLockMode = lockMode
+        ss.lockMode = lockMode
         return ss
     }
 
@@ -1362,7 +1434,7 @@
             closePane()
         }
         preservedOpenState = state.isOpen
-        lockMode = state.mLockMode
+        lockMode = state.lockMode
     }
 
     private inner class DragHelperCallback() : ViewDragHelper.Callback() {
@@ -1490,6 +1562,9 @@
         @JvmField
         internal var dimWhenOffset = false
 
+        internal inline val horizontalMargin: Int
+            get() = leftMargin + rightMargin
+
         constructor() : super(MATCH_PARENT, MATCH_PARENT)
         constructor(width: Int, height: Int) : super(width, height)
         constructor(source: ViewGroup.LayoutParams) : super(source)
@@ -1499,15 +1574,9 @@
         }
 
         constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
-            val a = context.obtainStyledAttributes(attrs, ATTRS)
-            weight = a.getFloat(0, 0f)
-            a.recycle()
-        }
-
-        companion object {
-            private val ATTRS = intArrayOf(
-                R.attr.layout_weight
-            )
+            context.withStyledAttributes(attrs, R.styleable.SlidingPaneLayout_Layout) {
+                weight = getFloat(R.styleable.SlidingPaneLayout_Layout_android_layout_weight, 0f)
+            }
         }
     }
 
@@ -1515,18 +1584,18 @@
         var isOpen = false
 
         @LockMode
-        var mLockMode = 0
+        var lockMode = 0
 
         constructor(superState: Parcelable?) : super(superState!!)
-        constructor(`in`: Parcel, loader: ClassLoader?) : super(`in`, loader) {
-            isOpen = `in`.readInt() != 0
-            mLockMode = `in`.readInt()
+        constructor(parcel: Parcel, loader: ClassLoader?) : super(parcel, loader) {
+            isOpen = parcel.readInt() != 0
+            lockMode = parcel.readInt()
         }
 
         override fun writeToParcel(out: Parcel, flags: Int) {
             super.writeToParcel(out, flags)
             out.writeInt(if (isOpen) 1 else 0)
-            out.writeInt(mLockMode)
+            out.writeInt(lockMode)
         }
 
         companion object {
diff --git a/slidingpanelayout/slidingpanelayout/src/main/res/values/attrs.xml b/slidingpanelayout/slidingpanelayout/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..c5a5344
--- /dev/null
+++ b/slidingpanelayout/slidingpanelayout/src/main/res/values/attrs.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2023 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.
+  -->
+
+<resources>
+    <declare-styleable name="SlidingPaneLayout">
+        <attr name="isOverlappingEnabled" format="boolean"/>
+    </declare-styleable>
+    <declare-styleable name="SlidingPaneLayout_Layout">
+        <attr name="android:layout_weight"/>
+    </declare-styleable>
+</resources>
\ No newline at end of file
diff --git a/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt b/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt
index b425ca5..81ddd1d 100644
--- a/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt
+++ b/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt
@@ -109,30 +109,6 @@
         writeGradleProperties()
     }
 
-    fun getSdkDirectory(): String {
-        val localProperties = File(props.rootProjectPath, "local.properties")
-        when {
-            localProperties.exists() -> {
-                val stream = localProperties.inputStream()
-                val properties = Properties()
-                properties.load(stream)
-                return properties.getProperty("sdk.dir")
-            }
-            System.getenv("ANDROID_HOME") != null -> {
-                return System.getenv("ANDROID_HOME")
-            }
-            System.getenv("ANDROID_SDK_ROOT") != null -> {
-                return System.getenv("ANDROID_SDK_ROOT")
-            }
-            else -> {
-                throw IllegalStateException(
-                    "ProjectSetupRule did find local.properties at: $localProperties and " +
-                        "neither ANDROID_HOME or ANDROID_SDK_ROOT was set."
-                )
-            }
-        }
-    }
-
     /**
      * Gets the latest version of a published library.
      *
diff --git a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt
index 868a511..fa20a3c 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt
@@ -30,6 +30,7 @@
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -333,6 +334,7 @@
         assertThat(fragment1.requireView().parent).isNotNull()
     }
 
+    @Ignore // b/300694860
     @Test
     fun replaceOperationWithTransitionsThenOnBackPressedTwice() {
         val fm1 = activityRule.activity.supportFragmentManager
diff --git a/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt b/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt
index fd55d1a..d7adf74 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt
@@ -454,7 +454,7 @@
         }
         verify(listener2, timeout(3000)).onTransitionStart(any())
         rule.runOnUiThread {
-            verify(listener2, times(1)).onTransitionEnd(any())
+            verify(listener2, times(2)).onTransitionEnd(any())
             // All transitions should be ended
             val runningTransitions = TransitionManager.getRunningTransitions()
             assertThat(runningTransitions[root]).isEmpty()
diff --git a/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java b/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
index 30a88f5..08b967c 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
+++ b/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
@@ -26,6 +26,7 @@
 import static org.hamcrest.Matchers.sameInstance;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
@@ -56,6 +57,8 @@
 import org.junit.Test;
 
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 @MediumTest
 public class TransitionTest extends BaseTest {
@@ -433,6 +436,86 @@
         });
     }
 
+    // A listener removed from the parent is also removed from the child.
+    @Test
+    public void removedListenerNotNotifying() throws Throwable {
+        rule.runOnUiThread(() -> {
+            mScenes[0].enter();
+        });
+        View view = rule.getActivity().findViewById(R.id.view0);
+
+        final Transition slide = new Slide();
+        slide.setDuration(1);
+        final CountDownLatch latch1 = new CountDownLatch(1);
+        final CountDownLatch latch2 = new CountDownLatch(1);
+        final TransitionListenerAdapter listener1 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch1.countDown();
+            }
+        };
+        final TransitionListenerAdapter listener2 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionStart(@NonNull Transition transition, boolean isReverse) {
+                transition.addListener(listener1);
+                slide.removeListener(this);
+                slide.removeListener(listener1); // should do nothing
+            }
+
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch2.countDown();
+            }
+        };
+        slide.addListener(listener2);
+        rule.runOnUiThread(() -> {
+            ViewGroup root = rule.getActivity().getRoot();
+            TransitionManager.beginDelayedTransition(root, slide);
+            view.setVisibility(View.INVISIBLE);
+        });
+        assertTrue(latch1.await(1, TimeUnit.SECONDS));
+        rule.runOnUiThread(() -> assertEquals(1, latch2.getCount()));
+    }
+
+    // A listener added to the parent is also added to the child.
+    @Test
+    public void addedListenerNotifying() throws Throwable {
+        rule.runOnUiThread(() -> {
+            mScenes[0].enter();
+        });
+        View view = rule.getActivity().findViewById(R.id.view0);
+
+        final Transition slide = new Slide();
+        slide.setDuration(1);
+        final CountDownLatch latch1 = new CountDownLatch(1);
+        final CountDownLatch latch2 = new CountDownLatch(1);
+        final TransitionListenerAdapter listener1 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch1.countDown();
+            }
+        };
+        final TransitionListenerAdapter listener2 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionStart(@NonNull Transition transition, boolean isReverse) {
+                slide.addListener(listener1);
+            }
+
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch2.countDown();
+            }
+        };
+        slide.addListener(listener2);
+        rule.runOnUiThread(() -> {
+            ViewGroup root = rule.getActivity().getRoot();
+            TransitionManager.beginDelayedTransition(root, slide);
+            view.setVisibility(View.INVISIBLE);
+        });
+        assertTrue(latch1.await(1, TimeUnit.SECONDS));
+        assertTrue(latch2.await(1, TimeUnit.SECONDS));
+    }
+
     private void showInitialScene() throws Throwable {
         SyncRunnable enter0 = new SyncRunnable();
         mScenes[0].setEnterAction(enter0);
diff --git a/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java b/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
index 52dacee..d6f55c5 100644
--- a/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
+++ b/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
@@ -275,10 +275,23 @@
         controller.animateToEnd();
     }
 
+    @NonNull
     @Override
-    public void animateToStart(@NonNull Object transitionController) {
+    public Runnable animateToStart(@NonNull Object transitionController,
+            @NonNull ViewGroup sceneRoot, @NonNull Runnable completeRunnable) {
         TransitionSeekController controller = (TransitionSeekController) transitionController;
         controller.animateToStart();
+        return () -> {
+            final Fade zeroDurationTransition = new Fade();
+            zeroDurationTransition.setDuration(0);
+            zeroDurationTransition.addListener(new TransitionListenerAdapter() {
+                @Override
+                public void onTransitionEnd(@NonNull Transition transition) {
+                    completeRunnable.run();
+                }
+            });
+            TransitionManager.beginDelayedTransition(sceneRoot, zeroDurationTransition);
+        };
     }
 
     @Override
diff --git a/transition/transition/src/main/java/androidx/transition/Transition.java b/transition/transition/src/main/java/androidx/transition/Transition.java
index 529448e..8e013cc 100644
--- a/transition/transition/src/main/java/androidx/transition/Transition.java
+++ b/transition/transition/src/main/java/androidx/transition/Transition.java
@@ -239,6 +239,9 @@
     // that have completed
     boolean mEnded = false;
 
+    // The transition that this was cloned from
+    private Transition mCloneParent = null;
+
     // The set of listeners to be sent transition lifecycle events.
     private ArrayList<Transition.TransitionListener> mListeners = null;
 
@@ -2138,7 +2141,9 @@
         if (mListeners == null) {
             return this;
         }
-        mListeners.remove(listener);
+        if (!mListeners.remove(listener) && mCloneParent != null) {
+            mCloneParent.removeListener(listener);
+        }
         if (mListeners.size() == 0) {
             mListeners = null;
         }
@@ -2306,9 +2311,8 @@
             clone.mStartValuesList = null;
             clone.mEndValuesList = null;
             clone.mSeekController = null;
-            if (mListeners != null) {
-                clone.mListeners = new ArrayList<>(mListeners);
-            }
+            clone.mCloneParent = this;
+            clone.mListeners = null;
             return clone;
         } catch (CloneNotSupportedException e) {
             throw new RuntimeException(e);
@@ -2336,6 +2340,17 @@
      * Calls notification on each listener.
      */
     void notifyListeners(TransitionNotification notification, boolean isReversed) {
+        notifyFromTransition(this, notification, isReversed);
+    }
+
+    private void notifyFromTransition(
+            Transition transition,
+            TransitionNotification notification,
+            boolean isReversed
+    ) {
+        if (mCloneParent != null) {
+            mCloneParent.notifyFromTransition(transition, notification, isReversed);
+        }
         if (mListeners != null && !mListeners.isEmpty()) {
             // Use a cache so that we don't have to keep allocating on every notification
             int size = mListeners.size();
@@ -2344,7 +2359,7 @@
             mListenersCache = null;
             listeners = mListeners.toArray(listeners);
             for (int i = 0; i < size; i++) {
-                notification.notifyListener(listeners[i], Transition.this, isReversed);
+                notification.notifyListener(listeners[i], transition, isReversed);
                 listeners[i] = null;
             }
             mListenersCache = listeners;
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
index 472ba2f..de4d6e1 100644
--- a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
@@ -37,10 +37,14 @@
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
 import androidx.compose.ui.unit.dp
 import androidx.tv.foundation.ExperimentalTvFoundationApi
 import androidx.tv.foundation.text.AndroidImeOptions
 import androidx.tv.foundation.text.TvKeyboardAlignment
+import androidx.tv.material3.ExperimentalTvMaterial3Api
+import androidx.tv.material3.MaterialTheme
 
 @Composable
 fun TextFieldContent() {
@@ -52,8 +56,9 @@
         }
         item {
             LazyColumn(verticalArrangement = Arrangement.spacedBy(20.dp)) {
-                item { SampleTextField(label = "Email") }
-                item { SampleTextField(label = "Password") }
+                item { SampleTextField(label = "Name") }
+                item { SampleTextField(label = "Email", keyboardType = KeyboardType.Email) }
+                item { SampleTextField(label = "Password", keyboardType = KeyboardType.Password) }
                 item { SampleButton(text = "Submit") }
             }
         }
@@ -65,9 +70,9 @@
     }
 }
 
-@OptIn(ExperimentalTvFoundationApi::class)
+@OptIn(ExperimentalTvFoundationApi::class, ExperimentalTvMaterial3Api::class)
 @Composable
-fun SampleTextField(label: String) {
+fun SampleTextField(label: String, keyboardType: KeyboardType = KeyboardType.Text) {
     var text by remember { mutableStateOf("") }
 
     OutlinedTextField(
@@ -81,12 +86,24 @@
             Text("$label...")
         },
         keyboardOptions = KeyboardOptions(
-                platformImeOptions = AndroidImeOptions(TvKeyboardAlignment.Left)
+            keyboardType = keyboardType,
+            platformImeOptions = AndroidImeOptions(TvKeyboardAlignment.Left),
+            imeAction = ImeAction.Next
         ),
         colors = OutlinedTextFieldDefaults.colors(
-            focusedBorderColor = Color.Cyan,
-            focusedLabelColor = Color.Cyan,
-            cursorColor = Color.White
+            unfocusedTextColor = MaterialTheme.colorScheme.onSurface,
+            focusedTextColor = MaterialTheme.colorScheme.onSurface,
+            unfocusedBorderColor = MaterialTheme.colorScheme.border,
+            focusedBorderColor = MaterialTheme.colorScheme.primary,
+            unfocusedLabelColor = MaterialTheme.colorScheme.onSurfaceVariant,
+            focusedLabelColor = MaterialTheme.colorScheme.primary,
+            cursorColor = MaterialTheme.colorScheme.primary,
+            unfocusedLeadingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+            focusedLeadingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+            unfocusedTrailingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+            focusedTrailingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+            errorLabelColor = MaterialTheme.colorScheme.error,
+            errorBorderColor = MaterialTheme.colorScheme.error
         )
     )
 }
diff --git a/tv/tv-foundation/src/main/baseline-prof.txt b/tv/tv-foundation/src/main/baseline-prof.txt
new file mode 100644
index 0000000..970cd8b
--- /dev/null
+++ b/tv/tv-foundation/src/main/baseline-prof.txt
@@ -0,0 +1,5623 @@
+HPLandroidx/collection/ArrayMap$EntrySet;-><init>(Ljava/util/Map;I)V
+HPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
+HPLandroidx/compose/runtime/CompositionImpl;->dispose()V
+HPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
+HPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z
+HPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z
+HPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V
+HPLandroidx/compose/runtime/SlotWriter;->skipGroup()I
+HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;)Ljava/lang/Boolean;
+HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
+HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HPLandroidx/compose/ui/node/UiApplier;->clear()V
+HPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;-><init>(II)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;Lkotlin/jvm/internal/Ref$ObjectRef;I)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;->getHasMoreContent()Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->hasMoreContent-FR3nfPY(Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->isForward-4vf7U8o(I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getFirstPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getHasVisibleItems()Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getItemCount()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getLastPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->remeasure()V
+HPLcom/example/tvcomposebasedtests/JankStatsAggregator;->issueJankReport(Ljava/lang/String;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Boolean;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Number;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/Gson;->getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+HPLcom/google/gson/JsonArray;-><init>()V
+HPLcom/google/gson/JsonArray;->iterator()Ljava/util/Iterator;
+HPLcom/google/gson/JsonObject;-><init>()V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Boolean;)V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Number;)V
+HPLcom/google/gson/JsonPrimitive;->getAsNumber()Ljava/lang/Number;
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;-><init>(Lcom/google/gson/internal/LinkedTreeMap;)V
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->hasNext()Z
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(ZLcom/google/gson/internal/LinkedTreeMap$Node;Ljava/lang/Object;Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;->getValue()Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->entrySet()Ljava/util/Set;
+HPLcom/google/gson/internal/LinkedTreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;->rebalance(Lcom/google/gson/internal/LinkedTreeMap$Node;Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->replaceInParent(Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateLeft(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateRight(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;-><init>()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endObject()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->get()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->name(Ljava/lang/String;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->peek()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->put(Lcom/google/gson/JsonElement;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(J)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$34$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$EnumTypeAdapter;-><init>(Lcom/google/gson/Gson;Lcom/google/gson/TypeAdapter;Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;-><init>(Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;->equals(Ljava/lang/Object;)Z
+HPLcom/google/gson/reflect/TypeToken;->hashCode()I
+HPLcom/google/gson/stream/JsonWriter;-><init>(Ljava/io/Writer;)V
+HPLcom/google/gson/stream/JsonWriter;->beforeValue()V
+HPLcom/google/gson/stream/JsonWriter;->beginArray()V
+HPLcom/google/gson/stream/JsonWriter;->beginObject()V
+HPLcom/google/gson/stream/JsonWriter;->close(IIC)V
+HPLcom/google/gson/stream/JsonWriter;->endObject()V
+HPLcom/google/gson/stream/JsonWriter;->peek()I
+HPLcom/google/gson/stream/JsonWriter;->string(Ljava/lang/String;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Ljava/lang/Number;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Z)V
+HPLcom/google/gson/stream/JsonWriter;->writeDeferredName()V
+HPLkotlin/ResultKt;->canonicalize(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
+HPLkotlin/ResultKt;->getRawType(Ljava/lang/reflect/Type;)Ljava/lang/Class;
+HPLkotlin/TuplesKt;->fastFilter(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function1;)Ljava/util/ArrayList;
+HPLkotlin/TuplesKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HPLkotlin/collections/ArrayDeque;->add(ILjava/lang/Object;)V
+HPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(I)V
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(II)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable()V
+HSPLandroidx/activity/ComponentActivity$1;-><init>(Landroid/view/KeyEvent$Callback;I)V
+HSPLandroidx/activity/ComponentActivity$2;-><init>()V
+HSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->onDraw()V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->viewCreated(Landroid/view/View;)V
+HSPLandroidx/activity/ComponentActivity;-><init>()V
+HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
+HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
+HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
+HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/activity/FullyDrawnReporter;-><init>(Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Landroidx/activity/ComponentActivity$1;)V
+HSPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V
+HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
+HSPLandroidx/activity/result/ActivityResult$1;-><init>(I)V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>()V
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(Landroidx/arch/core/internal/SafeIterableMap;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V
+HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/ArraySet;-><clinit>()V
+HSPLandroidx/collection/ArraySet;-><init>()V
+HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroidx/collection/ArraySet;->allocArrays(I)V
+HSPLandroidx/collection/ArraySet;->clear()V
+HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+HSPLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I
+HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
+HSPLandroidx/collection/LongSparseArray;-><clinit>()V
+HSPLandroidx/collection/LongSparseArray;-><init>(I)V
+HSPLandroidx/collection/SimpleArrayMap;-><init>()V
+HSPLandroidx/collection/SparseArrayCompat;-><clinit>()V
+HSPLandroidx/collection/SparseArrayCompat;-><init>()V
+HSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLjava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLjava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/TweenSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->compareTo(II)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->ordinal(I)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->values(I)[I
+HSPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;)V
+HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V
+HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationVector1D;-><init>(F)V
+HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F
+HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I
+HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V
+HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V
+HSPLandroidx/compose/animation/core/AnimationVector2D;-><init>(FF)V
+HSPLandroidx/compose/animation/core/AnimationVector3D;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F
+HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I
+HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V
+HSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
+HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)V
+HSPLandroidx/compose/animation/core/EasingKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(ILkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
+HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V
+HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverterImpl;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z
+HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Landroidx/compose/foundation/ImageKt$Image$1$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/ui/input/pointer/util/PointerIdArray;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()V
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/BackgroundElement;-><init>(JLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BackgroundNode;-><init>(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;-><init>(Landroidx/compose/ui/graphics/Brush;JJLkotlin/ResultKt;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/BorderModifierNode;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BorderStroke;-><init>(FLandroidx/compose/ui/graphics/SolidColor;)V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/FocusableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusableInteractionNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableInteractionNode;->emitWithFallback(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/Interaction;)V
+HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;-><init>()V
+HSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusableKt;->focusable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;-><init>(Landroidx/compose/foundation/FocusableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->onReset()V
+HSPLandroidx/compose/foundation/FocusableSemanticsNode;-><init>()V
+HSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/IndicationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V
+HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/MutatePriority;-><clinit>()V
+HSPLandroidx/compose/foundation/MutatePriority;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/MutatorMutex$Mutator;-><init>(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;-><init>(Landroidx/compose/foundation/MutatePriority;Landroidx/compose/foundation/MutatorMutex;Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/MutatorMutex;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;-><init>(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;-><init>(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZ)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;-><init>(Landroidx/compose/foundation/ScrollState;I)V
+HSPLandroidx/compose/foundation/ScrollState;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollState;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollState;->getValue()I
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->cancelAndRemoveAll(Ljava/util/concurrent/CancellationException;)V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->calculateScrollDistance(FFF)F
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$Request;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->access$calculateScrollDelta(Landroidx/compose/foundation/gestures/ContentInViewNode;)F
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->isMaxVisible-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Z
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->launchAnimation()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->relocationOffset-BMxPBkI(Landroidx/compose/ui/geometry/Rect;J)J
+HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpecImpl;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollDraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>(Z)V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;-><init>(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/tv/foundation/TvBringIntoViewSpec;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>(Landroidx/compose/animation/core/AnimationSpec;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->animateToZero(Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;-><init>(Landroidx/compose/foundation/interaction/FocusInteraction$Focus;)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(F)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V
+HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(Z)V
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V
+HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/FillElement;-><init>(IF)V
+HSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/FillNode;-><init>(IF)V
+HSPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;-><init>()V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetElement;-><init>(FF)V
+HSPLandroidx/compose/foundation/layout/OffsetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/OffsetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/foundation/layout/OffsetKt;->access$intrinsicSize(Ljava/util/List;Landroidx/compose/ui/CombinedModifier$toString$1;Landroidx/compose/ui/CombinedModifier$toString$1;IIII)I
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getRowColumnParentData(Landroidx/compose/ui/layout/Measurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
+HSPLandroidx/compose/foundation/layout/OffsetKt;->offset-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetNode;-><init>(FFZ)V
+HSPLandroidx/compose/foundation/layout/OffsetNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/PaddingElement;-><init>(FFFF)V
+HSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/PaddingNode;-><init>(FFFFZ)V
+HSPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;-><init>(FFFF)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(III[I)V
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V
+HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFI)V
+HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeNode;-><init>(FFFFZ)V
+HSPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J
+HSPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;-><init>(IZLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/WrapContentNode;-><init>(IZLkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(Ljava/lang/Object;ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->isLookingAhead()Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(JI)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->pin()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->release()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->size()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->schedulePrefetch-0kLqBqw(JI)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;-><init>(IJ)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->access$bringChildIntoView$localRect(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;-><init>(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(F)V
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F
+HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;-><clinit>()V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;)V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->intrinsicHeight(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph;
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraphIntrinsics;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZII)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->doInvalidations(ZZZZ)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getTextSubstitution()Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateCallbacks(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateLayoutRelatedArgs-MPT68mk(Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IIZLandroidx/compose/ui/text/font/FontFamily$Resolver;I)Z
+HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;-><clinit>()V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V
+HSPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w$default(JJJI)Landroidx/compose/material3/ColorScheme;
+HSPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V
+HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V
+HSPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V
+HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material3/ShapesKt;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/TextKt;->Text-fLXpl1I(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;I)V
+HSPLandroidx/compose/material3/TypographyKt;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypeScaleTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypefaceTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypographyTokens;-><clinit>()V
+HSPLandroidx/compose/runtime/Anchor;-><init>(I)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Landroidx/compose/runtime/Pending$keyMap$2;)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V
+HSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/ui/node/UiApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V
+HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I
+HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V
+HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->deactivateToEndGroup(Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/core/content/res/ComplexColorCompat;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V
+HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/core/content/res/ComplexColorCompat;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILandroidx/compose/runtime/OpaqueKey;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V
+HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V
+HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroupKeyHash(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
+HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V
+HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/HashSet;)V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V
+HSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/ui/node/UiApplier;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet;
+HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V
+HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V
+HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V
+HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->observer()V
+HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocalMap;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionObserverHolder;-><init>()V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/internal/ContextScope;)V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)Z
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)I
+HSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Landroidx/compose/runtime/ReferentialEqualityPolicy;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/GroupInfo;-><init>(III)V
+HSPLandroidx/compose/runtime/IntStack;-><init>()V
+HSPLandroidx/compose/runtime/IntStack;-><init>(I)V
+HSPLandroidx/compose/runtime/IntStack;->getSize()I
+HSPLandroidx/compose/runtime/IntStack;->pop()I
+HSPLandroidx/compose/runtime/IntStack;->push(I)V
+HSPLandroidx/compose/runtime/IntStack;->pushDiagonal(III)V
+HSPLandroidx/compose/runtime/IntStack;->pushRange(IIII)V
+HSPLandroidx/compose/runtime/IntStack;->quickSort(II)V
+HSPLandroidx/compose/runtime/IntStack;->swapDiagonal(II)V
+HSPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/KeyInfo;-><init>(ILjava/lang/Object;II)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/runtime/Latch;-><init>()V
+HSPLandroidx/compose/runtime/Latch;-><init>(I)V
+HSPLandroidx/compose/runtime/Latch;->add(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/runtime/Latch;->contains(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/Latch;->pop()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/runtime/Latch;->remove(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(Landroidx/compose/runtime/MonotonicFrameClock;)V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
+HSPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/core/content/res/ComplexColorCompat;I)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl;
+HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z
+HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
+HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;
+HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I
+HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z
+HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z
+HSPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List;
+HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/runtime/SlotReader;-><init>(Landroidx/compose/runtime/SlotTable;)V
+HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor;
+HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->close()V
+HSPLandroidx/compose/runtime/SlotReader;->endGroup()V
+HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I
+HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z
+HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I
+HSPLandroidx/compose/runtime/SlotReader;->objectKey([II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->parent(I)I
+HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V
+HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I
+HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotReader;->startGroup()V
+HSPLandroidx/compose/runtime/SlotTable;-><init>()V
+HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
+HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader;
+HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter;
+HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z
+HSPLandroidx/compose/runtime/SlotWriter;-><clinit>()V
+HSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V
+HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;
+HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->close()V
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I
+HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V
+HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V
+HSPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;-><init>(I)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;-><init>(I)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;-><init>(Landroidx/compose/runtime/ProduceStateScopeImpl;I)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;-><init>()V
+HSPLandroidx/compose/runtime/Stack;-><init>(I)V
+HSPLandroidx/compose/runtime/Stack;-><init>(II)V
+HSPLandroidx/compose/runtime/Stack;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Ljava/nio/ByteBuffer;)V
+HSPLandroidx/compose/runtime/Stack;->clear()V
+HSPLandroidx/compose/runtime/Stack;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;->readUnsignedInt()J
+HSPLandroidx/compose/runtime/Stack;->skip(I)V
+HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/changelist/ChangeList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;-><init>(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V
+HSPLandroidx/compose/runtime/changelist/FixupList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(II)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(III)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;-><init>(Landroidx/compose/runtime/changelist/Operations;)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/changelist/Operations;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I
+HSPLandroidx/compose/runtime/changelist/Operations;->clear()V
+HSPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->peekOperation()Landroidx/compose/runtime/changelist/Operation;
+HSPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getKey()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List;
+HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V
+HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;L_COROUTINE/ArtificialStackFrames;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;-><init>(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>()V
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;-><init>(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I
+HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/coroutines/CoroutineContext$plus$1;)V
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;-><init>(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/internal/Lambda;I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;-><init>(Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/collections/AbstractMap$toString$1;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
+HSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V
+HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><clinit>()V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><init>(I)V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Landroidx/compose/ui/layout/Measurable;I)Ljava/lang/Integer;
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/CombinedModifier;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V
+HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/Modifier$Node;-><init>()V
+HSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
+HSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z
+HSPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V
+HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V
+HSPLandroidx/compose/ui/Modifier$Node;->onReset()V
+HSPLandroidx/compose/ui/Modifier$Node;->reset$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/ui/ZIndexElement;-><init>()V
+HSPLandroidx/compose/ui/ZIndexElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/ZIndexElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/ui/ZIndexNode;-><init>(F)V
+HSPLandroidx/compose/ui/ZIndexNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+HSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;-><init>(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/draw/CacheDrawScope;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult;
+HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->drawWithCache(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/DrawResult;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><clinit>()V
+HSPLandroidx/compose/ui/draw/PainterElement;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/draw/PainterNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
+HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/draw/PainterNode;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z
+HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z
+HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z
+HSPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J
+HSPLandroidx/compose/ui/focus/FocusChangedElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/focus/FocusChangedNode;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/ui/focus/FocusDirection;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats-I7lrPNg(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;I)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats_I7lrPNg$inSourceBeam(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->clearFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->collectAccessibleChildren(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findActiveFocusNode(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findBestCandidate-4WY_MpI(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/geometry/Rect;I)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findChildCorrespondingToFocusEnter--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusRect(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->generateAndSearchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->grantFocus(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->invalidateFocusEvent(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$isCandidate(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$weightedDistance(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)J
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isEligibleForFocusSearch(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomClearFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomEnter-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomRequestFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performRequestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requestFocusForChild(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireTransactionManager(Landroidx/compose/ui/focus/FocusTargetNode;)Lcom/google/gson/internal/ConstructorConstructor;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchBeyondBounds--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->twoDimensionalFocusSearch--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;-><init>(Landroidx/compose/ui/focus/FocusOwnerImpl;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;-><init>(Landroidx/compose/ui/focus/FocusTargetNode;Ljava/lang/Object;ILjava/lang/Object;I)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->moveFocus-3ESFkO8(I)Z
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke-3ESFkO8()Landroidx/compose/ui/focus/FocusRequester;
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->fetchFocusProperties$ui_release()Landroidx/compose/ui/focus/FocusPropertiesImpl;
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl;
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->onReset()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->scheduleInvalidationForFocusEvents$ui_release()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->setFocusState(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/MutableRect;-><init>()V
+HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z
+HSPLandroidx/compose/ui/geometry/Offset;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/Rect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/geometry/Rect;->intersect(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate(FF)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate-k-4lQ0M(J)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V
+HSPLandroidx/compose/ui/geometry/Size;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Size;-><init>(J)V
+HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
+HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F
+HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
+HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;-><init>()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->scale(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/Brush;-><init>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(I)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(J)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V
+HSPLandroidx/compose/ui/graphics/Color;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Color;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J
+HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/Color;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F
+HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F
+HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F
+HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F
+HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S
+HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F
+HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J
+HSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V
+HSPLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
+HSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>(I)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V
+HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShouldAutoInvalidate()Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>(DI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Lkotlin/ResultKt;)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->scale-0AR0LA0(FFJ)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-AsUm42w$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJI)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J
+HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;-><init>(FFIII)V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;)V
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V
+HSPLandroidx/compose/ui/input/InputMode;-><init>(I)V
+HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(I)V
+HSPLandroidx/compose/ui/input/key/Key;-><clinit>()V
+HSPLandroidx/compose/ui/input/key/Key;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/input/key/KeyEvent;-><init>(Landroid/view/KeyEvent;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/input/key/KeyInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->Key(I)J
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLandroidx/compose/ui/input/pointer/PointerIcon;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;-><init>(Ljava/lang/Object;Lokhttp3/MediaType;Lkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FF)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;-><init>(Landroidx/compose/ui/layout/Measurable;Ljava/lang/Enum;Ljava/lang/Enum;I)V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;-><init>(III)V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;-><init>(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/unit/LayoutDirection;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/layout/LayoutElement;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;I)V
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->isLookingAhead()Z
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(JI)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/layout/MeasurePolicy;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;)V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V
+HSPLandroidx/compose/ui/layout/Placeable;-><init>()V
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I
+HSPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V
+HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V
+HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V
+HSPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;II)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>()V
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V
+HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Landroidx/compose/material3/ShapesKt$LocalShapes$1;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocal;)V
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V
+HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;-><init>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->reset$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/HitTestResult;-><init>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicHeight(I)I
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicHeight(I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicWidth(I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZ)V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZI)V
+HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V
+HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V
+HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getMeasuredByParent$ui_release$enumunboxing$()I
+HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I
+HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V
+HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z
+HSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z
+HSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/LayoutNode;->move$ui_release(III)V
+HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V
+HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZI)V
+HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawDirect-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markSubtreeAsNotPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicHeight(I)I
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicWidth(I)I
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onIntrinsicsQueried()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V
+HSPLandroidx/compose/ui/node/LookaheadAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doLookaheadRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;->areItemsTheSame(II)Z
+HSPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z
+HSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V
+HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V
+HSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><init>(Landroidx/compose/ui/node/ObserverModifierNode;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/node/TailModifierNode;-><init>()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V
+HSPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/UiApplier;->down(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->getCurrent()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V
+HSPLandroidx/compose/ui/node/UiApplier;->up()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext;
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V
+HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/res/Configuration;)I
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->onGlobalLayout()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->onTouchModeChanged(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/HapticFeedback;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/input/pointer/PointerIconService;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSoftwareKeyboardController()Landroidx/compose/ui/platform/SoftwareKeyboardController;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/TextToolbar;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getView()Landroid/view/View;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->get_viewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCheckIsTextEditor()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onFocusChanged(ZILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->pack-ZIaKswc(II)J
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setShowLayoutBounds(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->set_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;->setViewTranslationCallback(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V
+HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V
+HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z
+HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;)V
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V
+HSPLandroidx/compose/ui/platform/InspectableModifier;-><init>()V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Landroidx/compose/ui/text/SaversKt$ColorSaver$1;)V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()V
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;
+HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z
+HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><clinit>()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(I)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Landroidx/compose/ui/node/InnerNodeCoordinator;)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WeakCache;->add(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V
+HSPLandroidx/compose/ui/platform/WeakCache;->get$1()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WeakCache;->set(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/internal/ContextScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition;
+HSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;-><init>(Lkotlin/jvm/functions/Function1;Z)V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V
+HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;-><init>(ZLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><init>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z
+HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;
+HSPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;
+HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F
+HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F
+HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;->paint-LG529CI(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Lkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;IILjava/lang/String;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/AnnotatedStringKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/EmojiSupportMatch;-><init>(I)V
+HSPLandroidx/compose/ui/text/MultiParagraph;->paint-LG529CI$default(Landroidx/compose/ui/text/MultiParagraph;Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;I)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke$1()Ljava/lang/Float;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/ParagraphInfo;-><init>(Landroidx/compose/ui/text/AndroidParagraph;IIIIFF)V
+HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;II)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
+HSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/ParagraphStyleKt;->fastMerge-HtYhynw(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)Landroidx/compose/ui/text/ParagraphStyle;
+HSPLandroidx/compose/ui/text/PlatformParagraphStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/PlatformTextStyle;-><init>(Landroidx/compose/ui/text/PlatformParagraphStyle;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;I)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/SpanStyleKt;->fastMerge-dSHsh3o(Landroidx/compose/ui/text/SpanStyle;JLandroidx/compose/ui/graphics/Brush;FJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V
+HSPLandroidx/compose/ui/text/TextLayoutResult;-><init>(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V
+HSPLandroidx/compose/ui/text/TextRange;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I
+HSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JI)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/DefaultFontFamily;I)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;I)V
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics;
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)F
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode;
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas;
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/text/android/Paint29;->getTextBounds(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V
+HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()V
+HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z
+HSPLandroidx/compose/ui/text/android/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V
+HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I
+HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F
+HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;-><init>(FIZZF)V
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V
+HSPLandroidx/compose/ui/text/caches/LruCache;-><init>()V
+HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/caches/LruCache;->size()I
+HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>()V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/unit/Dp$Companion;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V
+HSPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I
+HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V
+HSPLandroidx/compose/ui/text/input/TextInputService;-><init>()V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;Landroidx/compose/ui/input/pointer/PositionCalculator;)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;I)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->doFrame(J)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
+HSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/AndroidLocale;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(F)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;
+HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/platform/URLSpanCache;-><init>()V
+HSPLandroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)V
+HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F
+HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
+HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/Hyphens;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDirection;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush;
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V
+HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZ)V
+HSPLandroidx/compose/ui/text/style/TextMotion;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Constraints;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Constraints;-><init>(J)V
+HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J
+HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I
+HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I
+HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F
+HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
+HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
+HSPLandroidx/compose/ui/unit/DensityImpl;-><init>(FF)V
+HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F
+HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/unit/Dp$Companion;->access$getIsShowingLayoutBounds()Z
+HSPLandroidx/compose/ui/unit/Dp$Companion;->area([F)F
+HSPLandroidx/compose/ui/unit/Dp$Companion;->bitsNeedForSize(I)I
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->fixed-JhjzzOo(II)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/unit/Dp;-><init>(F)V
+HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z
+HSPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/DpRect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/unit/DpRect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I
+HSPLandroidx/compose/ui/unit/IntSize;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V
+HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
+HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F
+HSPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V
+HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
+HSPLandroidx/core/app/ComponentActivity;-><init>()V
+HSPLandroidx/core/app/ComponentActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/core/app/ComponentActivity;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/CoreComponentFactory;-><init>()V
+HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
+HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;
+HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>()V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(I)V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/core/content/res/ComplexColorCompat;->find(Ljava/lang/Object;)I
+HSPLandroidx/core/content/res/ComplexColorCompat;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/core/content/res/ComplexColorCompat;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/core/graphics/TypefaceCompat;-><clinit>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;-><init>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface;
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font;
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I
+HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$1()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$2()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$3()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V
+HSPLandroidx/core/os/TraceCompat;-><clinit>()V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(Ljava/util/List;ILjava/lang/Throwable;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;->run()V
+HSPLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor;
+HSPLandroidx/core/provider/FontRequest;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
+HSPLandroidx/core/provider/FontsContractCompat$FontInfo;-><init>(Landroid/net/Uri;IIZI)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(Landroidx/core/view/AccessibilityDelegateCompat;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEvent(Landroid/view/View;I)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;
+HSPLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V
+HSPLandroidx/core/view/ViewCompat;-><clinit>()V
+HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->process(Ljava/lang/CharSequence;IZ)Ljava/lang/CharSequence;
+HSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V
+HSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V
+HSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig;)V
+HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;
+HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I
+HSPLandroidx/emoji2/text/EmojiCompat;->load()V
+HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/runtime/Stack;Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;-><init>(Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean;
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;-><init>(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Lkotlin/ULong$Companion;)V
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object;
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;-><init>(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->shouldUseEmojiPresentationStyleForSingleCodepoint()Z
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Lkotlin/ULong$Companion;Landroidx/emoji2/text/DefaultGlyphChecker;Ljava/util/Set;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/String;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Landroid/os/Handler;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>(I)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V
+HSPLandroidx/emoji2/text/MetadataRepo;-><init>(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><clinit>()V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem;
+HSPLandroidx/emoji2/text/flatbuffer/Table;-><init>()V
+HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;
+HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(I)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(II)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;->fillInStackTrace()Ljava/lang/Throwable;
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;
+HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
+HSPLandroidx/lifecycle/Lifecycling;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><clinit>()V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment;-><init>()V
+HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment;->onResume()V
+HSPLandroidx/lifecycle/ReportFragment;->onStart()V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V
+HSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V
+HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V
+HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;-><init>(Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/FrameData;-><init>(JJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi24;-><init>(JJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;-><init>(JJJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;->copy()Landroidx/metrics/performance/FrameData;
+HSPLandroidx/metrics/performance/JankStats;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;)V
+HSPLandroidx/metrics/performance/JankStats;->logFrameData$metrics_performance_release(Landroidx/metrics/performance/FrameData;)V
+HSPLandroidx/metrics/performance/JankStatsApi16Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi22Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;-><init>(Landroidx/metrics/performance/JankStatsApi24Impl;Landroidx/metrics/performance/JankStats;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->getOrCreateFrameMetricsListenerDelegator(Landroid/view/Window;)Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->setupFrameTimer(Z)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;->getFrameStartTime$metrics_performance_release(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getExpectedFrameDuration(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getFrameData$metrics_performance_release(JJLandroid/view/FrameMetrics;)Landroidx/metrics/performance/FrameDataApi24;
+HSPLandroidx/metrics/performance/PerformanceMetricsState;-><init>()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->addFrameState(JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->cleanupSingleFrameStates$metrics_performance_release()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->getIntervalStates$metrics_performance_release(JJLjava/util/ArrayList;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;-><init>(Landroid/content/Context;I)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry;-><init>()V
+HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V
+HSPLandroidx/startup/AppInitializer;-><clinit>()V
+HSPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V
+HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V
+HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object;
+HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;
+HSPLandroidx/startup/InitializationProvider;-><init>()V
+HSPLandroidx/startup/InitializationProvider;->onCreate()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V
+HSPLandroidx/tv/foundation/PivotOffsets;-><init>()V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;-><init>(Landroidx/tv/foundation/PivotOffsets;Z)V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->calculateScrollDistance(FFF)F
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;-><init>(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;->reset()V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JIII)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->getIndex()I
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->setIndex(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->update(II)V
+HSPLandroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;I)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;-><init>(Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Z)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Landroidx/tv/material3/TabKt$Tab$3$1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/semantics/CollectionInfo;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;-><init>(IILjava/util/HashMap;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;-><init>(Lkotlin/ranges/IntRange;Landroidx/tv/material3/TabKt;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;Landroidx/compose/runtime/Stack;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getItemCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(JZLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;ZLandroidx/compose/foundation/layout/PaddingValuesImpl;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;-><init>(Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;II)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getHeight()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getTotalItemsCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getWidth()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->placeChildren()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->getParentData(I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->position(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;->rememberTvLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/tv/foundation/lazy/list/TvLazyListState;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getKey()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getType()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;-><init>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListScope;->items$default(Landroidx/tv/foundation/lazy/list/TvLazyListScope;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><init>(II)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->applyMeasureResult$tv_foundation_release(Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;Z)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollBackward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollForward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/Border;-><clinit>()V
+HSPLandroidx/tv/material3/Border;-><init>(Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/Border;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ColorScheme;->getInverseSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getOnSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><init>(I)V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/ContentColorKt;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><init>(JF)V
+HSPLandroidx/tv/material3/Glow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/GlowIndication;-><init>(JLandroidx/compose/ui/graphics/Shape;FFF)V
+HSPLandroidx/tv/material3/GlowIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;
+HSPLandroidx/tv/material3/GlowIndicationInstance;-><init>(JLandroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/unit/Density;FFF)V
+HSPLandroidx/tv/material3/GlowIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndication;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndicationTokens;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$Surface$4;-><init>(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;-><init>(Landroidx/compose/ui/graphics/Shape;JI)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;-><init>(FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2;-><init>(JILandroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;FLandroidx/tv/material3/Glow;Landroidx/compose/ui/graphics/Shape;Landroidx/tv/material3/Border;FLandroidx/compose/runtime/MutableState;ZLkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;-><init>(Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/graphics/Shape;JJFLandroidx/tv/material3/Border;Landroidx/tv/material3/Glow;FLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/PressInteraction$Press;Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Z)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1;-><init>(ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/tv/material3/SurfaceKt;-><clinit>()V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface-xYaah8o(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$4(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$5(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/TabColors;-><init>(JJJJJJJJ)V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><init>()V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;-><init>(IZ)V
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$6;-><init>(Lkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$7;-><init>(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabKt;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt;->BasicText-BpD7jsM(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LazyLayout(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->Tab(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->TabRow-pAZo6Ak(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I
+HSPLandroidx/tv/material3/TabKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->collectIsFocusedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
+HSPLandroidx/tv/material3/TabKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/tv/material3/TabKt;->createCompositionCoroutineScope(Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLandroidx/tv/material3/TabKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/tv/material3/TabKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->finalConstraints-tfFHcEY(JZIF)J
+HSPLandroidx/tv/material3/TabKt;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F
+HSPLandroidx/tv/material3/TabKt;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+HSPLandroidx/tv/material3/TabKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+HSPLandroidx/tv/material3/TabKt;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->spring$default(FLjava/lang/Comparable;I)Landroidx/compose/animation/core/SpringSpec;
+HSPLandroidx/tv/material3/TabKt;->tween$default(ILandroidx/compose/animation/core/Easing;)Landroidx/compose/animation/core/TweenSpec;
+HSPLandroidx/tv/material3/TabKt;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/tv/material3/TabKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V
+HSPLandroidx/tv/material3/TabKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;-><init>(Landroidx/tv/material3/TabRowDefaults;Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJII)V
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowDefaults;->PillIndicator-jA1GFJw(Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJLandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;-><init>(I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Lkotlin/jvm/functions/Function4;Ljava/util/ArrayList;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/ArrayList;ILkotlin/jvm/functions/Function4;ILandroidx/compose/runtime/MutableState;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(IILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(ILkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;-><init>(Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$3;-><init>(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabRowScopeImpl;-><init>(Z)V
+HSPLandroidx/tv/material3/TabRowSlots;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowSlots;-><init>(ILjava/lang/String;)V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TextKt$Text$2;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;IIII)V
+HSPLandroidx/tv/material3/TextKt;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt;->Text-fLXpl1I(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/ToggleableSurfaceBorder;-><init>(Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;-><init>(JJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ToggleableSurfaceGlow;-><init>(Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><clinit>()V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><init>(FFFFFFFFFF)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;-><init>(Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/tokens/ColorLightTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/Elevation;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><init>(I)V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/util/List;II)Ljava/lang/Integer;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/material3/tokens/TypographyTokensKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><init>(I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;ILandroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/Config;-><init>(Landroid/content/Context;Landroidx/activity/ComponentActivity;II)V
+HSPLcom/example/tvcomposebasedtests/Config;->toString()Ljava/lang/String;
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;-><init>(Lcom/example/tvcomposebasedtests/JankStatsAggregator;)V
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;-><init>()V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onResume()V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;-><init>(II)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListScope;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;-><init>(III)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><init>(Ljava/lang/String;ILjava/lang/String;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;->values()[Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;->invoke()Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;-><init>(IILjava/util/List;Lkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/google/gson/internal/ConstructorConstructor;-><init>()V
+HSPLcom/google/gson/internal/ConstructorConstructor;->access$commitTransaction(Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;-><init>(I)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V
+HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m$1()Ljava/util/Iterator;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(III)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(ILjava/lang/String;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$1(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$2(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf$1(Ljava/lang/String;)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf(Ljava/lang/String;)I
+HSPLkotlin/ResultKt;-><clinit>()V
+HSPLkotlin/ResultKt;-><init>(Landroidx/metrics/performance/JankStats;)V
+HSPLkotlin/ResultKt;->App(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->Constraints$default(III)J
+HSPLkotlin/ResultKt;->Constraints(IIII)J
+HSPLkotlin/ResultKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl;
+HSPLkotlin/ResultKt;->DpOffset-YgX7TsA(FF)J
+HSPLkotlin/ResultKt;->IntOffset(II)J
+HSPLkotlin/ResultKt;->IntSize(II)J
+HSPLkotlin/ResultKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->SampleCardItem(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->SampleTvLazyRow(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->TvLazyRow(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
+HSPLkotlin/ResultKt;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->canBeSavedToBundle(Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->checkArgument(Ljava/lang/String;Z)V
+HSPLkotlin/ResultKt;->checkElementIndex$runtime_release(II)V
+HSPLkotlin/ResultKt;->checkNotNull$1(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->compare(II)I
+HSPLkotlin/ResultKt;->constrain-4WqzIAM(JJ)J
+HSPLkotlin/ResultKt;->constrainHeight-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->constrainWidth-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+HSPLkotlin/ResultKt;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Lkotlin/Result$Failure;
+HSPLkotlin/ResultKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlin/ResultKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ProducerCoroutine;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/ResultKt;->findIndexByKey$1(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I
+HSPLkotlin/ResultKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;
+HSPLkotlin/ResultKt;->getExclusions()Ljava/util/Set;
+HSPLkotlin/ResultKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;
+HSPLkotlin/ResultKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
+HSPLkotlin/ResultKt;->getProgressionLastElement(III)I
+HSPLkotlin/ResultKt;->getSp(D)J
+HSPLkotlin/ResultKt;->getSp(I)J
+HSPLkotlin/ResultKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLkotlin/ResultKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->isEnabled()Z
+HSPLkotlin/ResultKt;->isUnspecified--R2X_6o(J)Z
+HSPLkotlin/ResultKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/android/HandlerContext;ILkotlin/jvm/functions/Function2;I)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mapCapacity(I)I
+HSPLkotlin/ResultKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mmap(Landroid/content/Context;Landroid/net/Uri;)Ljava/nio/MappedByteBuffer;
+HSPLkotlin/ResultKt;->offset-NN6Ew-U(IIJ)J
+HSPLkotlin/ResultKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect;
+HSPLkotlin/ResultKt;->pack(FJ)J
+HSPLkotlin/ResultKt;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/ResultKt;->read(Ljava/nio/MappedByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
+HSPLkotlin/ResultKt;->recoverResult(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/ResultKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F
+HSPLkotlin/ResultKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V
+HSPLkotlin/ResultKt;->roundToInt(F)I
+HSPLkotlin/ResultKt;->scrollableWithPivot(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/tv/foundation/PivotOffsets;ZZ)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->stateIn(Lkotlinx/coroutines/flow/SafeFlow;Lkotlinx/coroutines/internal/ContextScope;Lkotlinx/coroutines/flow/StartedWhileSubscribed;Ljava/lang/Float;)Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+HSPLkotlin/ResultKt;->systemProp$default(Ljava/lang/String;IIII)I
+HSPLkotlin/ResultKt;->systemProp(Ljava/lang/String;JJJ)J
+HSPLkotlin/ResultKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->toSize-ozmzZPI(J)J
+HSPLkotlin/ResultKt;->ulongToDouble(J)D
+HSPLkotlin/ResultKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/TuplesKt;-><clinit>()V
+HSPLkotlin/TuplesKt;->CornerRadius(FF)J
+HSPLkotlin/TuplesKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZZZILandroidx/tv/foundation/PivotOffsets;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
+HSPLkotlin/TuplesKt;->PillIndicatorTabRow(Ljava/util/List;ILkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;
+HSPLkotlin/TuplesKt;->ScrollPositionUpdater(Lkotlin/jvm/functions/Function0;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Size(FF)J
+HSPLkotlin/TuplesKt;->TopNavigation(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/TuplesKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node;
+HSPLkotlin/TuplesKt;->access$removeRange(Ljava/util/ArrayList;II)V
+HSPLkotlin/TuplesKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode;
+HSPLkotlin/TuplesKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->beforeCheckcastToFunctionOfArity(ILjava/lang/Object;)V
+HSPLkotlin/TuplesKt;->binarySearch([II)I
+HSPLkotlin/TuplesKt;->bitsForSlot(II)I
+HSPLkotlin/TuplesKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/runtime/Stack;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->checkRadix(I)V
+HSPLkotlin/TuplesKt;->coerceIn(DDD)D
+HSPLkotlin/TuplesKt;->coerceIn(FFF)F
+HSPLkotlin/TuplesKt;->coerceIn(III)I
+HSPLkotlin/TuplesKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
+HSPLkotlin/TuplesKt;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->composableLambdaInstance(ILkotlin/jvm/internal/Lambda;Z)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->findLocation(ILjava/util/List;)I
+HSPLkotlin/TuplesKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlin/TuplesKt;->getCenter-uvyYCjk(J)J
+HSPLkotlin/TuplesKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getIncludeSelfInTraversal-H91voCI(I)Z
+HSPLkotlin/TuplesKt;->getLastIndex(Ljava/util/List;)I
+HSPLkotlin/TuplesKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V
+HSPLkotlin/TuplesKt;->isWhitespace(C)Z
+HSPLkotlin/TuplesKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
+HSPLkotlin/TuplesKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/TuplesKt;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/TuplesKt;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;
+HSPLkotlin/TuplesKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z
+HSPLkotlin/TuplesKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLkotlin/TuplesKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;
+HSPLkotlin/TuplesKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/TuplesKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;
+HSPLkotlin/TuplesKt;->runtimeCheck(Z)V
+HSPLkotlin/TuplesKt;->until(II)Lkotlin/ranges/IntRange;
+HSPLkotlin/ULong$Companion;-><init>()V
+HSPLkotlin/ULong$Companion;-><init>(I)V
+HSPLkotlin/ULong$Companion;-><init>(II)V
+HSPLkotlin/ULong$Companion;->checkElementIndex$kotlin_stdlib(II)V
+HSPLkotlin/ULong$Companion;->computeScaleFactor-H7hwNQA(JJ)J
+HSPLkotlin/ULong$Companion;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLkotlin/ULong$Companion;->getHolderForHierarchy(Landroid/view/View;)Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+HSPLkotlin/ULong$Companion;->injectIfNeededIn(Landroid/app/Activity;)V
+HSPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V
+HSPLkotlin/Unit;-><clinit>()V
+HSPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/collections/AbstractCollection;->isEmpty()Z
+HSPLkotlin/collections/AbstractCollection;->size()I
+HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke()Landroidx/compose/runtime/DisposableEffectResult;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(F)Ljava/lang/Float;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;
+HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap;->size()I
+HSPLkotlin/collections/AbstractMutableList;-><init>()V
+HSPLkotlin/collections/AbstractMutableList;->size()I
+HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/ArrayDeque;-><clinit>()V
+HSPLkotlin/collections/ArrayDeque;-><init>()V
+HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V
+HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V
+HSPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object;
+HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object;
+HSPLkotlin/collections/ArrayDeque;->getSize()I
+HSPLkotlin/collections/ArrayDeque;->incremented(I)I
+HSPLkotlin/collections/ArrayDeque;->isEmpty()Z
+HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I
+HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object;
+HSPLkotlin/collections/ArraysKt___ArraysKt;->asList([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/collections/ArraysKt___ArraysKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([I[III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([I[IIII)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill$default([Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill(II[Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
+HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->addAll(Ljava/lang/Iterable;Ljava/util/Collection;)V
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/List;Ljava/io/Serializable;)Ljava/util/ArrayList;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/ArrayList;)[I
+HSPLkotlin/collections/EmptyList;-><clinit>()V
+HSPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z
+HSPLkotlin/collections/EmptyList;->isEmpty()Z
+HSPLkotlin/collections/EmptyList;->size()I
+HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;
+HSPLkotlin/collections/EmptyMap;-><clinit>()V
+HSPLkotlin/collections/EmptyMap;->isEmpty()Z
+HSPLkotlin/collections/EmptyMap;->size()I
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(Lkotlin/coroutines/CoroutineContext$Key;)V
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><init>(I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V
+HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(ILjava/lang/String;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I
+HSPLkotlin/jvm/internal/ArrayIterator;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z
+HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V
+HSPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLkotlin/jvm/internal/ClassReference;-><clinit>()V
+HSPLkotlin/jvm/internal/ClassReference;-><init>(Ljava/lang/Class;)V
+HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class;
+HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/Lambda;-><init>(I)V
+HSPLkotlin/jvm/internal/Lambda;->getArity()I
+HSPLkotlin/jvm/internal/PropertyReference0Impl;->invoke()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/jvm/internal/Reflection;-><clinit>()V
+HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/jvm/internal/ClassReference;
+HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;-><init>(I)V
+HSPLkotlin/ranges/IntProgression;-><init>(III)V
+HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;
+HSPLkotlin/ranges/IntProgressionIterator;-><init>(III)V
+HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z
+HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I
+HSPLkotlin/ranges/IntRange;-><clinit>()V
+HSPLkotlin/ranges/IntRange;-><init>(II)V
+HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/ranges/IntRange;->isEmpty()Z
+HSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;)V
+HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(Lkotlin/sequences/FilteringSequence;)V
+HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V
+HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/SequencesKt;->firstOrNull(Lkotlin/sequences/FilteringSequence;)Ljava/lang/Object;
+HSPLkotlin/sequences/SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlinx/coroutines/CoroutineDispatcher$Key$1;)Lkotlin/sequences/FilteringSequence;
+HSPLkotlin/sequences/SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/text/StringsKt__IndentKt$getIndentFunction$2;-><init>(ILjava/lang/String;)V
+HSPLkotlin/text/StringsKt__RegexExtensionsKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
+HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/String;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I
+HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I
+HSPLkotlin/text/StringsKt__StringsKt;->isBlank(Ljava/lang/CharSequence;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast$default(Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C
+HSPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z
+HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->start$enumunboxing$(ILkotlinx/coroutines/AbstractCoroutine;Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/Active;-><clinit>()V
+HSPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V
+HSPLkotlinx/coroutines/CancelHandler;-><init>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><clinit>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/CancelledContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/JobSupport;)V
+HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/CancellationException;I)V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><clinit>()V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Landroid/view/View;)Landroid/view/View;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V
+HSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V
+HSPLkotlinx/coroutines/DispatchedTask;-><init>(I)V
+HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/DispatchedTask;->run()V
+HSPLkotlinx/coroutines/Dispatchers;-><clinit>()V
+HSPLkotlinx/coroutines/Empty;-><init>(Z)V
+HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/Empty;->isActive()Z
+HSPLkotlinx/coroutines/EventLoopImplBase;-><clinit>()V
+HSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->decrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->incrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->isUnconfinedLoopActive()Z
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->processUnconfinedEvent()Z
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/InvokeOnCancel;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobNode;-><init>()V
+HSPLkotlinx/coroutines/JobNode;->dispose()V
+HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport;
+HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobNode;->isActive()Z
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/ArrayList;
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/JobSupport;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport;-><init>(Z)V
+HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z
+HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException;
+HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/ArrayList;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
+HSPLkotlinx/coroutines/JobSupport;->isActive()Z
+HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode;
+HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V
+HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/NodeList;-><init>()V
+HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/NodeList;->isActive()Z
+HSPLkotlinx/coroutines/NodeList;->isRemoved()Z
+HSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V
+HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoopImplPlatform;
+HSPLkotlinx/coroutines/Unconfined;-><clinit>()V
+HSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()V
+HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;)V
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V
+HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
+HSPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/jvm/internal/SuspendLambda;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><init>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
+HSPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V
+HSPLkotlinx/coroutines/channels/Channel;-><clinit>()V
+HSPLkotlinx/coroutines/channels/ChannelSegment;-><init>(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(Ljava/lang/Object;ILjava/lang/Object;)Z
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ChannelSegment;->setElementLazy(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILkotlinx/coroutines/internal/Symbol;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/SafeFlow;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;)V
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/flow/SafeFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;-><init>()V
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V
+HSPLkotlinx/coroutines/flow/SharingCommand;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>()V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->add(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->contains(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->find(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/flow/SharingConfig;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->removeScope(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet;
+HSPLkotlinx/coroutines/flow/StartedLazily;-><init>(I)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowSlot;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><clinit>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><init>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><init>(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+HSPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;I)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V
+HSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/internal/Segment;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Segment;-><init>(JLkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
+HSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Symbol;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V
+HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlin/ULong$Companion;)V
+HSPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;I)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/sync/MutexImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V
+HSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z
+HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><init>(I)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V
+HSPLkotlinx/coroutines/sync/SemaphoreKt;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;-><init>(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I
+HSPLokhttp3/Headers$Builder;-><init>()V
+HSPLokhttp3/Headers$Builder;->add(I)V
+HSPLokhttp3/Headers$Builder;->takeMax()I
+HSPLokhttp3/MediaType;-><clinit>()V
+HSPLokhttp3/MediaType;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;I)Lkotlinx/coroutines/channels/BufferedChannel;
+HSPLokhttp3/MediaType;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLokhttp3/MediaType;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->Offset(FF)J
+HSPLokhttp3/MediaType;->ParagraphIntrinsics(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+HSPLokhttp3/MediaType;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;
+HSPLokhttp3/MediaType;->TextRange(II)J
+HSPLokhttp3/MediaType;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->access$checkIndex(ILjava/util/List;)V
+HSPLokhttp3/MediaType;->access$containsMark([II)Z
+HSPLokhttp3/MediaType;->access$groupSize([II)I
+HSPLokhttp3/MediaType;->access$hasAux([II)Z
+HSPLokhttp3/MediaType;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z
+HSPLokhttp3/MediaType;->access$isNode([II)Z
+HSPLokhttp3/MediaType;->access$nodeCount([II)I
+HSPLokhttp3/MediaType;->access$slotAnchor([II)I
+HSPLokhttp3/MediaType;->access$updateGroupSize([III)V
+HSPLokhttp3/MediaType;->access$updateNodeCount([III)V
+HSPLokhttp3/MediaType;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+HSPLokhttp3/MediaType;->cancel(Lkotlinx/coroutines/CoroutineScope;Landroidx/lifecycle/LifecycleDestroyedException;)V
+HSPLokhttp3/MediaType;->ceilToIntPx(F)I
+HSPLokhttp3/MediaType;->checkParallelism(I)V
+HSPLokhttp3/MediaType;->chromaticAdaptation([F[F[F)[F
+HSPLokhttp3/MediaType;->coerceIn-8ffj60Q(IJ)J
+HSPLokhttp3/MediaType;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLokhttp3/MediaType;->colors-u3YEpmA(JJJJJJJJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/tv/material3/ToggleableSurfaceColors;
+HSPLokhttp3/MediaType;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z
+HSPLokhttp3/MediaType;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->countOneBits(I)I
+HSPLokhttp3/MediaType;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+HSPLokhttp3/MediaType;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;
+HSPLokhttp3/MediaType;->getCharSequenceBounds(Landroid/text/TextPaint;Ljava/lang/CharSequence;II)Landroid/graphics/Rect;
+HSPLokhttp3/MediaType;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLokhttp3/MediaType;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
+HSPLokhttp3/MediaType;->inverse3x3([F)[F
+HSPLokhttp3/MediaType;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZLkotlinx/coroutines/JobNode;I)Lkotlinx/coroutines/DisposableHandle;
+HSPLokhttp3/MediaType;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z
+HSPLokhttp3/MediaType;->isClosed-impl(Ljava/lang/Object;)Z
+HSPLokhttp3/MediaType;->mul3x3([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Diag([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Float3([F[F)V
+HSPLokhttp3/MediaType;->mul3x3Float3_0([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_1([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_2([FFFF)F
+HSPLokhttp3/MediaType;->search(Ljava/util/ArrayList;II)I
+HSPLokhttp3/MediaType;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V
+HSPLokhttp3/MediaType;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V
+HSPLokhttp3/MediaType;->shape(Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;Landroidx/compose/runtime/Composer;I)Landroidx/tv/material3/ToggleableSurfaceShape;
+HSPLokhttp3/MediaType;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;
+HSPLokhttp3/MediaType;->updateChangedFlags(I)I
+L_COROUTINE/ArtificialStackFrames;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
+Landroidx/activity/ComponentActivity$1;
+Landroidx/activity/ComponentActivity$2;
+Landroidx/activity/ComponentActivity$3;
+Landroidx/activity/ComponentActivity$4;
+Landroidx/activity/ComponentActivity$5;
+Landroidx/activity/ComponentActivity$NonConfigurationInstances;
+Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;
+Landroidx/activity/ComponentActivity;
+Landroidx/activity/FullyDrawnReporter;
+Landroidx/activity/OnBackPressedDispatcher;
+Landroidx/activity/compose/ComponentActivityKt;
+Landroidx/activity/contextaware/ContextAwareHelper;
+Landroidx/activity/result/ActivityResult$1;
+Landroidx/arch/core/executor/ArchTaskExecutor;
+Landroidx/arch/core/executor/DefaultTaskExecutor$1;
+Landroidx/arch/core/executor/DefaultTaskExecutor;
+Landroidx/arch/core/internal/FastSafeIterableMap;
+Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
+Landroidx/arch/core/internal/SafeIterableMap$Entry;
+Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
+Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
+Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
+Landroidx/arch/core/internal/SafeIterableMap;
+Landroidx/collection/ArrayMap;
+Landroidx/collection/ArraySet;
+Landroidx/collection/LongSparseArray;
+Landroidx/collection/SimpleArrayMap;
+Landroidx/collection/SparseArrayCompat;
+Landroidx/compose/animation/FlingCalculator;
+Landroidx/compose/animation/FlingCalculatorKt;
+Landroidx/compose/animation/SingleValueAnimationKt;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
+Landroidx/compose/animation/core/Animatable$runAnimation$2;
+Landroidx/compose/animation/core/Animatable;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;
+Landroidx/compose/animation/core/AnimateAsStateKt;
+Landroidx/compose/animation/core/Animation;
+Landroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;
+Landroidx/compose/animation/core/AnimationResult;
+Landroidx/compose/animation/core/AnimationScope;
+Landroidx/compose/animation/core/AnimationSpec;
+Landroidx/compose/animation/core/AnimationState;
+Landroidx/compose/animation/core/AnimationVector1D;
+Landroidx/compose/animation/core/AnimationVector2D;
+Landroidx/compose/animation/core/AnimationVector3D;
+Landroidx/compose/animation/core/AnimationVector4D;
+Landroidx/compose/animation/core/AnimationVector;
+Landroidx/compose/animation/core/Animations;
+Landroidx/compose/animation/core/ComplexDouble;
+Landroidx/compose/animation/core/CubicBezierEasing;
+Landroidx/compose/animation/core/DecayAnimationSpecImpl;
+Landroidx/compose/animation/core/Easing;
+Landroidx/compose/animation/core/EasingKt$$ExternalSyntheticLambda0;
+Landroidx/compose/animation/core/EasingKt;
+Landroidx/compose/animation/core/FloatAnimationSpec;
+Landroidx/compose/animation/core/FloatDecayAnimationSpec;
+Landroidx/compose/animation/core/FloatSpringSpec;
+Landroidx/compose/animation/core/FloatTweenSpec;
+Landroidx/compose/animation/core/MutatorMutex$Mutator;
+Landroidx/compose/animation/core/MutatorMutex$mutate$2;
+Landroidx/compose/animation/core/MutatorMutex;
+Landroidx/compose/animation/core/SpringSimulation;
+Landroidx/compose/animation/core/SpringSpec;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$6;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$7;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$9;
+Landroidx/compose/animation/core/TargetBasedAnimation;
+Landroidx/compose/animation/core/TweenSpec;
+Landroidx/compose/animation/core/TwoWayConverterImpl;
+Landroidx/compose/animation/core/VectorConvertersKt;
+Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFloatAnimationSpec;
+Landroidx/compose/animation/core/VectorizedSpringSpec;
+Landroidx/compose/animation/core/VectorizedTweenSpec;
+Landroidx/compose/animation/core/VisibilityThresholdsKt;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;
+Landroidx/compose/foundation/AndroidOverscrollKt;
+Landroidx/compose/foundation/Api31Impl;
+Landroidx/compose/foundation/BackgroundElement;
+Landroidx/compose/foundation/BackgroundNode;
+Landroidx/compose/foundation/BorderCache;
+Landroidx/compose/foundation/BorderKt$drawRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode$drawGenericBorder$3;
+Landroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode;
+Landroidx/compose/foundation/BorderModifierNodeElement;
+Landroidx/compose/foundation/BorderStroke;
+Landroidx/compose/foundation/ClipScrollableContainerKt;
+Landroidx/compose/foundation/DrawOverscrollModifier;
+Landroidx/compose/foundation/FocusableElement;
+Landroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;
+Landroidx/compose/foundation/FocusableInteractionNode;
+Landroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;
+Landroidx/compose/foundation/FocusableKt;
+Landroidx/compose/foundation/FocusableNode$onFocusEvent$1;
+Landroidx/compose/foundation/FocusableNode;
+Landroidx/compose/foundation/FocusablePinnableContainerNode;
+Landroidx/compose/foundation/FocusableSemanticsNode;
+Landroidx/compose/foundation/FocusedBoundsKt;
+Landroidx/compose/foundation/FocusedBoundsNode;
+Landroidx/compose/foundation/FocusedBoundsObserverNode;
+Landroidx/compose/foundation/ImageKt$Image$1$1;
+Landroidx/compose/foundation/ImageKt$Image$1;
+Landroidx/compose/foundation/ImageKt$Image$2;
+Landroidx/compose/foundation/ImageKt;
+Landroidx/compose/foundation/Indication;
+Landroidx/compose/foundation/IndicationInstance;
+Landroidx/compose/foundation/IndicationKt$indication$2;
+Landroidx/compose/foundation/IndicationKt;
+Landroidx/compose/foundation/IndicationModifier;
+Landroidx/compose/foundation/MutatePriority;
+Landroidx/compose/foundation/MutatorMutex$Mutator;
+Landroidx/compose/foundation/MutatorMutex$mutateWith$2;
+Landroidx/compose/foundation/MutatorMutex;
+Landroidx/compose/foundation/OverscrollConfiguration;
+Landroidx/compose/foundation/OverscrollConfigurationKt;
+Landroidx/compose/foundation/OverscrollEffect;
+Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2;
+Landroidx/compose/foundation/ScrollState$canScrollForward$2;
+Landroidx/compose/foundation/ScrollState;
+Landroidx/compose/foundation/ScrollingLayoutElement;
+Landroidx/compose/foundation/ScrollingLayoutNode;
+Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec;
+Landroidx/compose/foundation/gestures/ContentInViewNode$Request;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;
+Landroidx/compose/foundation/gestures/ContentInViewNode;
+Landroidx/compose/foundation/gestures/DefaultFlingBehavior;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState;
+Landroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;
+Landroidx/compose/foundation/gestures/DraggableNode$onAttach$1;
+Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;
+Landroidx/compose/foundation/gestures/DraggableNode;
+Landroidx/compose/foundation/gestures/FlingBehavior;
+Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode$1;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode;
+Landroidx/compose/foundation/gestures/Orientation;
+Landroidx/compose/foundation/gestures/ScrollDraggableState;
+Landroidx/compose/foundation/gestures/ScrollScope;
+Landroidx/compose/foundation/gestures/ScrollableElement;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode;
+Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;
+Landroidx/compose/foundation/gestures/ScrollableKt;
+Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;
+Landroidx/compose/foundation/gestures/ScrollableNode;
+Landroidx/compose/foundation/gestures/ScrollableState;
+Landroidx/compose/foundation/gestures/ScrollingLogic;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState;
+Landroidx/compose/foundation/interaction/FocusInteraction$Focus;
+Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;
+Landroidx/compose/foundation/interaction/Interaction;
+Landroidx/compose/foundation/interaction/InteractionSource;
+Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;
+Landroidx/compose/foundation/interaction/PressInteraction$Press;
+Landroidx/compose/foundation/interaction/PressInteraction$Release;
+Landroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;
+Landroidx/compose/foundation/layout/Arrangement$Center$1;
+Landroidx/compose/foundation/layout/Arrangement$End$1;
+Landroidx/compose/foundation/layout/Arrangement$Horizontal;
+Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;
+Landroidx/compose/foundation/layout/Arrangement$Top$1;
+Landroidx/compose/foundation/layout/Arrangement$Vertical;
+Landroidx/compose/foundation/layout/Arrangement;
+Landroidx/compose/foundation/layout/BoxKt$Box$2;
+Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt;
+Landroidx/compose/foundation/layout/BoxScope;
+Landroidx/compose/foundation/layout/BoxScopeInstance;
+Landroidx/compose/foundation/layout/ColumnKt;
+Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;
+Landroidx/compose/foundation/layout/FillElement;
+Landroidx/compose/foundation/layout/FillNode;
+Landroidx/compose/foundation/layout/HorizontalAlignElement;
+Landroidx/compose/foundation/layout/HorizontalAlignNode;
+Landroidx/compose/foundation/layout/OffsetElement;
+Landroidx/compose/foundation/layout/OffsetKt;
+Landroidx/compose/foundation/layout/OffsetNode$measure$1;
+Landroidx/compose/foundation/layout/OffsetNode;
+Landroidx/compose/foundation/layout/PaddingElement;
+Landroidx/compose/foundation/layout/PaddingNode;
+Landroidx/compose/foundation/layout/PaddingValuesImpl;
+Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
+Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;
+Landroidx/compose/foundation/layout/RowColumnParentData;
+Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;
+Landroidx/compose/foundation/layout/RowKt;
+Landroidx/compose/foundation/layout/RowScope;
+Landroidx/compose/foundation/layout/RowScopeInstance;
+Landroidx/compose/foundation/layout/SizeElement;
+Landroidx/compose/foundation/layout/SizeKt;
+Landroidx/compose/foundation/layout/SizeNode;
+Landroidx/compose/foundation/layout/SpacerMeasurePolicy;
+Landroidx/compose/foundation/layout/WrapContentElement;
+Landroidx/compose/foundation/layout/WrapContentNode$measure$1;
+Landroidx/compose/foundation/layout/WrapContentNode;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyKey;
+Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
+Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+Landroidx/compose/foundation/relocation/BringIntoViewChildNode;
+Landroidx/compose/foundation/relocation/BringIntoViewKt;
+Landroidx/compose/foundation/relocation/BringIntoViewParent;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;
+Landroidx/compose/foundation/shape/CornerBasedShape;
+Landroidx/compose/foundation/shape/CornerSize;
+Landroidx/compose/foundation/shape/DpCornerSize;
+Landroidx/compose/foundation/shape/GenericShape;
+Landroidx/compose/foundation/shape/PercentCornerSize;
+Landroidx/compose/foundation/shape/RoundedCornerShape;
+Landroidx/compose/foundation/shape/RoundedCornerShapeKt;
+Landroidx/compose/foundation/text/EmptyMeasurePolicy;
+Landroidx/compose/foundation/text/modifiers/InlineDensity;
+Landroidx/compose/foundation/text/modifiers/MinLinesConstrainer;
+Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;
+Landroidx/compose/foundation/text/selection/SelectionRegistrarKt;
+Landroidx/compose/foundation/text/selection/TextSelectionColors;
+Landroidx/compose/foundation/text/selection/TextSelectionColorsKt;
+Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;
+Landroidx/compose/material/ripple/PlatformRipple;
+Landroidx/compose/material/ripple/RippleAlpha;
+Landroidx/compose/material/ripple/RippleIndicationInstance;
+Landroidx/compose/material/ripple/RippleKt;
+Landroidx/compose/material/ripple/RippleTheme;
+Landroidx/compose/material/ripple/RippleThemeKt;
+Landroidx/compose/material3/ColorScheme;
+Landroidx/compose/material3/ColorSchemeKt;
+Landroidx/compose/material3/MaterialRippleTheme;
+Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;
+Landroidx/compose/material3/ShapeDefaults;
+Landroidx/compose/material3/Shapes;
+Landroidx/compose/material3/ShapesKt$LocalShapes$1;
+Landroidx/compose/material3/ShapesKt;
+Landroidx/compose/material3/TextKt$ProvideTextStyle$1;
+Landroidx/compose/material3/TextKt$Text$1;
+Landroidx/compose/material3/TextKt;
+Landroidx/compose/material3/Typography;
+Landroidx/compose/material3/TypographyKt;
+Landroidx/compose/material3/tokens/ColorDarkTokens;
+Landroidx/compose/material3/tokens/PaletteTokens;
+Landroidx/compose/material3/tokens/ShapeTokens;
+Landroidx/compose/material3/tokens/TypeScaleTokens;
+Landroidx/compose/material3/tokens/TypefaceTokens;
+Landroidx/compose/material3/tokens/TypographyTokens;
+Landroidx/compose/runtime/Anchor;
+Landroidx/compose/runtime/Applier;
+Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;
+Landroidx/compose/runtime/BroadcastFrameClock;
+Landroidx/compose/runtime/ComposableSingletons$CompositionKt;
+Landroidx/compose/runtime/ComposeNodeLifecycleCallback;
+Landroidx/compose/runtime/Composer;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
+Landroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;
+Landroidx/compose/runtime/ComposerImpl;
+Landroidx/compose/runtime/Composition;
+Landroidx/compose/runtime/CompositionContext;
+Landroidx/compose/runtime/CompositionContextKt;
+Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;
+Landroidx/compose/runtime/CompositionImpl;
+Landroidx/compose/runtime/CompositionKt;
+Landroidx/compose/runtime/CompositionLocal;
+Landroidx/compose/runtime/CompositionLocalMap$Companion;
+Landroidx/compose/runtime/CompositionLocalMap;
+Landroidx/compose/runtime/CompositionObserverHolder;
+Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;
+Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+Landroidx/compose/runtime/DerivedSnapshotState;
+Landroidx/compose/runtime/DerivedStateObserver;
+Landroidx/compose/runtime/DisposableEffectImpl;
+Landroidx/compose/runtime/DisposableEffectResult;
+Landroidx/compose/runtime/DisposableEffectScope;
+Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
+Landroidx/compose/runtime/GroupInfo;
+Landroidx/compose/runtime/IntStack;
+Landroidx/compose/runtime/Invalidation;
+Landroidx/compose/runtime/JoinedKey;
+Landroidx/compose/runtime/KeyInfo;
+Landroidx/compose/runtime/Latch$await$2$2;
+Landroidx/compose/runtime/Latch;
+Landroidx/compose/runtime/LaunchedEffectImpl;
+Landroidx/compose/runtime/LazyValueHolder;
+Landroidx/compose/runtime/MonotonicFrameClock;
+Landroidx/compose/runtime/MovableContentStateReference;
+Landroidx/compose/runtime/MutableFloatState;
+Landroidx/compose/runtime/MutableIntState;
+Landroidx/compose/runtime/MutableState;
+Landroidx/compose/runtime/OpaqueKey;
+Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableIntState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;
+Landroidx/compose/runtime/PausableMonotonicFrameClock;
+Landroidx/compose/runtime/Pending$keyMap$2;
+Landroidx/compose/runtime/Pending;
+Landroidx/compose/runtime/PersistentCompositionLocalMap;
+Landroidx/compose/runtime/ProduceStateScopeImpl;
+Landroidx/compose/runtime/ProvidableCompositionLocal;
+Landroidx/compose/runtime/ProvidedValue;
+Landroidx/compose/runtime/RecomposeScope;
+Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;
+Landroidx/compose/runtime/RecomposeScopeImpl;
+Landroidx/compose/runtime/RecomposeScopeOwner;
+Landroidx/compose/runtime/Recomposer$State;
+Landroidx/compose/runtime/Recomposer$effectJob$1$1;
+Landroidx/compose/runtime/Recomposer$join$2;
+Landroidx/compose/runtime/Recomposer$performRecompose$1$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$3;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;
+Landroidx/compose/runtime/Recomposer;
+Landroidx/compose/runtime/ReferentialEqualityPolicy;
+Landroidx/compose/runtime/RememberObserver;
+Landroidx/compose/runtime/SkippableUpdater;
+Landroidx/compose/runtime/SlotReader;
+Landroidx/compose/runtime/SlotTable;
+Landroidx/compose/runtime/SlotWriter;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl;
+Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableStateImpl;
+Landroidx/compose/runtime/SnapshotMutationPolicy;
+Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;
+Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;
+Landroidx/compose/runtime/Stack;
+Landroidx/compose/runtime/State;
+Landroidx/compose/runtime/StaticProvidableCompositionLocal;
+Landroidx/compose/runtime/StaticValueHolder;
+Landroidx/compose/runtime/StructuralEqualityPolicy;
+Landroidx/compose/runtime/WeakReference;
+Landroidx/compose/runtime/changelist/ChangeList;
+Landroidx/compose/runtime/changelist/ComposerChangeListWriter;
+Landroidx/compose/runtime/changelist/FixupList;
+Landroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;
+Landroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$Downs;
+Landroidx/compose/runtime/changelist/Operation$EndCompositionScope;
+Landroidx/compose/runtime/changelist/Operation$EndCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$InsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$InsertSlots;
+Landroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;
+Landroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$Remember;
+Landroidx/compose/runtime/changelist/Operation$SideEffect;
+Landroidx/compose/runtime/changelist/Operation$UpdateAuxData;
+Landroidx/compose/runtime/changelist/Operation$UpdateNode;
+Landroidx/compose/runtime/changelist/Operation$UpdateValue;
+Landroidx/compose/runtime/changelist/Operation$Ups;
+Landroidx/compose/runtime/changelist/Operation$UseCurrentNode;
+Landroidx/compose/runtime/changelist/Operation;
+Landroidx/compose/runtime/changelist/Operations$OpIterator;
+Landroidx/compose/runtime/changelist/Operations;
+Landroidx/compose/runtime/collection/IdentityArrayIntMap;
+Landroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;
+Landroidx/compose/runtime/collection/IdentityArraySet;
+Landroidx/compose/runtime/collection/MutableVector$MutableVectorList;
+Landroidx/compose/runtime/collection/MutableVector$VectorListIterator;
+Landroidx/compose/runtime/collection/MutableVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;
+Landroidx/compose/runtime/internal/ComposableLambda;
+Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+Landroidx/compose/runtime/internal/ThreadMap;
+Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;
+Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;
+Landroidx/compose/runtime/saveable/SaveableHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistry;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryKt;
+Landroidx/compose/runtime/saveable/SaverKt$Saver$1;
+Landroidx/compose/runtime/saveable/SaverKt;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot;
+Landroidx/compose/runtime/snapshots/MutableSnapshot;
+Landroidx/compose/runtime/snapshots/ObserverHandle;
+Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
+Landroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/runtime/snapshots/Snapshot;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;
+Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;
+Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;
+Landroidx/compose/runtime/snapshots/SnapshotKt;
+Landroidx/compose/runtime/snapshots/SnapshotMutableState;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;
+Landroidx/compose/runtime/snapshots/SnapshotStateList;
+Landroidx/compose/runtime/snapshots/SnapshotStateListKt;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver;
+Landroidx/compose/runtime/snapshots/StateObject;
+Landroidx/compose/runtime/snapshots/StateRecord;
+Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
+Landroidx/compose/runtime/tooling/InspectionTablesKt;
+Landroidx/compose/ui/Alignment$Horizontal;
+Landroidx/compose/ui/Alignment$Vertical;
+Landroidx/compose/ui/Alignment;
+Landroidx/compose/ui/BiasAlignment$Horizontal;
+Landroidx/compose/ui/BiasAlignment$Vertical;
+Landroidx/compose/ui/BiasAlignment;
+Landroidx/compose/ui/CombinedModifier$toString$1;
+Landroidx/compose/ui/CombinedModifier;
+Landroidx/compose/ui/ComposedModifier;
+Landroidx/compose/ui/CompositionLocalMapInjectionElement;
+Landroidx/compose/ui/Modifier$Companion;
+Landroidx/compose/ui/Modifier$Element;
+Landroidx/compose/ui/Modifier$Node;
+Landroidx/compose/ui/Modifier;
+Landroidx/compose/ui/MotionDurationScale;
+Landroidx/compose/ui/ZIndexElement;
+Landroidx/compose/ui/ZIndexNode$measure$1;
+Landroidx/compose/ui/ZIndexNode;
+Landroidx/compose/ui/autofill/AndroidAutofill;
+Landroidx/compose/ui/autofill/Autofill;
+Landroidx/compose/ui/autofill/AutofillCallback;
+Landroidx/compose/ui/autofill/AutofillTree;
+Landroidx/compose/ui/draw/BuildDrawCacheParams;
+Landroidx/compose/ui/draw/CacheDrawModifierNode;
+Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;
+Landroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;
+Landroidx/compose/ui/draw/CacheDrawScope;
+Landroidx/compose/ui/draw/ClipKt;
+Landroidx/compose/ui/draw/DrawModifier;
+Landroidx/compose/ui/draw/DrawResult;
+Landroidx/compose/ui/draw/DrawWithCacheElement;
+Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams;
+Landroidx/compose/ui/draw/PainterElement;
+Landroidx/compose/ui/draw/PainterNode$measure$1;
+Landroidx/compose/ui/draw/PainterNode;
+Landroidx/compose/ui/focus/FocusChangedElement;
+Landroidx/compose/ui/focus/FocusChangedNode;
+Landroidx/compose/ui/focus/FocusDirection;
+Landroidx/compose/ui/focus/FocusEventModifierNode;
+Landroidx/compose/ui/focus/FocusInvalidationManager;
+Landroidx/compose/ui/focus/FocusModifierKt;
+Landroidx/compose/ui/focus/FocusOwner;
+Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl;
+Landroidx/compose/ui/focus/FocusProperties$exit$1;
+Landroidx/compose/ui/focus/FocusProperties;
+Landroidx/compose/ui/focus/FocusPropertiesImpl;
+Landroidx/compose/ui/focus/FocusPropertiesModifierNode;
+Landroidx/compose/ui/focus/FocusRequester;
+Landroidx/compose/ui/focus/FocusRequesterModifierNode;
+Landroidx/compose/ui/focus/FocusState;
+Landroidx/compose/ui/focus/FocusStateImpl;
+Landroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;
+Landroidx/compose/ui/focus/FocusTargetNode;
+Landroidx/compose/ui/geometry/CornerRadius;
+Landroidx/compose/ui/geometry/MutableRect;
+Landroidx/compose/ui/geometry/Offset;
+Landroidx/compose/ui/geometry/Rect;
+Landroidx/compose/ui/geometry/RoundRect;
+Landroidx/compose/ui/geometry/Size;
+Landroidx/compose/ui/graphics/AndroidCanvas;
+Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;
+Landroidx/compose/ui/graphics/AndroidImageBitmap;
+Landroidx/compose/ui/graphics/AndroidPaint;
+Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;
+Landroidx/compose/ui/graphics/AndroidPath;
+Landroidx/compose/ui/graphics/BlendModeColorFilter;
+Landroidx/compose/ui/graphics/BlendModeColorFilterHelper;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerElement;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/Brush;
+Landroidx/compose/ui/graphics/BrushKt$ShaderBrush$1;
+Landroidx/compose/ui/graphics/BrushKt;
+Landroidx/compose/ui/graphics/Canvas;
+Landroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/graphics/Color;
+Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/Float16;
+Landroidx/compose/ui/graphics/GraphicsLayerElement;
+Landroidx/compose/ui/graphics/GraphicsLayerScopeKt;
+Landroidx/compose/ui/graphics/ImageBitmap;
+Landroidx/compose/ui/graphics/ImageBitmapConfig;
+Landroidx/compose/ui/graphics/Matrix;
+Landroidx/compose/ui/graphics/Outline$Generic;
+Landroidx/compose/ui/graphics/Outline$Rectangle;
+Landroidx/compose/ui/graphics/Outline$Rounded;
+Landroidx/compose/ui/graphics/Path;
+Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;
+Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
+Landroidx/compose/ui/graphics/Shadow;
+Landroidx/compose/ui/graphics/Shape;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/SolidColor;
+Landroidx/compose/ui/graphics/TransformOrigin;
+Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;
+Landroidx/compose/ui/graphics/colorspace/Adaptation;
+Landroidx/compose/ui/graphics/colorspace/ColorModel;
+Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+Landroidx/compose/ui/graphics/colorspace/ColorSpaces;
+Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;
+Landroidx/compose/ui/graphics/colorspace/Connector;
+Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
+Landroidx/compose/ui/graphics/colorspace/Lab;
+Landroidx/compose/ui/graphics/colorspace/Oklab;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;
+Landroidx/compose/ui/graphics/colorspace/Rgb;
+Landroidx/compose/ui/graphics/colorspace/TransferParameters;
+Landroidx/compose/ui/graphics/colorspace/WhitePoint;
+Landroidx/compose/ui/graphics/colorspace/Xyz;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;
+Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
+Landroidx/compose/ui/graphics/drawscope/DrawScope;
+Landroidx/compose/ui/graphics/drawscope/EmptyCanvas;
+Landroidx/compose/ui/graphics/drawscope/Fill;
+Landroidx/compose/ui/graphics/drawscope/Stroke;
+Landroidx/compose/ui/graphics/painter/BitmapPainter;
+Landroidx/compose/ui/graphics/painter/Painter;
+Landroidx/compose/ui/graphics/vector/GroupComponent;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
+Landroidx/compose/ui/graphics/vector/ImageVector;
+Landroidx/compose/ui/graphics/vector/VNode;
+Landroidx/compose/ui/graphics/vector/VectorComponent;
+Landroidx/compose/ui/graphics/vector/VectorGroup;
+Landroidx/compose/ui/graphics/vector/VectorKt;
+Landroidx/compose/ui/graphics/vector/VectorNode;
+Landroidx/compose/ui/graphics/vector/VectorPainter;
+Landroidx/compose/ui/graphics/vector/VectorPath;
+Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;
+Landroidx/compose/ui/hapticfeedback/HapticFeedback;
+Landroidx/compose/ui/input/InputMode;
+Landroidx/compose/ui/input/InputModeManager;
+Landroidx/compose/ui/input/InputModeManagerImpl;
+Landroidx/compose/ui/input/key/Key;
+Landroidx/compose/ui/input/key/KeyEvent;
+Landroidx/compose/ui/input/key/KeyInputElement;
+Landroidx/compose/ui/input/key/KeyInputModifierNode;
+Landroidx/compose/ui/input/key/KeyInputNode;
+Landroidx/compose/ui/input/key/Key_androidKt;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;
+Landroidx/compose/ui/input/pointer/AndroidPointerIconType;
+Landroidx/compose/ui/input/pointer/MotionEventAdapter;
+Landroidx/compose/ui/input/pointer/Node;
+Landroidx/compose/ui/input/pointer/NodeParent;
+Landroidx/compose/ui/input/pointer/PointerEvent;
+Landroidx/compose/ui/input/pointer/PointerIcon;
+Landroidx/compose/ui/input/pointer/PointerIconService;
+Landroidx/compose/ui/input/pointer/PointerInputChange;
+Landroidx/compose/ui/input/pointer/PointerInputScope;
+Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
+Landroidx/compose/ui/input/pointer/PositionCalculator;
+Landroidx/compose/ui/input/pointer/SuspendPointerInputElement;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;
+Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
+Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker1D;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker;
+Landroidx/compose/ui/input/rotary/RotaryInputElement;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierKt;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierNode;
+Landroidx/compose/ui/input/rotary/RotaryInputNode;
+Landroidx/compose/ui/layout/AlignmentLine;
+Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt;
+Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;
+Landroidx/compose/ui/layout/BeyondBoundsLayout;
+Landroidx/compose/ui/layout/BeyondBoundsLayoutKt;
+Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;
+Landroidx/compose/ui/layout/ContentScale;
+Landroidx/compose/ui/layout/DefaultIntrinsicMeasurable;
+Landroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;
+Landroidx/compose/ui/layout/HorizontalAlignmentLine;
+Landroidx/compose/ui/layout/IntrinsicMeasureScope;
+Landroidx/compose/ui/layout/IntrinsicMinMax;
+Landroidx/compose/ui/layout/IntrinsicWidthHeight;
+Landroidx/compose/ui/layout/IntrinsicsMeasureScope;
+Landroidx/compose/ui/layout/LayoutCoordinates;
+Landroidx/compose/ui/layout/LayoutElement;
+Landroidx/compose/ui/layout/LayoutKt$materializerOf$1;
+Landroidx/compose/ui/layout/LayoutKt;
+Landroidx/compose/ui/layout/LayoutModifierImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+Landroidx/compose/ui/layout/LookaheadLayoutCoordinates;
+Landroidx/compose/ui/layout/Measurable;
+Landroidx/compose/ui/layout/MeasurePolicy;
+Landroidx/compose/ui/layout/MeasureResult;
+Landroidx/compose/ui/layout/MeasureScope$layout$1;
+Landroidx/compose/ui/layout/MeasureScope;
+Landroidx/compose/ui/layout/Measured;
+Landroidx/compose/ui/layout/OnRemeasuredModifier;
+Landroidx/compose/ui/layout/OnSizeChangedModifier;
+Landroidx/compose/ui/layout/PinnableContainerKt;
+Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;
+Landroidx/compose/ui/layout/Placeable$PlacementScope;
+Landroidx/compose/ui/layout/Placeable;
+Landroidx/compose/ui/layout/PlaceableKt;
+Landroidx/compose/ui/layout/Remeasurement;
+Landroidx/compose/ui/layout/RemeasurementModifier;
+Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2;
+Landroidx/compose/ui/layout/RootMeasurePolicy;
+Landroidx/compose/ui/layout/ScaleFactor;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState;
+Landroidx/compose/ui/layout/SubcomposeMeasureScope;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
+Landroidx/compose/ui/modifier/BackwardsCompatLocalMap;
+Landroidx/compose/ui/modifier/EmptyMap;
+Landroidx/compose/ui/modifier/ModifierLocal;
+Landroidx/compose/ui/modifier/ModifierLocalConsumer;
+Landroidx/compose/ui/modifier/ModifierLocalManager;
+Landroidx/compose/ui/modifier/ModifierLocalModifierNode;
+Landroidx/compose/ui/modifier/ModifierLocalProvider;
+Landroidx/compose/ui/modifier/ModifierLocalReadScope;
+Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+Landroidx/compose/ui/modifier/SingleLocalMap;
+Landroidx/compose/ui/node/AlignmentLines;
+Landroidx/compose/ui/node/AlignmentLinesOwner;
+Landroidx/compose/ui/node/BackwardsCompatNode;
+Landroidx/compose/ui/node/CanFocusChecker;
+Landroidx/compose/ui/node/ComposeUiNode$Companion;
+Landroidx/compose/ui/node/ComposeUiNode;
+Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;
+Landroidx/compose/ui/node/DelegatableNode;
+Landroidx/compose/ui/node/DelegatingNode;
+Landroidx/compose/ui/node/DrawModifierNode;
+Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;
+Landroidx/compose/ui/node/HitTestResult;
+Landroidx/compose/ui/node/InnerNodeCoordinator;
+Landroidx/compose/ui/node/IntrinsicsPolicy;
+Landroidx/compose/ui/node/LayerPositionalProperties;
+Landroidx/compose/ui/node/LayoutAwareModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;
+Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;
+Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;
+Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;
+Landroidx/compose/ui/node/LayoutNode$WhenMappings;
+Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;
+Landroidx/compose/ui/node/LayoutNode;
+Landroidx/compose/ui/node/LayoutNodeDrawScope;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
+Landroidx/compose/ui/node/LookaheadAlignmentLines;
+Landroidx/compose/ui/node/LookaheadCapablePlaceable;
+Landroidx/compose/ui/node/LookaheadDelegate;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate;
+Landroidx/compose/ui/node/ModifierNodeElement;
+Landroidx/compose/ui/node/NodeChain$Differ;
+Landroidx/compose/ui/node/NodeChain;
+Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
+Landroidx/compose/ui/node/NodeChainKt;
+Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
+Landroidx/compose/ui/node/NodeCoordinator$invoke$1;
+Landroidx/compose/ui/node/NodeCoordinator;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;
+Landroidx/compose/ui/node/ObserverModifierNode;
+Landroidx/compose/ui/node/ObserverNodeOwnerScope;
+Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;
+Landroidx/compose/ui/node/OnPositionedDispatcher;
+Landroidx/compose/ui/node/OwnedLayer;
+Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;
+Landroidx/compose/ui/node/Owner;
+Landroidx/compose/ui/node/OwnerScope;
+Landroidx/compose/ui/node/OwnerSnapshotObserver;
+Landroidx/compose/ui/node/ParentDataModifierNode;
+Landroidx/compose/ui/node/PointerInputModifierNode;
+Landroidx/compose/ui/node/RootForTest;
+Landroidx/compose/ui/node/SemanticsModifierNode;
+Landroidx/compose/ui/node/TailModifierNode;
+Landroidx/compose/ui/node/TreeSet;
+Landroidx/compose/ui/node/UiApplier;
+Landroidx/compose/ui/platform/AbstractComposeView;
+Landroidx/compose/ui/platform/AccessibilityManager;
+Landroidx/compose/ui/platform/AndroidAccessibilityManager;
+Landroidx/compose/ui/platform/AndroidClipboardManager;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;
+Landroidx/compose/ui/platform/AndroidComposeView$AndroidComposeViewTranslationCallback;
+Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;
+Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;
+Landroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;
+Landroidx/compose/ui/platform/AndroidComposeView;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeeded$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;
+Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;
+Landroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;
+Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;
+Landroidx/compose/ui/platform/AndroidUiDispatcher;
+Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;
+Landroidx/compose/ui/platform/AndroidUiFrameClock;
+Landroidx/compose/ui/platform/AndroidUriHandler;
+Landroidx/compose/ui/platform/AndroidViewConfiguration;
+Landroidx/compose/ui/platform/CalculateMatrixToWindow;
+Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29;
+Landroidx/compose/ui/platform/ClipboardManager;
+Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;
+Landroidx/compose/ui/platform/ComposeView;
+Landroidx/compose/ui/platform/CompositionLocalsKt;
+Landroidx/compose/ui/platform/DeviceRenderNode;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;
+Landroidx/compose/ui/platform/DrawChildContainer;
+Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;
+Landroidx/compose/ui/platform/GlobalSnapshotManager;
+Landroidx/compose/ui/platform/InspectableModifier$End;
+Landroidx/compose/ui/platform/InspectableModifier;
+Landroidx/compose/ui/platform/LayerMatrixCache;
+Landroidx/compose/ui/platform/MotionDurationScaleImpl;
+Landroidx/compose/ui/platform/OutlineResolver;
+Landroidx/compose/ui/platform/RenderNodeApi29;
+Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;
+Landroidx/compose/ui/platform/RenderNodeLayer;
+Landroidx/compose/ui/platform/ScrollObservationScope;
+Landroidx/compose/ui/platform/SoftwareKeyboardController;
+Landroidx/compose/ui/platform/TextToolbar;
+Landroidx/compose/ui/platform/UriHandler;
+Landroidx/compose/ui/platform/ViewCompositionStrategy;
+Landroidx/compose/ui/platform/ViewConfiguration;
+Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;
+Landroidx/compose/ui/platform/ViewLayer;
+Landroidx/compose/ui/platform/ViewLayerContainer;
+Landroidx/compose/ui/platform/WeakCache;
+Landroidx/compose/ui/platform/WindowInfo;
+Landroidx/compose/ui/platform/WindowInfoImpl;
+Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/platform/WindowRecomposerFactory;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1;
+Landroidx/compose/ui/platform/WrappedComposition;
+Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;
+Landroidx/compose/ui/platform/WrapperVerificationHelperMethods;
+Landroidx/compose/ui/platform/Wrapper_androidKt;
+Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;
+Landroidx/compose/ui/res/ImageVectorCache$Key;
+Landroidx/compose/ui/res/ImageVectorCache;
+Landroidx/compose/ui/semantics/AppendedSemanticsElement;
+Landroidx/compose/ui/semantics/CollectionInfo;
+Landroidx/compose/ui/semantics/CoreSemanticsModifierNode;
+Landroidx/compose/ui/semantics/EmptySemanticsElement;
+Landroidx/compose/ui/semantics/EmptySemanticsModifier;
+Landroidx/compose/ui/semantics/Role;
+Landroidx/compose/ui/semantics/ScrollAxisRange;
+Landroidx/compose/ui/semantics/SemanticsConfiguration;
+Landroidx/compose/ui/semantics/SemanticsModifier;
+Landroidx/compose/ui/semantics/SemanticsModifierKt;
+Landroidx/compose/ui/semantics/SemanticsNode;
+Landroidx/compose/ui/semantics/SemanticsOwner;
+Landroidx/compose/ui/semantics/SemanticsProperties;
+Landroidx/compose/ui/semantics/SemanticsPropertiesKt;
+Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;
+Landroidx/compose/ui/text/AndroidParagraph;
+Landroidx/compose/ui/text/AnnotatedString$Range;
+Landroidx/compose/ui/text/AnnotatedString;
+Landroidx/compose/ui/text/AnnotatedStringKt;
+Landroidx/compose/ui/text/EmojiSupportMatch;
+Landroidx/compose/ui/text/MultiParagraph;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsicInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphStyle;
+Landroidx/compose/ui/text/ParagraphStyleKt;
+Landroidx/compose/ui/text/PlatformParagraphStyle;
+Landroidx/compose/ui/text/PlatformTextStyle;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$1;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$2;
+Landroidx/compose/ui/text/SaversKt;
+Landroidx/compose/ui/text/SpanStyle;
+Landroidx/compose/ui/text/SpanStyleKt;
+Landroidx/compose/ui/text/TextLayoutInput;
+Landroidx/compose/ui/text/TextLayoutResult;
+Landroidx/compose/ui/text/TextRange;
+Landroidx/compose/ui/text/TextStyle;
+Landroidx/compose/ui/text/TtsAnnotation;
+Landroidx/compose/ui/text/UrlAnnotation;
+Landroidx/compose/ui/text/VerbatimTtsAnnotation;
+Landroidx/compose/ui/text/android/BoringLayoutFactoryDefault;
+Landroidx/compose/ui/text/android/LayoutIntrinsics;
+Landroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/text/android/Paint29;
+Landroidx/compose/ui/text/android/StaticLayoutFactory23;
+Landroidx/compose/ui/text/android/StaticLayoutFactory26;
+Landroidx/compose/ui/text/android/StaticLayoutFactory28;
+Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl;
+Landroidx/compose/ui/text/android/StaticLayoutParams;
+Landroidx/compose/ui/text/android/TextAlignmentAdapter;
+Landroidx/compose/ui/text/android/TextAndroidCanvas;
+Landroidx/compose/ui/text/android/TextLayout;
+Landroidx/compose/ui/text/android/TextLayoutKt;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx;
+Landroidx/compose/ui/text/android/style/LineHeightSpan;
+Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
+Landroidx/compose/ui/text/android/style/PlaceholderSpan;
+Landroidx/compose/ui/text/android/style/ShadowSpan;
+Landroidx/compose/ui/text/android/style/SkewXSpan;
+Landroidx/compose/ui/text/android/style/TextDecorationSpan;
+Landroidx/compose/ui/text/android/style/TypefaceSpan;
+Landroidx/compose/ui/text/caches/LruCache;
+Landroidx/compose/ui/text/caches/SimpleArrayMap;
+Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
+Landroidx/compose/ui/text/font/AsyncTypefaceCache;
+Landroidx/compose/ui/text/font/DefaultFontFamily;
+Landroidx/compose/ui/text/font/Font$ResourceLoader;
+Landroidx/compose/ui/text/font/FontFamily$Resolver;
+Landroidx/compose/ui/text/font/FontFamily;
+Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+Landroidx/compose/ui/text/font/FontFamilyResolverKt;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
+Landroidx/compose/ui/text/font/FontStyle;
+Landroidx/compose/ui/text/font/FontSynthesis;
+Landroidx/compose/ui/text/font/FontWeight;
+Landroidx/compose/ui/text/font/GenericFontFamily;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor;
+Landroidx/compose/ui/text/font/PlatformTypefaces;
+Landroidx/compose/ui/text/font/SystemFontFamily;
+Landroidx/compose/ui/text/font/TypefaceRequest;
+Landroidx/compose/ui/text/font/TypefaceResult$Immutable;
+Landroidx/compose/ui/text/font/TypefaceResult;
+Landroidx/compose/ui/text/input/InputMethodManagerImpl;
+Landroidx/compose/ui/text/input/PlatformTextInputService;
+Landroidx/compose/ui/text/input/TextFieldValue;
+Landroidx/compose/ui/text/input/TextInputService;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/text/intl/AndroidLocale;
+Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;
+Landroidx/compose/ui/text/intl/Locale;
+Landroidx/compose/ui/text/intl/LocaleList;
+Landroidx/compose/ui/text/intl/PlatformLocaleKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+Landroidx/compose/ui/text/platform/AndroidTextPaint;
+Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;
+Landroidx/compose/ui/text/platform/DefaultImpl;
+Landroidx/compose/ui/text/platform/EmojiCompatStatus;
+Landroidx/compose/ui/text/platform/ImmutableBool;
+Landroidx/compose/ui/text/platform/URLSpanCache;
+Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;
+Landroidx/compose/ui/text/platform/style/DrawStyleSpan;
+Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
+Landroidx/compose/ui/text/style/BaselineShift;
+Landroidx/compose/ui/text/style/BrushStyle;
+Landroidx/compose/ui/text/style/ColorStyle;
+Landroidx/compose/ui/text/style/Hyphens;
+Landroidx/compose/ui/text/style/LineBreak$Strategy;
+Landroidx/compose/ui/text/style/LineBreak$Strictness;
+Landroidx/compose/ui/text/style/LineBreak$WordBreak;
+Landroidx/compose/ui/text/style/LineBreak;
+Landroidx/compose/ui/text/style/LineHeightStyle$Alignment;
+Landroidx/compose/ui/text/style/LineHeightStyle;
+Landroidx/compose/ui/text/style/TextAlign;
+Landroidx/compose/ui/text/style/TextDecoration;
+Landroidx/compose/ui/text/style/TextDirection;
+Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;
+Landroidx/compose/ui/text/style/TextForegroundStyle;
+Landroidx/compose/ui/text/style/TextGeometricTransform;
+Landroidx/compose/ui/text/style/TextIndent;
+Landroidx/compose/ui/text/style/TextMotion;
+Landroidx/compose/ui/unit/Constraints;
+Landroidx/compose/ui/unit/Density;
+Landroidx/compose/ui/unit/DensityImpl;
+Landroidx/compose/ui/unit/Dp$Companion;
+Landroidx/compose/ui/unit/Dp;
+Landroidx/compose/ui/unit/DpOffset;
+Landroidx/compose/ui/unit/DpRect;
+Landroidx/compose/ui/unit/IntOffset;
+Landroidx/compose/ui/unit/IntSize;
+Landroidx/compose/ui/unit/LayoutDirection;
+Landroidx/compose/ui/unit/TextUnit;
+Landroidx/compose/ui/unit/TextUnitType;
+Landroidx/core/app/ComponentActivity;
+Landroidx/core/app/CoreComponentFactory;
+Landroidx/core/content/res/ColorStateListInflaterCompat;
+Landroidx/core/content/res/ComplexColorCompat;
+Landroidx/core/graphics/TypefaceCompat;
+Landroidx/core/graphics/TypefaceCompatApi29Impl;
+Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl;
+Landroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;
+Landroidx/core/os/BuildCompat$Extensions30Impl;
+Landroidx/core/os/BuildCompat;
+Landroidx/core/os/TraceCompat$Api18Impl;
+Landroidx/core/os/TraceCompat;
+Landroidx/core/provider/CallbackWithHandler$2;
+Landroidx/core/provider/FontProvider$Api16Impl;
+Landroidx/core/provider/FontRequest;
+Landroidx/core/provider/FontsContractCompat$FontInfo;
+Landroidx/core/text/TextUtilsCompat$Api17Impl;
+Landroidx/core/text/TextUtilsCompat;
+Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;
+Landroidx/core/view/AccessibilityDelegateCompat;
+Landroidx/core/view/MenuHostHelper;
+Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;
+Landroidx/core/view/ViewCompat$Api29Impl;
+Landroidx/core/view/ViewCompat$Api30Impl;
+Landroidx/core/view/ViewCompat;
+Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;
+Landroidx/emoji2/text/DefaultGlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19;
+Landroidx/emoji2/text/EmojiCompat$Config;
+Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
+Landroidx/emoji2/text/EmojiCompat;
+Landroidx/emoji2/text/EmojiCompatInitializer$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;
+Landroidx/emoji2/text/EmojiCompatInitializer;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;
+Landroidx/emoji2/text/EmojiProcessor$ProcessorSm;
+Landroidx/emoji2/text/EmojiProcessor;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+Landroidx/emoji2/text/MetadataRepo$Node;
+Landroidx/emoji2/text/MetadataRepo;
+Landroidx/emoji2/text/TypefaceEmojiRasterizer;
+Landroidx/emoji2/text/TypefaceEmojiSpan;
+Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
+Landroidx/emoji2/text/flatbuffer/MetadataItem;
+Landroidx/emoji2/text/flatbuffer/MetadataList;
+Landroidx/emoji2/text/flatbuffer/Table;
+Landroidx/lifecycle/DefaultLifecycleObserver;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter;
+Landroidx/lifecycle/EmptyActivityLifecycleCallbacks;
+Landroidx/lifecycle/HasDefaultViewModelProviderFactory;
+Landroidx/lifecycle/Lifecycle$Event$Companion;
+Landroidx/lifecycle/Lifecycle$Event$WhenMappings;
+Landroidx/lifecycle/Lifecycle$Event;
+Landroidx/lifecycle/Lifecycle$State;
+Landroidx/lifecycle/Lifecycle;
+Landroidx/lifecycle/LifecycleDestroyedException;
+Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;
+Landroidx/lifecycle/LifecycleDispatcher;
+Landroidx/lifecycle/LifecycleEventObserver;
+Landroidx/lifecycle/LifecycleObserver;
+Landroidx/lifecycle/LifecycleOwner;
+Landroidx/lifecycle/LifecycleRegistry$ObserverWithState;
+Landroidx/lifecycle/LifecycleRegistry;
+Landroidx/lifecycle/Lifecycling;
+Landroidx/lifecycle/ProcessLifecycleInitializer;
+Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;
+Landroidx/lifecycle/ProcessLifecycleOwner;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;
+Landroidx/lifecycle/ReportFragment;
+Landroidx/lifecycle/SavedStateHandleAttacher;
+Landroidx/lifecycle/SavedStateHandlesProvider;
+Landroidx/lifecycle/SavedStateHandlesVM;
+Landroidx/lifecycle/ViewModelStore;
+Landroidx/lifecycle/ViewModelStoreOwner;
+Landroidx/lifecycle/viewmodel/CreationExtras$Empty;
+Landroidx/lifecycle/viewmodel/CreationExtras;
+Landroidx/lifecycle/viewmodel/MutableCreationExtras;
+Landroidx/lifecycle/viewmodel/ViewModelInitializer;
+Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+Landroidx/metrics/performance/FrameData;
+Landroidx/metrics/performance/FrameDataApi24;
+Landroidx/metrics/performance/FrameDataApi31;
+Landroidx/metrics/performance/JankStats;
+Landroidx/metrics/performance/JankStatsApi16Impl;
+Landroidx/metrics/performance/JankStatsApi22Impl;
+Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;
+Landroidx/metrics/performance/JankStatsApi24Impl;
+Landroidx/metrics/performance/JankStatsApi26Impl;
+Landroidx/metrics/performance/JankStatsApi31Impl;
+Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+Landroidx/metrics/performance/PerformanceMetricsState;
+Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer;
+Landroidx/savedstate/Recreator;
+Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;
+Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
+Landroidx/savedstate/SavedStateRegistry;
+Landroidx/savedstate/SavedStateRegistryController;
+Landroidx/savedstate/SavedStateRegistryOwner;
+Landroidx/startup/AppInitializer;
+Landroidx/startup/InitializationProvider;
+Landroidx/startup/Initializer;
+Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;
+Landroidx/tv/foundation/PivotOffsets;
+Landroidx/tv/foundation/TvBringIntoViewSpec;
+Landroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator$onMeasured$$inlined$sortBy$1;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;
+Landroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;
+Landroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;
+Landroidx/tv/foundation/lazy/grid/TvGridItemSpan;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridItemSpanScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutKeyIndexMap;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;
+Landroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortBy$2;
+Landroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;
+Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt;
+Landroidx/tv/foundation/lazy/list/TvLazyListInterval;
+Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;
+Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;
+Landroidx/tv/foundation/lazy/list/TvLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/TvLazyListScope;
+Landroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;
+Landroidx/tv/foundation/lazy/list/TvLazyListState;
+Landroidx/tv/material3/Border;
+Landroidx/tv/material3/BorderIndication;
+Landroidx/tv/material3/ColorScheme;
+Landroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;
+Landroidx/tv/material3/ColorSchemeKt;
+Landroidx/tv/material3/ContentColorKt;
+Landroidx/tv/material3/Glow;
+Landroidx/tv/material3/GlowIndication;
+Landroidx/tv/material3/GlowIndicationInstance;
+Landroidx/tv/material3/ScaleIndication;
+Landroidx/tv/material3/ScaleIndicationInstance;
+Landroidx/tv/material3/ScaleIndicationTokens;
+Landroidx/tv/material3/ShapesKt$LocalShapes$1;
+Landroidx/tv/material3/SurfaceKt$Surface$4;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$3;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$1;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1;
+Landroidx/tv/material3/SurfaceKt;
+Landroidx/tv/material3/TabColors;
+Landroidx/tv/material3/TabKt$Tab$1;
+Landroidx/tv/material3/TabKt$Tab$3$1;
+Landroidx/tv/material3/TabKt$Tab$4$1;
+Landroidx/tv/material3/TabKt$Tab$6;
+Landroidx/tv/material3/TabKt$Tab$7;
+Landroidx/tv/material3/TabKt;
+Landroidx/tv/material3/TabRowDefaults$PillIndicator$1;
+Landroidx/tv/material3/TabRowDefaults;
+Landroidx/tv/material3/TabRowKt$TabRow$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2;
+Landroidx/tv/material3/TabRowKt$TabRow$3;
+Landroidx/tv/material3/TabRowScopeImpl;
+Landroidx/tv/material3/TabRowSlots;
+Landroidx/tv/material3/TextKt$Text$1;
+Landroidx/tv/material3/TextKt$Text$2;
+Landroidx/tv/material3/TextKt;
+Landroidx/tv/material3/ToggleableSurfaceBorder;
+Landroidx/tv/material3/ToggleableSurfaceColors;
+Landroidx/tv/material3/ToggleableSurfaceGlow;
+Landroidx/tv/material3/ToggleableSurfaceScale;
+Landroidx/tv/material3/ToggleableSurfaceShape;
+Landroidx/tv/material3/tokens/ColorLightTokens;
+Landroidx/tv/material3/tokens/Elevation;
+Landroidx/tv/material3/tokens/PaletteTokens;
+Landroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;
+Landroidx/tv/material3/tokens/ShapeTokens;
+Landroidx/tv/material3/tokens/TypographyTokensKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;
+Lcom/example/tvcomposebasedtests/Config;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator;
+Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;
+Lcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;
+Lcom/example/tvcomposebasedtests/MainActivity;
+Lcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;
+Lcom/example/tvcomposebasedtests/UtilsKt;
+Lcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;
+Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;
+Lcom/google/gson/JsonIOException;
+Lcom/google/gson/internal/ConstructorConstructor;
+Lcom/google/gson/internal/LinkedTreeMap$1;
+Lcom/google/gson/internal/ObjectConstructor;
+Lkotlin/Function;
+Lkotlin/Lazy;
+Lkotlin/Pair;
+Lkotlin/Result$Failure;
+Lkotlin/Result;
+Lkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;
+Lkotlin/ResultKt;
+Lkotlin/SynchronizedLazyImpl;
+Lkotlin/TuplesKt;
+Lkotlin/ULong$Companion;
+Lkotlin/UNINITIALIZED_VALUE;
+Lkotlin/Unit;
+Lkotlin/UnsafeLazyImpl;
+Lkotlin/collections/AbstractCollection;
+Lkotlin/collections/AbstractList;
+Lkotlin/collections/AbstractMap$toString$1;
+Lkotlin/collections/AbstractMap;
+Lkotlin/collections/AbstractMutableList;
+Lkotlin/collections/AbstractSet;
+Lkotlin/collections/ArrayDeque;
+Lkotlin/collections/ArraysKt___ArraysKt;
+Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;
+Lkotlin/collections/CollectionsKt__ReversedViewsKt;
+Lkotlin/collections/CollectionsKt___CollectionsKt;
+Lkotlin/collections/EmptyList;
+Lkotlin/collections/EmptyMap;
+Lkotlin/coroutines/AbstractCoroutineContextElement;
+Lkotlin/coroutines/AbstractCoroutineContextKey;
+Lkotlin/coroutines/CombinedContext;
+Lkotlin/coroutines/Continuation;
+Lkotlin/coroutines/ContinuationInterceptor;
+Lkotlin/coroutines/CoroutineContext$Element;
+Lkotlin/coroutines/CoroutineContext$Key;
+Lkotlin/coroutines/CoroutineContext$plus$1;
+Lkotlin/coroutines/CoroutineContext;
+Lkotlin/coroutines/EmptyCoroutineContext;
+Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CompletedContinuation;
+Lkotlin/coroutines/jvm/internal/ContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
+Lkotlin/coroutines/jvm/internal/SuspendLambda;
+Lkotlin/jvm/functions/Function0;
+Lkotlin/jvm/functions/Function12;
+Lkotlin/jvm/functions/Function1;
+Lkotlin/jvm/functions/Function22;
+Lkotlin/jvm/functions/Function2;
+Lkotlin/jvm/functions/Function3;
+Lkotlin/jvm/functions/Function4;
+Lkotlin/jvm/functions/Function5;
+Lkotlin/jvm/internal/ArrayIterator;
+Lkotlin/jvm/internal/CallableReference$NoReceiver;
+Lkotlin/jvm/internal/CallableReference;
+Lkotlin/jvm/internal/ClassBasedDeclarationContainer;
+Lkotlin/jvm/internal/ClassReference;
+Lkotlin/jvm/internal/FunctionBase;
+Lkotlin/jvm/internal/FunctionReferenceImpl;
+Lkotlin/jvm/internal/Lambda;
+Lkotlin/jvm/internal/PropertyReference0Impl;
+Lkotlin/jvm/internal/PropertyReference;
+Lkotlin/jvm/internal/Ref$BooleanRef;
+Lkotlin/jvm/internal/Ref$ObjectRef;
+Lkotlin/jvm/internal/Reflection;
+Lkotlin/jvm/internal/ReflectionFactory;
+Lkotlin/jvm/internal/markers/KMappedMarker;
+Lkotlin/jvm/internal/markers/KMutableCollection;
+Lkotlin/jvm/internal/markers/KMutableMap;
+Lkotlin/math/MathKt;
+Lkotlin/random/FallbackThreadLocalRandom$implStorage$1;
+Lkotlin/ranges/IntProgression;
+Lkotlin/ranges/IntProgressionIterator;
+Lkotlin/ranges/IntRange;
+Lkotlin/reflect/KCallable;
+Lkotlin/reflect/KClass;
+Lkotlin/reflect/KFunction;
+Lkotlin/reflect/KProperty0;
+Lkotlin/reflect/KProperty;
+Lkotlin/sequences/ConstrainedOnceSequence;
+Lkotlin/sequences/FilteringSequence$iterator$1;
+Lkotlin/sequences/FilteringSequence;
+Lkotlin/sequences/GeneratorSequence$iterator$1;
+Lkotlin/sequences/GeneratorSequence;
+Lkotlin/sequences/Sequence;
+Lkotlin/sequences/SequencesKt;
+Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;
+Lkotlin/sequences/TransformingSequence$iterator$1;
+Lkotlin/text/StringsKt__IndentKt$getIndentFunction$2;
+Lkotlin/text/StringsKt__RegexExtensionsKt;
+Lkotlin/text/StringsKt__StringBuilderKt;
+Lkotlin/text/StringsKt__StringNumberConversionsKt;
+Lkotlin/text/StringsKt__StringsKt;
+Lkotlin/text/StringsKt___StringsKt;
+Lkotlinx/coroutines/AbstractCoroutine;
+Lkotlinx/coroutines/Active;
+Lkotlinx/coroutines/BlockingCoroutine;
+Lkotlinx/coroutines/BlockingEventLoop;
+Lkotlinx/coroutines/CancelHandler;
+Lkotlinx/coroutines/CancellableContinuation;
+Lkotlinx/coroutines/CancellableContinuationImpl;
+Lkotlinx/coroutines/CancelledContinuation;
+Lkotlinx/coroutines/ChildContinuation;
+Lkotlinx/coroutines/ChildHandle;
+Lkotlinx/coroutines/ChildHandleNode;
+Lkotlinx/coroutines/ChildJob;
+Lkotlinx/coroutines/CompletableDeferredImpl;
+Lkotlinx/coroutines/CompletedContinuation;
+Lkotlinx/coroutines/CompletedExceptionally;
+Lkotlinx/coroutines/CompletedWithCancellation;
+Lkotlinx/coroutines/CoroutineContextKt$foldCopies$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key;
+Lkotlinx/coroutines/CoroutineDispatcher;
+Lkotlinx/coroutines/CoroutineExceptionHandler;
+Lkotlinx/coroutines/CoroutineScope;
+Lkotlinx/coroutines/DefaultExecutor;
+Lkotlinx/coroutines/DefaultExecutorKt;
+Lkotlinx/coroutines/Delay;
+Lkotlinx/coroutines/DispatchedTask;
+Lkotlinx/coroutines/Dispatchers;
+Lkotlinx/coroutines/DisposableHandle;
+Lkotlinx/coroutines/Empty;
+Lkotlinx/coroutines/EventLoopImplBase;
+Lkotlinx/coroutines/EventLoopImplPlatform;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher;
+Lkotlinx/coroutines/GlobalScope;
+Lkotlinx/coroutines/InactiveNodeList;
+Lkotlinx/coroutines/Incomplete;
+Lkotlinx/coroutines/IncompleteStateBox;
+Lkotlinx/coroutines/InvokeOnCancel;
+Lkotlinx/coroutines/InvokeOnCancelling;
+Lkotlinx/coroutines/InvokeOnCompletion;
+Lkotlinx/coroutines/Job;
+Lkotlinx/coroutines/JobCancellingNode;
+Lkotlinx/coroutines/JobImpl;
+Lkotlinx/coroutines/JobNode;
+Lkotlinx/coroutines/JobSupport$ChildCompletion;
+Lkotlinx/coroutines/JobSupport$Finishing;
+Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;
+Lkotlinx/coroutines/JobSupport;
+Lkotlinx/coroutines/MainCoroutineDispatcher;
+Lkotlinx/coroutines/NodeList;
+Lkotlinx/coroutines/NonDisposableHandle;
+Lkotlinx/coroutines/NotCompleted;
+Lkotlinx/coroutines/ParentJob;
+Lkotlinx/coroutines/StandaloneCoroutine;
+Lkotlinx/coroutines/SupervisorJobImpl;
+Lkotlinx/coroutines/ThreadLocalEventLoop;
+Lkotlinx/coroutines/TimeoutCancellationException;
+Lkotlinx/coroutines/Unconfined;
+Lkotlinx/coroutines/UndispatchedCoroutine;
+Lkotlinx/coroutines/UndispatchedMarker;
+Lkotlinx/coroutines/Waiter;
+Lkotlinx/coroutines/android/AndroidDispatcherFactory;
+Lkotlinx/coroutines/android/HandlerContext;
+Lkotlinx/coroutines/android/HandlerDispatcher;
+Lkotlinx/coroutines/android/HandlerDispatcherKt;
+Lkotlinx/coroutines/channels/BufferOverflow;
+Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+Lkotlinx/coroutines/channels/BufferedChannel;
+Lkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;
+Lkotlinx/coroutines/channels/BufferedChannelKt;
+Lkotlinx/coroutines/channels/Channel$Factory;
+Lkotlinx/coroutines/channels/Channel;
+Lkotlinx/coroutines/channels/ChannelResult$Closed;
+Lkotlinx/coroutines/channels/ChannelResult$Failed;
+Lkotlinx/coroutines/channels/ChannelSegment;
+Lkotlinx/coroutines/channels/ConflatedBufferedChannel;
+Lkotlinx/coroutines/channels/ProducerCoroutine;
+Lkotlinx/coroutines/channels/ProducerScope;
+Lkotlinx/coroutines/channels/ReceiveChannel;
+Lkotlinx/coroutines/channels/SendChannel;
+Lkotlinx/coroutines/channels/WaiterEB;
+Lkotlinx/coroutines/flow/AbstractFlow$collect$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;
+Lkotlinx/coroutines/flow/DistinctFlowImpl;
+Lkotlinx/coroutines/flow/Flow;
+Lkotlinx/coroutines/flow/FlowCollector;
+Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;
+Lkotlinx/coroutines/flow/MutableSharedFlow;
+Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+Lkotlinx/coroutines/flow/SafeFlow;
+Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter;
+Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/SharedFlowImpl;
+Lkotlinx/coroutines/flow/SharedFlowSlot;
+Lkotlinx/coroutines/flow/SharingCommand;
+Lkotlinx/coroutines/flow/SharingConfig;
+Lkotlinx/coroutines/flow/SharingStarted;
+Lkotlinx/coroutines/flow/StartedLazily;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed;
+Lkotlinx/coroutines/flow/StateFlow;
+Lkotlinx/coroutines/flow/StateFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/StateFlowImpl;
+Lkotlinx/coroutines/flow/StateFlowSlot;
+Lkotlinx/coroutines/flow/internal/AbortFlowException;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlow;
+Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;
+Lkotlinx/coroutines/flow/internal/FusibleFlow;
+Lkotlinx/coroutines/flow/internal/NoOpContinuation;
+Lkotlinx/coroutines/flow/internal/NopCollector;
+Lkotlinx/coroutines/flow/internal/SafeCollector;
+Lkotlinx/coroutines/flow/internal/SendingCollector;
+Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
+Lkotlinx/coroutines/internal/AtomicOp;
+Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+Lkotlinx/coroutines/internal/ContextScope;
+Lkotlinx/coroutines/internal/DispatchedContinuation;
+Lkotlinx/coroutines/internal/LimitedDispatcher;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+Lkotlinx/coroutines/internal/LockFreeTaskQueue;
+Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;
+Lkotlinx/coroutines/internal/MainDispatcherFactory;
+Lkotlinx/coroutines/internal/MainDispatcherLoader;
+Lkotlinx/coroutines/internal/OpDescriptor;
+Lkotlinx/coroutines/internal/Removed;
+Lkotlinx/coroutines/internal/ResizableAtomicArray;
+Lkotlinx/coroutines/internal/ScopeCoroutine;
+Lkotlinx/coroutines/internal/Segment;
+Lkotlinx/coroutines/internal/StackTraceRecoveryKt;
+Lkotlinx/coroutines/internal/Symbol;
+Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;
+Lkotlinx/coroutines/internal/ThreadState;
+Lkotlinx/coroutines/scheduling/CoroutineScheduler;
+Lkotlinx/coroutines/scheduling/DefaultIoScheduler;
+Lkotlinx/coroutines/scheduling/DefaultScheduler;
+Lkotlinx/coroutines/scheduling/GlobalQueue;
+Lkotlinx/coroutines/scheduling/NanoTimeSource;
+Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;
+Lkotlinx/coroutines/scheduling/Task;
+Lkotlinx/coroutines/scheduling/TasksKt;
+Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;
+Lkotlinx/coroutines/sync/Mutex;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;
+Lkotlinx/coroutines/sync/MutexImpl;
+Lkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl;
+Lkotlinx/coroutines/sync/SemaphoreKt;
+Lkotlinx/coroutines/sync/SemaphoreSegment;
+Lokhttp3/Headers$Builder;
+Lokhttp3/MediaType;
+PL_COROUTINE/ArtificialStackFrames;->access$removeRunning(Landroidx/compose/runtime/Stack;)V
+PL_COROUTINE/ArtificialStackFrames;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List;
+PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->run()V
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/collection/ArrayMap$EntrySet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->resumeAndRemoveAll()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V
+PLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/layout/OffsetElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
+PLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V
+PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+PLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
+PLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I
+PLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
+PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Throwable;)V
+PLandroidx/compose/runtime/Recomposer;->cancel()V
+PLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+PLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V
+PLandroidx/compose/runtime/SlotWriter;->startGroup()V
+PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILandroidx/compose/runtime/Stack;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+PLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V
+PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
+PLandroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;->dispose()V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+PLandroidx/compose/ui/focus/FocusOwnerImpl;->clearFocus(ZZ)V
+PLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V
+PLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V
+PLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
+PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;-><init>(Landroidx/compose/ui/node/LayoutNode;ZZ)V
+PLandroidx/compose/ui/node/UiApplier;->remove(II)V
+PLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;
+PLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
+PLandroidx/compose/ui/platform/WeakCache;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Ljava/lang/Class;)V
+PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
+PLandroidx/compose/ui/text/PlatformTextStyle;->equals(Ljava/lang/Object;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><init>(I)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V
+PLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
+PLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
+PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment;->onDestroy()V
+PLandroidx/lifecycle/ReportFragment;->onPause()V
+PLandroidx/lifecycle/ReportFragment;->onStop()V
+PLandroidx/metrics/performance/JankStatsApi24Impl;->removeFrameMetricsListenerDelegate(Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;Landroid/view/Window;)V
+PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;-><init>(I)V
+PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;-><init>(IIJJ)V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V
+PLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V
+PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/compose/ui/unit/Dp$Companion;
+PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)V
+PLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;->equals(Ljava/lang/Object;)Z
+PLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object;
+PLcom/example/tvcomposebasedtests/MainActivity;->onPause()V
+PLcom/google/gson/FieldNamingPolicy$1;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$1;->translateName(Ljava/lang/reflect/Field;)Ljava/lang/String;
+PLcom/google/gson/FieldNamingPolicy$2;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$3;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$4;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$5;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$6;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$7;-><init>()V
+PLcom/google/gson/FieldNamingPolicy;-><clinit>()V
+PLcom/google/gson/FieldNamingPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/Gson$1;-><init>(I)V
+PLcom/google/gson/Gson$3;-><init>(I)V
+PLcom/google/gson/Gson$4;-><init>(Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/Gson$FutureTypeAdapter;-><init>()V
+PLcom/google/gson/Gson;-><init>()V
+PLcom/google/gson/Gson;->newJsonWriter(Ljava/io/Writer;)Lcom/google/gson/stream/JsonWriter;
+PLcom/google/gson/Gson;->toJson(Lcom/google/gson/JsonObject;Lcom/google/gson/stream/JsonWriter;)V
+PLcom/google/gson/JsonNull;-><clinit>()V
+PLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/String;)V
+PLcom/google/gson/ToNumberPolicy$1;-><init>()V
+PLcom/google/gson/ToNumberPolicy$2;-><init>()V
+PLcom/google/gson/ToNumberPolicy$3;-><init>()V
+PLcom/google/gson/ToNumberPolicy$4;-><init>()V
+PLcom/google/gson/ToNumberPolicy;-><clinit>()V
+PLcom/google/gson/ToNumberPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/TypeAdapter;->nullSafe()Lcom/google/gson/Gson$4;
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;-><init>(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)V
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;
+PLcom/google/gson/internal/ConstructorConstructor;-><init>(Ljava/util/Map;Ljava/util/List;)V
+PLcom/google/gson/internal/ConstructorConstructor;->checkInstantiable(Ljava/lang/Class;)Ljava/lang/String;
+PLcom/google/gson/internal/ConstructorConstructor;->get(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/internal/ObjectConstructor;
+PLcom/google/gson/internal/Excluder;-><clinit>()V
+PLcom/google/gson/internal/Excluder;-><init>()V
+PLcom/google/gson/internal/Excluder;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/Excluder;->excludeClassInStrategy(Z)V
+PLcom/google/gson/internal/Excluder;->isAnonymousOrNonStaticLocal(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;-><init>(Landroidx/collection/ArrayMap$EntrySet;)V
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;->next()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->nextNode()Lcom/google/gson/internal/LinkedTreeMap$Node;
+PLcom/google/gson/internal/LinkedTreeMap$Node;->getKey()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap;-><clinit>()V
+PLcom/google/gson/internal/bind/ArrayTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;I)V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/DateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter$1;-><init>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->beginObject()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->value(Ljava/lang/Boolean;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;-><init>(ILjava/lang/Object;)V
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><init>(Lcom/google/gson/Gson;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;-><init>(Ljava/lang/String;Ljava/lang/reflect/Field;ZZLjava/lang/reflect/Method;ZLcom/google/gson/TypeAdapter;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;-><init>(Ljava/util/LinkedHashMap;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Lcom/google/gson/internal/Excluder;Lcom/google/gson/internal/bind/CollectionTypeAdapterFactory;Ljava/util/List;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->getBoundFields(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Ljava/lang/Class;Z)Ljava/util/LinkedHashMap;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->includeField(Ljava/lang/reflect/Field;Z)Z
+PLcom/google/gson/internal/bind/TypeAdapters$29;-><init>(I)V
+PLcom/google/gson/internal/bind/TypeAdapters$29;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$31;-><init>(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$31;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$32;-><init>(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$32;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$34$1;-><init>(Lcom/google/gson/Gson;Ljava/lang/reflect/Type;Lcom/google/gson/TypeAdapter;Lcom/google/gson/internal/ObjectConstructor;)V
+PLcom/google/gson/internal/bind/TypeAdapters;-><clinit>()V
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$31;
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$32;
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;->isRecord(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;-><clinit>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;->makeAccessible(Ljava/lang/reflect/AccessibleObject;)V
+PLcom/google/gson/internal/sql/SqlDateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimeTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimestampTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTypesSupport;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;->endArray()V
+PLcom/google/gson/stream/JsonWriter;->name(Ljava/lang/String;)V
+PLcom/google/gson/stream/JsonWriter;->newline()V
+PLkotlin/ResultKt;->SampleTvLazyColumn(ILandroidx/compose/runtime/Composer;I)V
+PLkotlin/ResultKt;->TvLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+PLkotlin/ResultKt;->checkArgument(Z)V
+PLkotlin/ResultKt;->checkNotPrimitive(Ljava/lang/reflect/Type;)V
+PLkotlin/ResultKt;->equals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z
+PLkotlin/ResultKt;->getFilterResult(Ljava/util/List;)V
+PLkotlin/ResultKt;->getGenericSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->getSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->resolve(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/reflect/Type;Ljava/util/HashMap;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->write(Lcom/google/gson/JsonElement;Lcom/google/gson/stream/JsonWriter;)V
+PLkotlin/TuplesKt;-><init>(I)V
+PLkotlin/TuplesKt;-><init>(Ljava/lang/Object;)V
+PLkotlin/TuplesKt;->access$removeEntryAtIndex([Ljava/lang/Object;I)[Ljava/lang/Object;
+PLkotlin/TuplesKt;->asMutableCollection(Ljava/util/LinkedHashSet;)Ljava/util/Collection;
+PLkotlin/TuplesKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V
+PLkotlin/TuplesKt;->writeProfile(Landroid/content/Context;Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V
+PLkotlin/ULong$Companion;->checkPositionIndex$kotlin_stdlib(II)V
+PLkotlin/ULong$Companion;->onResultReceived(ILjava/lang/Object;)V
+PLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/util/List;Lkotlin/Function;)Ljava/util/ArrayList;
+PLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V
+PLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/sequences/SequenceBuilderIterator;-><init>()V
+PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;
+PLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z
+PLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;
+PLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V
+PLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+PLkotlin/text/Charsets;-><clinit>()V
+PLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
+PLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V
+PLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z
+PLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;
+PLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
+PLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
+PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/SharingConfig;->clear()V
+PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
+PLkotlinx/coroutines/internal/DispatchedContinuation;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V
+PLokhttp3/MediaType;->access$locationOf(Ljava/util/ArrayList;II)I
diff --git a/tv/tv-material/api/current.txt b/tv/tv-material/api/current.txt
index 2ccd66b..8518c961 100644
--- a/tv/tv-material/api/current.txt
+++ b/tv/tv-material/api/current.txt
@@ -747,8 +747,8 @@
   }
 
   @SuppressCompatibility @androidx.tv.material3.ExperimentalTvMaterial3Api public interface NavigationDrawerScope {
-    method public boolean getDoesNavigationDrawerHaveFocus();
-    property public abstract boolean doesNavigationDrawerHaveFocus;
+    method public boolean getHasFocus();
+    property public abstract boolean hasFocus;
   }
 
   @SuppressCompatibility @androidx.compose.runtime.Immutable @androidx.tv.material3.ExperimentalTvMaterial3Api public final class NonInteractiveSurfaceColors {
diff --git a/tv/tv-material/api/restricted_current.txt b/tv/tv-material/api/restricted_current.txt
index 2ccd66b..8518c961 100644
--- a/tv/tv-material/api/restricted_current.txt
+++ b/tv/tv-material/api/restricted_current.txt
@@ -747,8 +747,8 @@
   }
 
   @SuppressCompatibility @androidx.tv.material3.ExperimentalTvMaterial3Api public interface NavigationDrawerScope {
-    method public boolean getDoesNavigationDrawerHaveFocus();
-    property public abstract boolean doesNavigationDrawerHaveFocus;
+    method public boolean getHasFocus();
+    property public abstract boolean hasFocus;
   }
 
   @SuppressCompatibility @androidx.compose.runtime.Immutable @androidx.tv.material3.ExperimentalTvMaterial3Api public final class NonInteractiveSurfaceColors {
diff --git a/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt b/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt
index 49fe18f..84899f3 100644
--- a/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt
+++ b/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt
@@ -78,6 +78,33 @@
     }
 
     @Test
+    fun assistChip_longClickSemantics() {
+        var count by mutableStateOf(0)
+        rule.setContent {
+            Box {
+                AssistChip(
+                    modifier = Modifier.testTag(AssistChipTag),
+                    onClick = {},
+                    onLongClick = { count++ }
+                ) { Text("Test Text") }
+            }
+        }
+
+        val node = rule.onNodeWithTag(AssistChipTag)
+
+        assert(count == 0)
+
+        node
+            .requestFocus()
+            .assertHasClickAction()
+            .assertIsEnabled()
+            .performLongKeyPress(rule, Key.DirectionCenter)
+        rule.waitForIdle()
+
+        assert(count == 1)
+    }
+
+    @Test
     fun assistChip_disabledSemantics() {
         rule.setContent {
             Box {
@@ -203,6 +230,36 @@
     }
 
     @Test
+    fun filterChip_longClickSemantics() {
+        var count by mutableStateOf(0)
+        rule.setContent {
+            Box {
+                FilterChip(
+                    modifier = Modifier.testTag(FilterChipTag),
+                    onClick = {},
+                    onLongClick = { count++ },
+                    selected = false
+                ) {
+                    Text("Test Text")
+                }
+            }
+        }
+
+        val node = rule.onNodeWithTag(FilterChipTag)
+
+        assert(count == 0)
+
+        node
+            .requestFocus()
+            .assertHasClickAction()
+            .assertIsEnabled()
+            .performLongKeyPress(rule, Key.DirectionCenter)
+        rule.waitForIdle()
+
+        assert(count == 1)
+    }
+
+    @Test
     fun filterChip_disabledSemantics() {
         rule.setContent {
             Box {
@@ -386,6 +443,36 @@
     }
 
     @Test
+    fun inputChip_longClickSemantics() {
+        var count by mutableStateOf(0)
+        rule.setContent {
+            Box {
+                InputChip(
+                    modifier = Modifier.testTag(InputChipTag),
+                    onClick = {},
+                    onLongClick = { count++ },
+                    selected = false
+                ) {
+                    Text("Test Text")
+                }
+            }
+        }
+
+        val node = rule.onNodeWithTag(InputChipTag)
+
+        assert(count == 0)
+
+        node
+            .requestFocus()
+            .assertHasClickAction()
+            .assertIsEnabled()
+            .performLongKeyPress(rule, Key.DirectionCenter)
+        rule.waitForIdle()
+
+        assert(count == 1)
+    }
+
+    @Test
     fun inputChip_disabledSemantics() {
         rule.setContent {
             Box {
@@ -525,6 +612,35 @@
     }
 
     @Test
+    fun suggestionChip_longClickSemantics() {
+        var count by mutableStateOf(0)
+        rule.setContent {
+            Box {
+                SuggestionChip(
+                    modifier = Modifier.testTag(SuggestionChipTag),
+                    onLongClick = { count++ },
+                    onClick = {}
+                ) {
+                    Text("mvTvSelectableChip")
+                }
+            }
+        }
+
+        val node = rule.onNodeWithTag(SuggestionChipTag)
+
+        assert(count == 0)
+
+        node
+            .requestFocus()
+            .assertHasClickAction()
+            .assertIsEnabled()
+            .performLongKeyPress(rule, Key.DirectionCenter)
+        rule.waitForIdle()
+
+        assert(count == 1)
+    }
+
+    @Test
     fun suggestionChip_disabledSemantics() {
         rule.setContent {
             Box {
diff --git a/tv/tv-material/src/main/baseline-prof.txt b/tv/tv-material/src/main/baseline-prof.txt
new file mode 100644
index 0000000..970cd8b
--- /dev/null
+++ b/tv/tv-material/src/main/baseline-prof.txt
@@ -0,0 +1,5623 @@
+HPLandroidx/collection/ArrayMap$EntrySet;-><init>(Ljava/util/Map;I)V
+HPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
+HPLandroidx/compose/runtime/CompositionImpl;->dispose()V
+HPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
+HPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z
+HPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z
+HPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V
+HPLandroidx/compose/runtime/SlotWriter;->skipGroup()I
+HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;)Ljava/lang/Boolean;
+HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
+HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HPLandroidx/compose/ui/node/UiApplier;->clear()V
+HPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;-><init>(II)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;Lkotlin/jvm/internal/Ref$ObjectRef;I)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;->getHasMoreContent()Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->hasMoreContent-FR3nfPY(Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->isForward-4vf7U8o(I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getFirstPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getHasVisibleItems()Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getItemCount()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getLastPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->remeasure()V
+HPLcom/example/tvcomposebasedtests/JankStatsAggregator;->issueJankReport(Ljava/lang/String;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Boolean;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Number;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/Gson;->getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+HPLcom/google/gson/JsonArray;-><init>()V
+HPLcom/google/gson/JsonArray;->iterator()Ljava/util/Iterator;
+HPLcom/google/gson/JsonObject;-><init>()V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Boolean;)V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Number;)V
+HPLcom/google/gson/JsonPrimitive;->getAsNumber()Ljava/lang/Number;
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;-><init>(Lcom/google/gson/internal/LinkedTreeMap;)V
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->hasNext()Z
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(ZLcom/google/gson/internal/LinkedTreeMap$Node;Ljava/lang/Object;Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;->getValue()Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->entrySet()Ljava/util/Set;
+HPLcom/google/gson/internal/LinkedTreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;->rebalance(Lcom/google/gson/internal/LinkedTreeMap$Node;Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->replaceInParent(Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateLeft(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateRight(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;-><init>()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endObject()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->get()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->name(Ljava/lang/String;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->peek()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->put(Lcom/google/gson/JsonElement;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(J)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$34$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$EnumTypeAdapter;-><init>(Lcom/google/gson/Gson;Lcom/google/gson/TypeAdapter;Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;-><init>(Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;->equals(Ljava/lang/Object;)Z
+HPLcom/google/gson/reflect/TypeToken;->hashCode()I
+HPLcom/google/gson/stream/JsonWriter;-><init>(Ljava/io/Writer;)V
+HPLcom/google/gson/stream/JsonWriter;->beforeValue()V
+HPLcom/google/gson/stream/JsonWriter;->beginArray()V
+HPLcom/google/gson/stream/JsonWriter;->beginObject()V
+HPLcom/google/gson/stream/JsonWriter;->close(IIC)V
+HPLcom/google/gson/stream/JsonWriter;->endObject()V
+HPLcom/google/gson/stream/JsonWriter;->peek()I
+HPLcom/google/gson/stream/JsonWriter;->string(Ljava/lang/String;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Ljava/lang/Number;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Z)V
+HPLcom/google/gson/stream/JsonWriter;->writeDeferredName()V
+HPLkotlin/ResultKt;->canonicalize(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
+HPLkotlin/ResultKt;->getRawType(Ljava/lang/reflect/Type;)Ljava/lang/Class;
+HPLkotlin/TuplesKt;->fastFilter(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function1;)Ljava/util/ArrayList;
+HPLkotlin/TuplesKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HPLkotlin/collections/ArrayDeque;->add(ILjava/lang/Object;)V
+HPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(I)V
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(II)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable()V
+HSPLandroidx/activity/ComponentActivity$1;-><init>(Landroid/view/KeyEvent$Callback;I)V
+HSPLandroidx/activity/ComponentActivity$2;-><init>()V
+HSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->onDraw()V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->viewCreated(Landroid/view/View;)V
+HSPLandroidx/activity/ComponentActivity;-><init>()V
+HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
+HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
+HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
+HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/activity/FullyDrawnReporter;-><init>(Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Landroidx/activity/ComponentActivity$1;)V
+HSPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V
+HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
+HSPLandroidx/activity/result/ActivityResult$1;-><init>(I)V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>()V
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(Landroidx/arch/core/internal/SafeIterableMap;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V
+HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/ArraySet;-><clinit>()V
+HSPLandroidx/collection/ArraySet;-><init>()V
+HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroidx/collection/ArraySet;->allocArrays(I)V
+HSPLandroidx/collection/ArraySet;->clear()V
+HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+HSPLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I
+HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
+HSPLandroidx/collection/LongSparseArray;-><clinit>()V
+HSPLandroidx/collection/LongSparseArray;-><init>(I)V
+HSPLandroidx/collection/SimpleArrayMap;-><init>()V
+HSPLandroidx/collection/SparseArrayCompat;-><clinit>()V
+HSPLandroidx/collection/SparseArrayCompat;-><init>()V
+HSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLjava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLjava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/TweenSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->compareTo(II)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->ordinal(I)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->values(I)[I
+HSPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;)V
+HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V
+HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationVector1D;-><init>(F)V
+HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F
+HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I
+HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V
+HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V
+HSPLandroidx/compose/animation/core/AnimationVector2D;-><init>(FF)V
+HSPLandroidx/compose/animation/core/AnimationVector3D;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F
+HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I
+HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V
+HSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
+HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)V
+HSPLandroidx/compose/animation/core/EasingKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(ILkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
+HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V
+HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverterImpl;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z
+HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Landroidx/compose/foundation/ImageKt$Image$1$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/ui/input/pointer/util/PointerIdArray;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()V
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/BackgroundElement;-><init>(JLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BackgroundNode;-><init>(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;-><init>(Landroidx/compose/ui/graphics/Brush;JJLkotlin/ResultKt;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/BorderModifierNode;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BorderStroke;-><init>(FLandroidx/compose/ui/graphics/SolidColor;)V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/FocusableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusableInteractionNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableInteractionNode;->emitWithFallback(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/Interaction;)V
+HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;-><init>()V
+HSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusableKt;->focusable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;-><init>(Landroidx/compose/foundation/FocusableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->onReset()V
+HSPLandroidx/compose/foundation/FocusableSemanticsNode;-><init>()V
+HSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/IndicationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V
+HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/MutatePriority;-><clinit>()V
+HSPLandroidx/compose/foundation/MutatePriority;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/MutatorMutex$Mutator;-><init>(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;-><init>(Landroidx/compose/foundation/MutatePriority;Landroidx/compose/foundation/MutatorMutex;Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/MutatorMutex;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;-><init>(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;-><init>(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZ)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;-><init>(Landroidx/compose/foundation/ScrollState;I)V
+HSPLandroidx/compose/foundation/ScrollState;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollState;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollState;->getValue()I
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->cancelAndRemoveAll(Ljava/util/concurrent/CancellationException;)V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->calculateScrollDistance(FFF)F
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$Request;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->access$calculateScrollDelta(Landroidx/compose/foundation/gestures/ContentInViewNode;)F
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->isMaxVisible-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Z
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->launchAnimation()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->relocationOffset-BMxPBkI(Landroidx/compose/ui/geometry/Rect;J)J
+HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpecImpl;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollDraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>(Z)V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;-><init>(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/tv/foundation/TvBringIntoViewSpec;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>(Landroidx/compose/animation/core/AnimationSpec;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->animateToZero(Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;-><init>(Landroidx/compose/foundation/interaction/FocusInteraction$Focus;)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(F)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V
+HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(Z)V
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V
+HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/FillElement;-><init>(IF)V
+HSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/FillNode;-><init>(IF)V
+HSPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;-><init>()V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetElement;-><init>(FF)V
+HSPLandroidx/compose/foundation/layout/OffsetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/OffsetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/foundation/layout/OffsetKt;->access$intrinsicSize(Ljava/util/List;Landroidx/compose/ui/CombinedModifier$toString$1;Landroidx/compose/ui/CombinedModifier$toString$1;IIII)I
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getRowColumnParentData(Landroidx/compose/ui/layout/Measurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
+HSPLandroidx/compose/foundation/layout/OffsetKt;->offset-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetNode;-><init>(FFZ)V
+HSPLandroidx/compose/foundation/layout/OffsetNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/PaddingElement;-><init>(FFFF)V
+HSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/PaddingNode;-><init>(FFFFZ)V
+HSPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;-><init>(FFFF)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(III[I)V
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V
+HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFI)V
+HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeNode;-><init>(FFFFZ)V
+HSPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J
+HSPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;-><init>(IZLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/WrapContentNode;-><init>(IZLkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(Ljava/lang/Object;ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->isLookingAhead()Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(JI)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->pin()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->release()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->size()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->schedulePrefetch-0kLqBqw(JI)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;-><init>(IJ)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->access$bringChildIntoView$localRect(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;-><init>(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(F)V
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F
+HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;-><clinit>()V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;)V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->intrinsicHeight(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph;
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraphIntrinsics;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZII)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->doInvalidations(ZZZZ)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getTextSubstitution()Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateCallbacks(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateLayoutRelatedArgs-MPT68mk(Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IIZLandroidx/compose/ui/text/font/FontFamily$Resolver;I)Z
+HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;-><clinit>()V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V
+HSPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w$default(JJJI)Landroidx/compose/material3/ColorScheme;
+HSPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V
+HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V
+HSPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V
+HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material3/ShapesKt;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/TextKt;->Text-fLXpl1I(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;I)V
+HSPLandroidx/compose/material3/TypographyKt;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypeScaleTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypefaceTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypographyTokens;-><clinit>()V
+HSPLandroidx/compose/runtime/Anchor;-><init>(I)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Landroidx/compose/runtime/Pending$keyMap$2;)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V
+HSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/ui/node/UiApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V
+HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I
+HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V
+HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->deactivateToEndGroup(Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/core/content/res/ComplexColorCompat;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V
+HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/core/content/res/ComplexColorCompat;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILandroidx/compose/runtime/OpaqueKey;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V
+HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V
+HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroupKeyHash(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
+HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V
+HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/HashSet;)V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V
+HSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/ui/node/UiApplier;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet;
+HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V
+HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V
+HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V
+HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->observer()V
+HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocalMap;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionObserverHolder;-><init>()V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/internal/ContextScope;)V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)Z
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)I
+HSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Landroidx/compose/runtime/ReferentialEqualityPolicy;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/GroupInfo;-><init>(III)V
+HSPLandroidx/compose/runtime/IntStack;-><init>()V
+HSPLandroidx/compose/runtime/IntStack;-><init>(I)V
+HSPLandroidx/compose/runtime/IntStack;->getSize()I
+HSPLandroidx/compose/runtime/IntStack;->pop()I
+HSPLandroidx/compose/runtime/IntStack;->push(I)V
+HSPLandroidx/compose/runtime/IntStack;->pushDiagonal(III)V
+HSPLandroidx/compose/runtime/IntStack;->pushRange(IIII)V
+HSPLandroidx/compose/runtime/IntStack;->quickSort(II)V
+HSPLandroidx/compose/runtime/IntStack;->swapDiagonal(II)V
+HSPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/KeyInfo;-><init>(ILjava/lang/Object;II)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/runtime/Latch;-><init>()V
+HSPLandroidx/compose/runtime/Latch;-><init>(I)V
+HSPLandroidx/compose/runtime/Latch;->add(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/runtime/Latch;->contains(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/Latch;->pop()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/runtime/Latch;->remove(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(Landroidx/compose/runtime/MonotonicFrameClock;)V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
+HSPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/core/content/res/ComplexColorCompat;I)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl;
+HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z
+HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
+HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;
+HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I
+HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z
+HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z
+HSPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List;
+HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/runtime/SlotReader;-><init>(Landroidx/compose/runtime/SlotTable;)V
+HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor;
+HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->close()V
+HSPLandroidx/compose/runtime/SlotReader;->endGroup()V
+HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I
+HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z
+HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I
+HSPLandroidx/compose/runtime/SlotReader;->objectKey([II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->parent(I)I
+HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V
+HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I
+HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotReader;->startGroup()V
+HSPLandroidx/compose/runtime/SlotTable;-><init>()V
+HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
+HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader;
+HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter;
+HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z
+HSPLandroidx/compose/runtime/SlotWriter;-><clinit>()V
+HSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V
+HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;
+HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->close()V
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I
+HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V
+HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V
+HSPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;-><init>(I)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;-><init>(I)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;-><init>(Landroidx/compose/runtime/ProduceStateScopeImpl;I)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;-><init>()V
+HSPLandroidx/compose/runtime/Stack;-><init>(I)V
+HSPLandroidx/compose/runtime/Stack;-><init>(II)V
+HSPLandroidx/compose/runtime/Stack;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Ljava/nio/ByteBuffer;)V
+HSPLandroidx/compose/runtime/Stack;->clear()V
+HSPLandroidx/compose/runtime/Stack;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;->readUnsignedInt()J
+HSPLandroidx/compose/runtime/Stack;->skip(I)V
+HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/changelist/ChangeList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;-><init>(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V
+HSPLandroidx/compose/runtime/changelist/FixupList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(II)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(III)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;-><init>(Landroidx/compose/runtime/changelist/Operations;)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/changelist/Operations;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I
+HSPLandroidx/compose/runtime/changelist/Operations;->clear()V
+HSPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->peekOperation()Landroidx/compose/runtime/changelist/Operation;
+HSPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getKey()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List;
+HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V
+HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;L_COROUTINE/ArtificialStackFrames;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;-><init>(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>()V
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;-><init>(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I
+HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/coroutines/CoroutineContext$plus$1;)V
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;-><init>(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/internal/Lambda;I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;-><init>(Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/collections/AbstractMap$toString$1;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
+HSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V
+HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><clinit>()V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><init>(I)V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Landroidx/compose/ui/layout/Measurable;I)Ljava/lang/Integer;
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/CombinedModifier;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V
+HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/Modifier$Node;-><init>()V
+HSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
+HSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z
+HSPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V
+HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V
+HSPLandroidx/compose/ui/Modifier$Node;->onReset()V
+HSPLandroidx/compose/ui/Modifier$Node;->reset$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/ui/ZIndexElement;-><init>()V
+HSPLandroidx/compose/ui/ZIndexElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/ZIndexElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/ui/ZIndexNode;-><init>(F)V
+HSPLandroidx/compose/ui/ZIndexNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+HSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;-><init>(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/draw/CacheDrawScope;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult;
+HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->drawWithCache(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/DrawResult;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><clinit>()V
+HSPLandroidx/compose/ui/draw/PainterElement;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/draw/PainterNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
+HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/draw/PainterNode;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z
+HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z
+HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z
+HSPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J
+HSPLandroidx/compose/ui/focus/FocusChangedElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/focus/FocusChangedNode;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/ui/focus/FocusDirection;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats-I7lrPNg(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;I)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats_I7lrPNg$inSourceBeam(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->clearFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->collectAccessibleChildren(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findActiveFocusNode(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findBestCandidate-4WY_MpI(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/geometry/Rect;I)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findChildCorrespondingToFocusEnter--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusRect(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->generateAndSearchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->grantFocus(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->invalidateFocusEvent(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$isCandidate(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$weightedDistance(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)J
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isEligibleForFocusSearch(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomClearFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomEnter-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomRequestFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performRequestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requestFocusForChild(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireTransactionManager(Landroidx/compose/ui/focus/FocusTargetNode;)Lcom/google/gson/internal/ConstructorConstructor;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchBeyondBounds--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->twoDimensionalFocusSearch--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;-><init>(Landroidx/compose/ui/focus/FocusOwnerImpl;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;-><init>(Landroidx/compose/ui/focus/FocusTargetNode;Ljava/lang/Object;ILjava/lang/Object;I)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->moveFocus-3ESFkO8(I)Z
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke-3ESFkO8()Landroidx/compose/ui/focus/FocusRequester;
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->fetchFocusProperties$ui_release()Landroidx/compose/ui/focus/FocusPropertiesImpl;
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl;
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->onReset()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->scheduleInvalidationForFocusEvents$ui_release()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->setFocusState(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/MutableRect;-><init>()V
+HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z
+HSPLandroidx/compose/ui/geometry/Offset;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/Rect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/geometry/Rect;->intersect(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate(FF)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate-k-4lQ0M(J)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V
+HSPLandroidx/compose/ui/geometry/Size;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Size;-><init>(J)V
+HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
+HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F
+HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
+HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;-><init>()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->scale(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/Brush;-><init>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(I)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(J)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V
+HSPLandroidx/compose/ui/graphics/Color;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Color;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J
+HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/Color;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F
+HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F
+HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F
+HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F
+HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S
+HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F
+HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J
+HSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V
+HSPLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
+HSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>(I)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V
+HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShouldAutoInvalidate()Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>(DI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Lkotlin/ResultKt;)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->scale-0AR0LA0(FFJ)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-AsUm42w$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJI)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J
+HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;-><init>(FFIII)V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;)V
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V
+HSPLandroidx/compose/ui/input/InputMode;-><init>(I)V
+HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(I)V
+HSPLandroidx/compose/ui/input/key/Key;-><clinit>()V
+HSPLandroidx/compose/ui/input/key/Key;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/input/key/KeyEvent;-><init>(Landroid/view/KeyEvent;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/input/key/KeyInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->Key(I)J
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLandroidx/compose/ui/input/pointer/PointerIcon;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;-><init>(Ljava/lang/Object;Lokhttp3/MediaType;Lkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FF)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;-><init>(Landroidx/compose/ui/layout/Measurable;Ljava/lang/Enum;Ljava/lang/Enum;I)V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;-><init>(III)V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;-><init>(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/unit/LayoutDirection;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/layout/LayoutElement;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;I)V
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->isLookingAhead()Z
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(JI)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/layout/MeasurePolicy;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;)V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V
+HSPLandroidx/compose/ui/layout/Placeable;-><init>()V
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I
+HSPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V
+HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V
+HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V
+HSPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;II)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>()V
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V
+HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Landroidx/compose/material3/ShapesKt$LocalShapes$1;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocal;)V
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V
+HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;-><init>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->reset$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/HitTestResult;-><init>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicHeight(I)I
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicHeight(I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicWidth(I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZ)V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZI)V
+HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V
+HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V
+HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getMeasuredByParent$ui_release$enumunboxing$()I
+HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I
+HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V
+HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z
+HSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z
+HSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/LayoutNode;->move$ui_release(III)V
+HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V
+HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZI)V
+HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawDirect-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markSubtreeAsNotPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicHeight(I)I
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicWidth(I)I
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onIntrinsicsQueried()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V
+HSPLandroidx/compose/ui/node/LookaheadAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doLookaheadRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;->areItemsTheSame(II)Z
+HSPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z
+HSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V
+HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V
+HSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><init>(Landroidx/compose/ui/node/ObserverModifierNode;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/node/TailModifierNode;-><init>()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V
+HSPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/UiApplier;->down(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->getCurrent()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V
+HSPLandroidx/compose/ui/node/UiApplier;->up()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext;
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V
+HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/res/Configuration;)I
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->onGlobalLayout()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->onTouchModeChanged(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/HapticFeedback;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/input/pointer/PointerIconService;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSoftwareKeyboardController()Landroidx/compose/ui/platform/SoftwareKeyboardController;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/TextToolbar;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getView()Landroid/view/View;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->get_viewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCheckIsTextEditor()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onFocusChanged(ZILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->pack-ZIaKswc(II)J
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->setShowLayoutBounds(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->set_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;->setViewTranslationCallback(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V
+HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V
+HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z
+HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;)V
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V
+HSPLandroidx/compose/ui/platform/InspectableModifier;-><init>()V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Landroidx/compose/ui/text/SaversKt$ColorSaver$1;)V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()V
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;
+HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z
+HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><clinit>()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(I)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Landroidx/compose/ui/node/InnerNodeCoordinator;)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WeakCache;->add(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V
+HSPLandroidx/compose/ui/platform/WeakCache;->get$1()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WeakCache;->set(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/internal/ContextScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition;
+HSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;-><init>(Lkotlin/jvm/functions/Function1;Z)V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V
+HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;-><init>(ZLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><init>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z
+HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;
+HSPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;
+HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F
+HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F
+HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;->paint-LG529CI(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Lkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;IILjava/lang/String;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/AnnotatedStringKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/EmojiSupportMatch;-><init>(I)V
+HSPLandroidx/compose/ui/text/MultiParagraph;->paint-LG529CI$default(Landroidx/compose/ui/text/MultiParagraph;Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;I)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke$1()Ljava/lang/Float;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/ParagraphInfo;-><init>(Landroidx/compose/ui/text/AndroidParagraph;IIIIFF)V
+HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;II)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
+HSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/ParagraphStyleKt;->fastMerge-HtYhynw(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)Landroidx/compose/ui/text/ParagraphStyle;
+HSPLandroidx/compose/ui/text/PlatformParagraphStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/PlatformTextStyle;-><init>(Landroidx/compose/ui/text/PlatformParagraphStyle;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;I)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/SpanStyleKt;->fastMerge-dSHsh3o(Landroidx/compose/ui/text/SpanStyle;JLandroidx/compose/ui/graphics/Brush;FJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V
+HSPLandroidx/compose/ui/text/TextLayoutResult;-><init>(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V
+HSPLandroidx/compose/ui/text/TextRange;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I
+HSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JI)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/DefaultFontFamily;I)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;I)V
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics;
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)F
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode;
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas;
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/text/android/Paint29;->getTextBounds(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V
+HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()V
+HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z
+HSPLandroidx/compose/ui/text/android/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V
+HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I
+HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F
+HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;-><init>(FIZZF)V
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V
+HSPLandroidx/compose/ui/text/caches/LruCache;-><init>()V
+HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/caches/LruCache;->size()I
+HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>()V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/unit/Dp$Companion;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V
+HSPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I
+HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V
+HSPLandroidx/compose/ui/text/input/TextInputService;-><init>()V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;Landroidx/compose/ui/input/pointer/PositionCalculator;)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;I)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->doFrame(J)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
+HSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/AndroidLocale;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(F)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;
+HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/platform/URLSpanCache;-><init>()V
+HSPLandroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)V
+HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F
+HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
+HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/Hyphens;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDirection;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush;
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V
+HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZ)V
+HSPLandroidx/compose/ui/text/style/TextMotion;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Constraints;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Constraints;-><init>(J)V
+HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J
+HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z
+HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I
+HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I
+HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F
+HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
+HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
+HSPLandroidx/compose/ui/unit/DensityImpl;-><init>(FF)V
+HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F
+HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/unit/Dp$Companion;->access$getIsShowingLayoutBounds()Z
+HSPLandroidx/compose/ui/unit/Dp$Companion;->area([F)F
+HSPLandroidx/compose/ui/unit/Dp$Companion;->bitsNeedForSize(I)I
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->fixed-JhjzzOo(II)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/unit/Dp;-><init>(F)V
+HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z
+HSPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/DpRect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/unit/DpRect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I
+HSPLandroidx/compose/ui/unit/IntSize;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V
+HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
+HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F
+HSPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V
+HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
+HSPLandroidx/core/app/ComponentActivity;-><init>()V
+HSPLandroidx/core/app/ComponentActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/core/app/ComponentActivity;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/CoreComponentFactory;-><init>()V
+HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
+HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;
+HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>()V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(I)V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/core/content/res/ComplexColorCompat;->find(Ljava/lang/Object;)I
+HSPLandroidx/core/content/res/ComplexColorCompat;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/core/content/res/ComplexColorCompat;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/core/graphics/TypefaceCompat;-><clinit>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;-><init>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface;
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font;
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I
+HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$1()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$2()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$3()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V
+HSPLandroidx/core/os/TraceCompat;-><clinit>()V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(Ljava/util/List;ILjava/lang/Throwable;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;->run()V
+HSPLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor;
+HSPLandroidx/core/provider/FontRequest;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
+HSPLandroidx/core/provider/FontsContractCompat$FontInfo;-><init>(Landroid/net/Uri;IIZI)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(Landroidx/core/view/AccessibilityDelegateCompat;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEvent(Landroid/view/View;I)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;
+HSPLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V
+HSPLandroidx/core/view/ViewCompat;-><clinit>()V
+HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->process(Ljava/lang/CharSequence;IZ)Ljava/lang/CharSequence;
+HSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V
+HSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V
+HSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig;)V
+HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;
+HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I
+HSPLandroidx/emoji2/text/EmojiCompat;->load()V
+HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/runtime/Stack;Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;-><init>(Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean;
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;-><init>(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Lkotlin/ULong$Companion;)V
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object;
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;-><init>(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->shouldUseEmojiPresentationStyleForSingleCodepoint()Z
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Lkotlin/ULong$Companion;Landroidx/emoji2/text/DefaultGlyphChecker;Ljava/util/Set;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/String;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Landroid/os/Handler;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>(I)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V
+HSPLandroidx/emoji2/text/MetadataRepo;-><init>(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><clinit>()V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem;
+HSPLandroidx/emoji2/text/flatbuffer/Table;-><init>()V
+HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;
+HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(I)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(II)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;->fillInStackTrace()Ljava/lang/Throwable;
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;
+HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
+HSPLandroidx/lifecycle/Lifecycling;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><clinit>()V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment;-><init>()V
+HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment;->onResume()V
+HSPLandroidx/lifecycle/ReportFragment;->onStart()V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V
+HSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V
+HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V
+HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;-><init>(Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/FrameData;-><init>(JJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi24;-><init>(JJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;-><init>(JJJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;->copy()Landroidx/metrics/performance/FrameData;
+HSPLandroidx/metrics/performance/JankStats;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;)V
+HSPLandroidx/metrics/performance/JankStats;->logFrameData$metrics_performance_release(Landroidx/metrics/performance/FrameData;)V
+HSPLandroidx/metrics/performance/JankStatsApi16Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi22Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;-><init>(Landroidx/metrics/performance/JankStatsApi24Impl;Landroidx/metrics/performance/JankStats;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->getOrCreateFrameMetricsListenerDelegator(Landroid/view/Window;)Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->setupFrameTimer(Z)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;->getFrameStartTime$metrics_performance_release(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getExpectedFrameDuration(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getFrameData$metrics_performance_release(JJLandroid/view/FrameMetrics;)Landroidx/metrics/performance/FrameDataApi24;
+HSPLandroidx/metrics/performance/PerformanceMetricsState;-><init>()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->addFrameState(JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->cleanupSingleFrameStates$metrics_performance_release()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->getIntervalStates$metrics_performance_release(JJLjava/util/ArrayList;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;-><init>(Landroid/content/Context;I)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry;-><init>()V
+HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V
+HSPLandroidx/startup/AppInitializer;-><clinit>()V
+HSPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V
+HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V
+HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object;
+HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;
+HSPLandroidx/startup/InitializationProvider;-><init>()V
+HSPLandroidx/startup/InitializationProvider;->onCreate()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V
+HSPLandroidx/tv/foundation/PivotOffsets;-><init>()V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;-><init>(Landroidx/tv/foundation/PivotOffsets;Z)V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->calculateScrollDistance(FFF)F
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;-><init>(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;->reset()V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JIII)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->getIndex()I
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->setIndex(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->update(II)V
+HSPLandroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;I)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;-><init>(Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Z)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Landroidx/tv/material3/TabKt$Tab$3$1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/semantics/CollectionInfo;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;-><init>(IILjava/util/HashMap;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;-><init>(Lkotlin/ranges/IntRange;Landroidx/tv/material3/TabKt;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;Landroidx/compose/runtime/Stack;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getItemCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(JZLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;ZLandroidx/compose/foundation/layout/PaddingValuesImpl;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;-><init>(Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;II)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getHeight()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getTotalItemsCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getWidth()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->placeChildren()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->getParentData(I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->position(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;->rememberTvLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/tv/foundation/lazy/list/TvLazyListState;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getKey()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getType()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;-><init>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListScope;->items$default(Landroidx/tv/foundation/lazy/list/TvLazyListScope;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><init>(II)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->applyMeasureResult$tv_foundation_release(Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;Z)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollBackward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollForward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/Border;-><clinit>()V
+HSPLandroidx/tv/material3/Border;-><init>(Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/Border;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ColorScheme;->getInverseSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getOnSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><init>(I)V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/ContentColorKt;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><init>(JF)V
+HSPLandroidx/tv/material3/Glow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/GlowIndication;-><init>(JLandroidx/compose/ui/graphics/Shape;FFF)V
+HSPLandroidx/tv/material3/GlowIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;
+HSPLandroidx/tv/material3/GlowIndicationInstance;-><init>(JLandroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/unit/Density;FFF)V
+HSPLandroidx/tv/material3/GlowIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndication;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndicationTokens;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$Surface$4;-><init>(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;-><init>(Landroidx/compose/ui/graphics/Shape;JI)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;-><init>(FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2;-><init>(JILandroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;FLandroidx/tv/material3/Glow;Landroidx/compose/ui/graphics/Shape;Landroidx/tv/material3/Border;FLandroidx/compose/runtime/MutableState;ZLkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;-><init>(Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/graphics/Shape;JJFLandroidx/tv/material3/Border;Landroidx/tv/material3/Glow;FLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/PressInteraction$Press;Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Z)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1;-><init>(ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/tv/material3/SurfaceKt;-><clinit>()V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface-xYaah8o(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$4(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$5(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/TabColors;-><init>(JJJJJJJJ)V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><init>()V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;-><init>(IZ)V
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$6;-><init>(Lkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$7;-><init>(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabKt;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt;->BasicText-BpD7jsM(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LazyLayout(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->Tab(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->TabRow-pAZo6Ak(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I
+HSPLandroidx/tv/material3/TabKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->collectIsFocusedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
+HSPLandroidx/tv/material3/TabKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/tv/material3/TabKt;->createCompositionCoroutineScope(Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLandroidx/tv/material3/TabKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/tv/material3/TabKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->finalConstraints-tfFHcEY(JZIF)J
+HSPLandroidx/tv/material3/TabKt;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F
+HSPLandroidx/tv/material3/TabKt;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+HSPLandroidx/tv/material3/TabKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+HSPLandroidx/tv/material3/TabKt;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->spring$default(FLjava/lang/Comparable;I)Landroidx/compose/animation/core/SpringSpec;
+HSPLandroidx/tv/material3/TabKt;->tween$default(ILandroidx/compose/animation/core/Easing;)Landroidx/compose/animation/core/TweenSpec;
+HSPLandroidx/tv/material3/TabKt;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/tv/material3/TabKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V
+HSPLandroidx/tv/material3/TabKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;-><init>(Landroidx/tv/material3/TabRowDefaults;Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJII)V
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowDefaults;->PillIndicator-jA1GFJw(Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJLandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;-><init>(I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Lkotlin/jvm/functions/Function4;Ljava/util/ArrayList;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/ArrayList;ILkotlin/jvm/functions/Function4;ILandroidx/compose/runtime/MutableState;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(IILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(ILkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;-><init>(Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$3;-><init>(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabRowScopeImpl;-><init>(Z)V
+HSPLandroidx/tv/material3/TabRowSlots;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowSlots;-><init>(ILjava/lang/String;)V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TextKt$Text$2;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;IIII)V
+HSPLandroidx/tv/material3/TextKt;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt;->Text-fLXpl1I(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/ToggleableSurfaceBorder;-><init>(Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;-><init>(JJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ToggleableSurfaceGlow;-><init>(Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><clinit>()V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><init>(FFFFFFFFFF)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;-><init>(Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/tokens/ColorLightTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/Elevation;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><init>(I)V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/util/List;II)Ljava/lang/Integer;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/material3/tokens/TypographyTokensKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><init>(I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;ILandroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/Config;-><init>(Landroid/content/Context;Landroidx/activity/ComponentActivity;II)V
+HSPLcom/example/tvcomposebasedtests/Config;->toString()Ljava/lang/String;
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;-><init>(Lcom/example/tvcomposebasedtests/JankStatsAggregator;)V
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;-><init>()V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onResume()V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;-><init>(II)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListScope;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;-><init>(III)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><init>(Ljava/lang/String;ILjava/lang/String;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;->values()[Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;->invoke()Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;-><init>(IILjava/util/List;Lkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/google/gson/internal/ConstructorConstructor;-><init>()V
+HSPLcom/google/gson/internal/ConstructorConstructor;->access$commitTransaction(Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;-><init>(I)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V
+HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m$1()Ljava/util/Iterator;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(III)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(ILjava/lang/String;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$1(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$2(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf$1(Ljava/lang/String;)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf(Ljava/lang/String;)I
+HSPLkotlin/ResultKt;-><clinit>()V
+HSPLkotlin/ResultKt;-><init>(Landroidx/metrics/performance/JankStats;)V
+HSPLkotlin/ResultKt;->App(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->Constraints$default(III)J
+HSPLkotlin/ResultKt;->Constraints(IIII)J
+HSPLkotlin/ResultKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl;
+HSPLkotlin/ResultKt;->DpOffset-YgX7TsA(FF)J
+HSPLkotlin/ResultKt;->IntOffset(II)J
+HSPLkotlin/ResultKt;->IntSize(II)J
+HSPLkotlin/ResultKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->SampleCardItem(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->SampleTvLazyRow(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->TvLazyRow(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
+HSPLkotlin/ResultKt;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->canBeSavedToBundle(Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->checkArgument(Ljava/lang/String;Z)V
+HSPLkotlin/ResultKt;->checkElementIndex$runtime_release(II)V
+HSPLkotlin/ResultKt;->checkNotNull$1(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->compare(II)I
+HSPLkotlin/ResultKt;->constrain-4WqzIAM(JJ)J
+HSPLkotlin/ResultKt;->constrainHeight-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->constrainWidth-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+HSPLkotlin/ResultKt;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Lkotlin/Result$Failure;
+HSPLkotlin/ResultKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlin/ResultKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ProducerCoroutine;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/ResultKt;->findIndexByKey$1(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I
+HSPLkotlin/ResultKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;
+HSPLkotlin/ResultKt;->getExclusions()Ljava/util/Set;
+HSPLkotlin/ResultKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;
+HSPLkotlin/ResultKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
+HSPLkotlin/ResultKt;->getProgressionLastElement(III)I
+HSPLkotlin/ResultKt;->getSp(D)J
+HSPLkotlin/ResultKt;->getSp(I)J
+HSPLkotlin/ResultKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLkotlin/ResultKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->isEnabled()Z
+HSPLkotlin/ResultKt;->isUnspecified--R2X_6o(J)Z
+HSPLkotlin/ResultKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/android/HandlerContext;ILkotlin/jvm/functions/Function2;I)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mapCapacity(I)I
+HSPLkotlin/ResultKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mmap(Landroid/content/Context;Landroid/net/Uri;)Ljava/nio/MappedByteBuffer;
+HSPLkotlin/ResultKt;->offset-NN6Ew-U(IIJ)J
+HSPLkotlin/ResultKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect;
+HSPLkotlin/ResultKt;->pack(FJ)J
+HSPLkotlin/ResultKt;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/ResultKt;->read(Ljava/nio/MappedByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
+HSPLkotlin/ResultKt;->recoverResult(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/ResultKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F
+HSPLkotlin/ResultKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V
+HSPLkotlin/ResultKt;->roundToInt(F)I
+HSPLkotlin/ResultKt;->scrollableWithPivot(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/tv/foundation/PivotOffsets;ZZ)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->stateIn(Lkotlinx/coroutines/flow/SafeFlow;Lkotlinx/coroutines/internal/ContextScope;Lkotlinx/coroutines/flow/StartedWhileSubscribed;Ljava/lang/Float;)Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+HSPLkotlin/ResultKt;->systemProp$default(Ljava/lang/String;IIII)I
+HSPLkotlin/ResultKt;->systemProp(Ljava/lang/String;JJJ)J
+HSPLkotlin/ResultKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->toSize-ozmzZPI(J)J
+HSPLkotlin/ResultKt;->ulongToDouble(J)D
+HSPLkotlin/ResultKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/TuplesKt;-><clinit>()V
+HSPLkotlin/TuplesKt;->CornerRadius(FF)J
+HSPLkotlin/TuplesKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZZZILandroidx/tv/foundation/PivotOffsets;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
+HSPLkotlin/TuplesKt;->PillIndicatorTabRow(Ljava/util/List;ILkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;
+HSPLkotlin/TuplesKt;->ScrollPositionUpdater(Lkotlin/jvm/functions/Function0;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Size(FF)J
+HSPLkotlin/TuplesKt;->TopNavigation(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/TuplesKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node;
+HSPLkotlin/TuplesKt;->access$removeRange(Ljava/util/ArrayList;II)V
+HSPLkotlin/TuplesKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode;
+HSPLkotlin/TuplesKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->beforeCheckcastToFunctionOfArity(ILjava/lang/Object;)V
+HSPLkotlin/TuplesKt;->binarySearch([II)I
+HSPLkotlin/TuplesKt;->bitsForSlot(II)I
+HSPLkotlin/TuplesKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/runtime/Stack;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->checkRadix(I)V
+HSPLkotlin/TuplesKt;->coerceIn(DDD)D
+HSPLkotlin/TuplesKt;->coerceIn(FFF)F
+HSPLkotlin/TuplesKt;->coerceIn(III)I
+HSPLkotlin/TuplesKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
+HSPLkotlin/TuplesKt;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->composableLambdaInstance(ILkotlin/jvm/internal/Lambda;Z)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->findLocation(ILjava/util/List;)I
+HSPLkotlin/TuplesKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlin/TuplesKt;->getCenter-uvyYCjk(J)J
+HSPLkotlin/TuplesKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getIncludeSelfInTraversal-H91voCI(I)Z
+HSPLkotlin/TuplesKt;->getLastIndex(Ljava/util/List;)I
+HSPLkotlin/TuplesKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V
+HSPLkotlin/TuplesKt;->isWhitespace(C)Z
+HSPLkotlin/TuplesKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
+HSPLkotlin/TuplesKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/TuplesKt;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/TuplesKt;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;
+HSPLkotlin/TuplesKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z
+HSPLkotlin/TuplesKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLkotlin/TuplesKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;
+HSPLkotlin/TuplesKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/TuplesKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;
+HSPLkotlin/TuplesKt;->runtimeCheck(Z)V
+HSPLkotlin/TuplesKt;->until(II)Lkotlin/ranges/IntRange;
+HSPLkotlin/ULong$Companion;-><init>()V
+HSPLkotlin/ULong$Companion;-><init>(I)V
+HSPLkotlin/ULong$Companion;-><init>(II)V
+HSPLkotlin/ULong$Companion;->checkElementIndex$kotlin_stdlib(II)V
+HSPLkotlin/ULong$Companion;->computeScaleFactor-H7hwNQA(JJ)J
+HSPLkotlin/ULong$Companion;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLkotlin/ULong$Companion;->getHolderForHierarchy(Landroid/view/View;)Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+HSPLkotlin/ULong$Companion;->injectIfNeededIn(Landroid/app/Activity;)V
+HSPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V
+HSPLkotlin/Unit;-><clinit>()V
+HSPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/collections/AbstractCollection;->isEmpty()Z
+HSPLkotlin/collections/AbstractCollection;->size()I
+HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke()Landroidx/compose/runtime/DisposableEffectResult;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(F)Ljava/lang/Float;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;
+HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap;->size()I
+HSPLkotlin/collections/AbstractMutableList;-><init>()V
+HSPLkotlin/collections/AbstractMutableList;->size()I
+HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/ArrayDeque;-><clinit>()V
+HSPLkotlin/collections/ArrayDeque;-><init>()V
+HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V
+HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V
+HSPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object;
+HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object;
+HSPLkotlin/collections/ArrayDeque;->getSize()I
+HSPLkotlin/collections/ArrayDeque;->incremented(I)I
+HSPLkotlin/collections/ArrayDeque;->isEmpty()Z
+HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I
+HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object;
+HSPLkotlin/collections/ArraysKt___ArraysKt;->asList([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/collections/ArraysKt___ArraysKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([I[III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([I[IIII)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill$default([Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill(II[Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
+HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->addAll(Ljava/lang/Iterable;Ljava/util/Collection;)V
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/List;Ljava/io/Serializable;)Ljava/util/ArrayList;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/ArrayList;)[I
+HSPLkotlin/collections/EmptyList;-><clinit>()V
+HSPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z
+HSPLkotlin/collections/EmptyList;->isEmpty()Z
+HSPLkotlin/collections/EmptyList;->size()I
+HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;
+HSPLkotlin/collections/EmptyMap;-><clinit>()V
+HSPLkotlin/collections/EmptyMap;->isEmpty()Z
+HSPLkotlin/collections/EmptyMap;->size()I
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(Lkotlin/coroutines/CoroutineContext$Key;)V
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><init>(I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V
+HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(ILjava/lang/String;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I
+HSPLkotlin/jvm/internal/ArrayIterator;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z
+HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V
+HSPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLkotlin/jvm/internal/ClassReference;-><clinit>()V
+HSPLkotlin/jvm/internal/ClassReference;-><init>(Ljava/lang/Class;)V
+HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class;
+HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/Lambda;-><init>(I)V
+HSPLkotlin/jvm/internal/Lambda;->getArity()I
+HSPLkotlin/jvm/internal/PropertyReference0Impl;->invoke()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/jvm/internal/Reflection;-><clinit>()V
+HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/jvm/internal/ClassReference;
+HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;-><init>(I)V
+HSPLkotlin/ranges/IntProgression;-><init>(III)V
+HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;
+HSPLkotlin/ranges/IntProgressionIterator;-><init>(III)V
+HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z
+HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I
+HSPLkotlin/ranges/IntRange;-><clinit>()V
+HSPLkotlin/ranges/IntRange;-><init>(II)V
+HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/ranges/IntRange;->isEmpty()Z
+HSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;)V
+HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(Lkotlin/sequences/FilteringSequence;)V
+HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V
+HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/SequencesKt;->firstOrNull(Lkotlin/sequences/FilteringSequence;)Ljava/lang/Object;
+HSPLkotlin/sequences/SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlinx/coroutines/CoroutineDispatcher$Key$1;)Lkotlin/sequences/FilteringSequence;
+HSPLkotlin/sequences/SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/text/StringsKt__IndentKt$getIndentFunction$2;-><init>(ILjava/lang/String;)V
+HSPLkotlin/text/StringsKt__RegexExtensionsKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
+HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/String;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I
+HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I
+HSPLkotlin/text/StringsKt__StringsKt;->isBlank(Ljava/lang/CharSequence;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast$default(Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C
+HSPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z
+HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/AbstractCoroutine;->start$enumunboxing$(ILkotlinx/coroutines/AbstractCoroutine;Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/Active;-><clinit>()V
+HSPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V
+HSPLkotlinx/coroutines/CancelHandler;-><init>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><clinit>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/CancelledContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/JobSupport;)V
+HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/CancellationException;I)V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><clinit>()V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Landroid/view/View;)Landroid/view/View;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V
+HSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V
+HSPLkotlinx/coroutines/DispatchedTask;-><init>(I)V
+HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/DispatchedTask;->run()V
+HSPLkotlinx/coroutines/Dispatchers;-><clinit>()V
+HSPLkotlinx/coroutines/Empty;-><init>(Z)V
+HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/Empty;->isActive()Z
+HSPLkotlinx/coroutines/EventLoopImplBase;-><clinit>()V
+HSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->decrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->incrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->isUnconfinedLoopActive()Z
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->processUnconfinedEvent()Z
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/InvokeOnCancel;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobNode;-><init>()V
+HSPLkotlinx/coroutines/JobNode;->dispose()V
+HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport;
+HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobNode;->isActive()Z
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/ArrayList;
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/JobSupport;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport;-><init>(Z)V
+HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z
+HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException;
+HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/ArrayList;)Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
+HSPLkotlinx/coroutines/JobSupport;->isActive()Z
+HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode;
+HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V
+HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/NodeList;-><init>()V
+HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/NodeList;->isActive()Z
+HSPLkotlinx/coroutines/NodeList;->isRemoved()Z
+HSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V
+HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoopImplPlatform;
+HSPLkotlinx/coroutines/Unconfined;-><clinit>()V
+HSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()V
+HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;)V
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V
+HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
+HSPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/jvm/internal/SuspendLambda;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><init>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
+HSPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V
+HSPLkotlinx/coroutines/channels/Channel;-><clinit>()V
+HSPLkotlinx/coroutines/channels/ChannelSegment;-><init>(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(Ljava/lang/Object;ILjava/lang/Object;)Z
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ChannelSegment;->setElementLazy(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILkotlinx/coroutines/internal/Symbol;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/SafeFlow;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;)V
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/flow/SafeFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;-><init>()V
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V
+HSPLkotlinx/coroutines/flow/SharingCommand;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>()V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->add(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->contains(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->find(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/flow/SharingConfig;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->removeScope(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet;
+HSPLkotlinx/coroutines/flow/StartedLazily;-><init>(I)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowSlot;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><clinit>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><init>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><init>(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+HSPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;I)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V
+HSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/internal/Segment;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Segment;-><init>(JLkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
+HSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Symbol;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V
+HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlin/ULong$Companion;)V
+HSPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;I)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/sync/MutexImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V
+HSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z
+HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><init>(I)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V
+HSPLkotlinx/coroutines/sync/SemaphoreKt;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;-><init>(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I
+HSPLokhttp3/Headers$Builder;-><init>()V
+HSPLokhttp3/Headers$Builder;->add(I)V
+HSPLokhttp3/Headers$Builder;->takeMax()I
+HSPLokhttp3/MediaType;-><clinit>()V
+HSPLokhttp3/MediaType;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;I)Lkotlinx/coroutines/channels/BufferedChannel;
+HSPLokhttp3/MediaType;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLokhttp3/MediaType;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->Offset(FF)J
+HSPLokhttp3/MediaType;->ParagraphIntrinsics(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+HSPLokhttp3/MediaType;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;
+HSPLokhttp3/MediaType;->TextRange(II)J
+HSPLokhttp3/MediaType;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->access$checkIndex(ILjava/util/List;)V
+HSPLokhttp3/MediaType;->access$containsMark([II)Z
+HSPLokhttp3/MediaType;->access$groupSize([II)I
+HSPLokhttp3/MediaType;->access$hasAux([II)Z
+HSPLokhttp3/MediaType;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z
+HSPLokhttp3/MediaType;->access$isNode([II)Z
+HSPLokhttp3/MediaType;->access$nodeCount([II)I
+HSPLokhttp3/MediaType;->access$slotAnchor([II)I
+HSPLokhttp3/MediaType;->access$updateGroupSize([III)V
+HSPLokhttp3/MediaType;->access$updateNodeCount([III)V
+HSPLokhttp3/MediaType;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+HSPLokhttp3/MediaType;->cancel(Lkotlinx/coroutines/CoroutineScope;Landroidx/lifecycle/LifecycleDestroyedException;)V
+HSPLokhttp3/MediaType;->ceilToIntPx(F)I
+HSPLokhttp3/MediaType;->checkParallelism(I)V
+HSPLokhttp3/MediaType;->chromaticAdaptation([F[F[F)[F
+HSPLokhttp3/MediaType;->coerceIn-8ffj60Q(IJ)J
+HSPLokhttp3/MediaType;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLokhttp3/MediaType;->colors-u3YEpmA(JJJJJJJJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/tv/material3/ToggleableSurfaceColors;
+HSPLokhttp3/MediaType;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z
+HSPLokhttp3/MediaType;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->countOneBits(I)I
+HSPLokhttp3/MediaType;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+HSPLokhttp3/MediaType;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;
+HSPLokhttp3/MediaType;->getCharSequenceBounds(Landroid/text/TextPaint;Ljava/lang/CharSequence;II)Landroid/graphics/Rect;
+HSPLokhttp3/MediaType;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLokhttp3/MediaType;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
+HSPLokhttp3/MediaType;->inverse3x3([F)[F
+HSPLokhttp3/MediaType;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZLkotlinx/coroutines/JobNode;I)Lkotlinx/coroutines/DisposableHandle;
+HSPLokhttp3/MediaType;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z
+HSPLokhttp3/MediaType;->isClosed-impl(Ljava/lang/Object;)Z
+HSPLokhttp3/MediaType;->mul3x3([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Diag([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Float3([F[F)V
+HSPLokhttp3/MediaType;->mul3x3Float3_0([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_1([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_2([FFFF)F
+HSPLokhttp3/MediaType;->search(Ljava/util/ArrayList;II)I
+HSPLokhttp3/MediaType;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V
+HSPLokhttp3/MediaType;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V
+HSPLokhttp3/MediaType;->shape(Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;Landroidx/compose/runtime/Composer;I)Landroidx/tv/material3/ToggleableSurfaceShape;
+HSPLokhttp3/MediaType;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;
+HSPLokhttp3/MediaType;->updateChangedFlags(I)I
+L_COROUTINE/ArtificialStackFrames;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
+Landroidx/activity/ComponentActivity$1;
+Landroidx/activity/ComponentActivity$2;
+Landroidx/activity/ComponentActivity$3;
+Landroidx/activity/ComponentActivity$4;
+Landroidx/activity/ComponentActivity$5;
+Landroidx/activity/ComponentActivity$NonConfigurationInstances;
+Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;
+Landroidx/activity/ComponentActivity;
+Landroidx/activity/FullyDrawnReporter;
+Landroidx/activity/OnBackPressedDispatcher;
+Landroidx/activity/compose/ComponentActivityKt;
+Landroidx/activity/contextaware/ContextAwareHelper;
+Landroidx/activity/result/ActivityResult$1;
+Landroidx/arch/core/executor/ArchTaskExecutor;
+Landroidx/arch/core/executor/DefaultTaskExecutor$1;
+Landroidx/arch/core/executor/DefaultTaskExecutor;
+Landroidx/arch/core/internal/FastSafeIterableMap;
+Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
+Landroidx/arch/core/internal/SafeIterableMap$Entry;
+Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
+Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
+Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
+Landroidx/arch/core/internal/SafeIterableMap;
+Landroidx/collection/ArrayMap;
+Landroidx/collection/ArraySet;
+Landroidx/collection/LongSparseArray;
+Landroidx/collection/SimpleArrayMap;
+Landroidx/collection/SparseArrayCompat;
+Landroidx/compose/animation/FlingCalculator;
+Landroidx/compose/animation/FlingCalculatorKt;
+Landroidx/compose/animation/SingleValueAnimationKt;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
+Landroidx/compose/animation/core/Animatable$runAnimation$2;
+Landroidx/compose/animation/core/Animatable;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;
+Landroidx/compose/animation/core/AnimateAsStateKt;
+Landroidx/compose/animation/core/Animation;
+Landroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;
+Landroidx/compose/animation/core/AnimationResult;
+Landroidx/compose/animation/core/AnimationScope;
+Landroidx/compose/animation/core/AnimationSpec;
+Landroidx/compose/animation/core/AnimationState;
+Landroidx/compose/animation/core/AnimationVector1D;
+Landroidx/compose/animation/core/AnimationVector2D;
+Landroidx/compose/animation/core/AnimationVector3D;
+Landroidx/compose/animation/core/AnimationVector4D;
+Landroidx/compose/animation/core/AnimationVector;
+Landroidx/compose/animation/core/Animations;
+Landroidx/compose/animation/core/ComplexDouble;
+Landroidx/compose/animation/core/CubicBezierEasing;
+Landroidx/compose/animation/core/DecayAnimationSpecImpl;
+Landroidx/compose/animation/core/Easing;
+Landroidx/compose/animation/core/EasingKt$$ExternalSyntheticLambda0;
+Landroidx/compose/animation/core/EasingKt;
+Landroidx/compose/animation/core/FloatAnimationSpec;
+Landroidx/compose/animation/core/FloatDecayAnimationSpec;
+Landroidx/compose/animation/core/FloatSpringSpec;
+Landroidx/compose/animation/core/FloatTweenSpec;
+Landroidx/compose/animation/core/MutatorMutex$Mutator;
+Landroidx/compose/animation/core/MutatorMutex$mutate$2;
+Landroidx/compose/animation/core/MutatorMutex;
+Landroidx/compose/animation/core/SpringSimulation;
+Landroidx/compose/animation/core/SpringSpec;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$6;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$7;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$9;
+Landroidx/compose/animation/core/TargetBasedAnimation;
+Landroidx/compose/animation/core/TweenSpec;
+Landroidx/compose/animation/core/TwoWayConverterImpl;
+Landroidx/compose/animation/core/VectorConvertersKt;
+Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFloatAnimationSpec;
+Landroidx/compose/animation/core/VectorizedSpringSpec;
+Landroidx/compose/animation/core/VectorizedTweenSpec;
+Landroidx/compose/animation/core/VisibilityThresholdsKt;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;
+Landroidx/compose/foundation/AndroidOverscrollKt;
+Landroidx/compose/foundation/Api31Impl;
+Landroidx/compose/foundation/BackgroundElement;
+Landroidx/compose/foundation/BackgroundNode;
+Landroidx/compose/foundation/BorderCache;
+Landroidx/compose/foundation/BorderKt$drawRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode$drawGenericBorder$3;
+Landroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode;
+Landroidx/compose/foundation/BorderModifierNodeElement;
+Landroidx/compose/foundation/BorderStroke;
+Landroidx/compose/foundation/ClipScrollableContainerKt;
+Landroidx/compose/foundation/DrawOverscrollModifier;
+Landroidx/compose/foundation/FocusableElement;
+Landroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;
+Landroidx/compose/foundation/FocusableInteractionNode;
+Landroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;
+Landroidx/compose/foundation/FocusableKt;
+Landroidx/compose/foundation/FocusableNode$onFocusEvent$1;
+Landroidx/compose/foundation/FocusableNode;
+Landroidx/compose/foundation/FocusablePinnableContainerNode;
+Landroidx/compose/foundation/FocusableSemanticsNode;
+Landroidx/compose/foundation/FocusedBoundsKt;
+Landroidx/compose/foundation/FocusedBoundsNode;
+Landroidx/compose/foundation/FocusedBoundsObserverNode;
+Landroidx/compose/foundation/ImageKt$Image$1$1;
+Landroidx/compose/foundation/ImageKt$Image$1;
+Landroidx/compose/foundation/ImageKt$Image$2;
+Landroidx/compose/foundation/ImageKt;
+Landroidx/compose/foundation/Indication;
+Landroidx/compose/foundation/IndicationInstance;
+Landroidx/compose/foundation/IndicationKt$indication$2;
+Landroidx/compose/foundation/IndicationKt;
+Landroidx/compose/foundation/IndicationModifier;
+Landroidx/compose/foundation/MutatePriority;
+Landroidx/compose/foundation/MutatorMutex$Mutator;
+Landroidx/compose/foundation/MutatorMutex$mutateWith$2;
+Landroidx/compose/foundation/MutatorMutex;
+Landroidx/compose/foundation/OverscrollConfiguration;
+Landroidx/compose/foundation/OverscrollConfigurationKt;
+Landroidx/compose/foundation/OverscrollEffect;
+Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2;
+Landroidx/compose/foundation/ScrollState$canScrollForward$2;
+Landroidx/compose/foundation/ScrollState;
+Landroidx/compose/foundation/ScrollingLayoutElement;
+Landroidx/compose/foundation/ScrollingLayoutNode;
+Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec;
+Landroidx/compose/foundation/gestures/ContentInViewNode$Request;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;
+Landroidx/compose/foundation/gestures/ContentInViewNode;
+Landroidx/compose/foundation/gestures/DefaultFlingBehavior;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState;
+Landroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;
+Landroidx/compose/foundation/gestures/DraggableNode$onAttach$1;
+Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;
+Landroidx/compose/foundation/gestures/DraggableNode;
+Landroidx/compose/foundation/gestures/FlingBehavior;
+Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode$1;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode;
+Landroidx/compose/foundation/gestures/Orientation;
+Landroidx/compose/foundation/gestures/ScrollDraggableState;
+Landroidx/compose/foundation/gestures/ScrollScope;
+Landroidx/compose/foundation/gestures/ScrollableElement;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode;
+Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;
+Landroidx/compose/foundation/gestures/ScrollableKt;
+Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;
+Landroidx/compose/foundation/gestures/ScrollableNode;
+Landroidx/compose/foundation/gestures/ScrollableState;
+Landroidx/compose/foundation/gestures/ScrollingLogic;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState;
+Landroidx/compose/foundation/interaction/FocusInteraction$Focus;
+Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;
+Landroidx/compose/foundation/interaction/Interaction;
+Landroidx/compose/foundation/interaction/InteractionSource;
+Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;
+Landroidx/compose/foundation/interaction/PressInteraction$Press;
+Landroidx/compose/foundation/interaction/PressInteraction$Release;
+Landroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;
+Landroidx/compose/foundation/layout/Arrangement$Center$1;
+Landroidx/compose/foundation/layout/Arrangement$End$1;
+Landroidx/compose/foundation/layout/Arrangement$Horizontal;
+Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;
+Landroidx/compose/foundation/layout/Arrangement$Top$1;
+Landroidx/compose/foundation/layout/Arrangement$Vertical;
+Landroidx/compose/foundation/layout/Arrangement;
+Landroidx/compose/foundation/layout/BoxKt$Box$2;
+Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt;
+Landroidx/compose/foundation/layout/BoxScope;
+Landroidx/compose/foundation/layout/BoxScopeInstance;
+Landroidx/compose/foundation/layout/ColumnKt;
+Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;
+Landroidx/compose/foundation/layout/FillElement;
+Landroidx/compose/foundation/layout/FillNode;
+Landroidx/compose/foundation/layout/HorizontalAlignElement;
+Landroidx/compose/foundation/layout/HorizontalAlignNode;
+Landroidx/compose/foundation/layout/OffsetElement;
+Landroidx/compose/foundation/layout/OffsetKt;
+Landroidx/compose/foundation/layout/OffsetNode$measure$1;
+Landroidx/compose/foundation/layout/OffsetNode;
+Landroidx/compose/foundation/layout/PaddingElement;
+Landroidx/compose/foundation/layout/PaddingNode;
+Landroidx/compose/foundation/layout/PaddingValuesImpl;
+Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
+Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;
+Landroidx/compose/foundation/layout/RowColumnParentData;
+Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;
+Landroidx/compose/foundation/layout/RowKt;
+Landroidx/compose/foundation/layout/RowScope;
+Landroidx/compose/foundation/layout/RowScopeInstance;
+Landroidx/compose/foundation/layout/SizeElement;
+Landroidx/compose/foundation/layout/SizeKt;
+Landroidx/compose/foundation/layout/SizeNode;
+Landroidx/compose/foundation/layout/SpacerMeasurePolicy;
+Landroidx/compose/foundation/layout/WrapContentElement;
+Landroidx/compose/foundation/layout/WrapContentNode$measure$1;
+Landroidx/compose/foundation/layout/WrapContentNode;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyKey;
+Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
+Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+Landroidx/compose/foundation/relocation/BringIntoViewChildNode;
+Landroidx/compose/foundation/relocation/BringIntoViewKt;
+Landroidx/compose/foundation/relocation/BringIntoViewParent;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;
+Landroidx/compose/foundation/shape/CornerBasedShape;
+Landroidx/compose/foundation/shape/CornerSize;
+Landroidx/compose/foundation/shape/DpCornerSize;
+Landroidx/compose/foundation/shape/GenericShape;
+Landroidx/compose/foundation/shape/PercentCornerSize;
+Landroidx/compose/foundation/shape/RoundedCornerShape;
+Landroidx/compose/foundation/shape/RoundedCornerShapeKt;
+Landroidx/compose/foundation/text/EmptyMeasurePolicy;
+Landroidx/compose/foundation/text/modifiers/InlineDensity;
+Landroidx/compose/foundation/text/modifiers/MinLinesConstrainer;
+Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;
+Landroidx/compose/foundation/text/selection/SelectionRegistrarKt;
+Landroidx/compose/foundation/text/selection/TextSelectionColors;
+Landroidx/compose/foundation/text/selection/TextSelectionColorsKt;
+Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;
+Landroidx/compose/material/ripple/PlatformRipple;
+Landroidx/compose/material/ripple/RippleAlpha;
+Landroidx/compose/material/ripple/RippleIndicationInstance;
+Landroidx/compose/material/ripple/RippleKt;
+Landroidx/compose/material/ripple/RippleTheme;
+Landroidx/compose/material/ripple/RippleThemeKt;
+Landroidx/compose/material3/ColorScheme;
+Landroidx/compose/material3/ColorSchemeKt;
+Landroidx/compose/material3/MaterialRippleTheme;
+Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;
+Landroidx/compose/material3/ShapeDefaults;
+Landroidx/compose/material3/Shapes;
+Landroidx/compose/material3/ShapesKt$LocalShapes$1;
+Landroidx/compose/material3/ShapesKt;
+Landroidx/compose/material3/TextKt$ProvideTextStyle$1;
+Landroidx/compose/material3/TextKt$Text$1;
+Landroidx/compose/material3/TextKt;
+Landroidx/compose/material3/Typography;
+Landroidx/compose/material3/TypographyKt;
+Landroidx/compose/material3/tokens/ColorDarkTokens;
+Landroidx/compose/material3/tokens/PaletteTokens;
+Landroidx/compose/material3/tokens/ShapeTokens;
+Landroidx/compose/material3/tokens/TypeScaleTokens;
+Landroidx/compose/material3/tokens/TypefaceTokens;
+Landroidx/compose/material3/tokens/TypographyTokens;
+Landroidx/compose/runtime/Anchor;
+Landroidx/compose/runtime/Applier;
+Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;
+Landroidx/compose/runtime/BroadcastFrameClock;
+Landroidx/compose/runtime/ComposableSingletons$CompositionKt;
+Landroidx/compose/runtime/ComposeNodeLifecycleCallback;
+Landroidx/compose/runtime/Composer;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
+Landroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;
+Landroidx/compose/runtime/ComposerImpl;
+Landroidx/compose/runtime/Composition;
+Landroidx/compose/runtime/CompositionContext;
+Landroidx/compose/runtime/CompositionContextKt;
+Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;
+Landroidx/compose/runtime/CompositionImpl;
+Landroidx/compose/runtime/CompositionKt;
+Landroidx/compose/runtime/CompositionLocal;
+Landroidx/compose/runtime/CompositionLocalMap$Companion;
+Landroidx/compose/runtime/CompositionLocalMap;
+Landroidx/compose/runtime/CompositionObserverHolder;
+Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;
+Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+Landroidx/compose/runtime/DerivedSnapshotState;
+Landroidx/compose/runtime/DerivedStateObserver;
+Landroidx/compose/runtime/DisposableEffectImpl;
+Landroidx/compose/runtime/DisposableEffectResult;
+Landroidx/compose/runtime/DisposableEffectScope;
+Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
+Landroidx/compose/runtime/GroupInfo;
+Landroidx/compose/runtime/IntStack;
+Landroidx/compose/runtime/Invalidation;
+Landroidx/compose/runtime/JoinedKey;
+Landroidx/compose/runtime/KeyInfo;
+Landroidx/compose/runtime/Latch$await$2$2;
+Landroidx/compose/runtime/Latch;
+Landroidx/compose/runtime/LaunchedEffectImpl;
+Landroidx/compose/runtime/LazyValueHolder;
+Landroidx/compose/runtime/MonotonicFrameClock;
+Landroidx/compose/runtime/MovableContentStateReference;
+Landroidx/compose/runtime/MutableFloatState;
+Landroidx/compose/runtime/MutableIntState;
+Landroidx/compose/runtime/MutableState;
+Landroidx/compose/runtime/OpaqueKey;
+Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableIntState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;
+Landroidx/compose/runtime/PausableMonotonicFrameClock;
+Landroidx/compose/runtime/Pending$keyMap$2;
+Landroidx/compose/runtime/Pending;
+Landroidx/compose/runtime/PersistentCompositionLocalMap;
+Landroidx/compose/runtime/ProduceStateScopeImpl;
+Landroidx/compose/runtime/ProvidableCompositionLocal;
+Landroidx/compose/runtime/ProvidedValue;
+Landroidx/compose/runtime/RecomposeScope;
+Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;
+Landroidx/compose/runtime/RecomposeScopeImpl;
+Landroidx/compose/runtime/RecomposeScopeOwner;
+Landroidx/compose/runtime/Recomposer$State;
+Landroidx/compose/runtime/Recomposer$effectJob$1$1;
+Landroidx/compose/runtime/Recomposer$join$2;
+Landroidx/compose/runtime/Recomposer$performRecompose$1$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$3;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;
+Landroidx/compose/runtime/Recomposer;
+Landroidx/compose/runtime/ReferentialEqualityPolicy;
+Landroidx/compose/runtime/RememberObserver;
+Landroidx/compose/runtime/SkippableUpdater;
+Landroidx/compose/runtime/SlotReader;
+Landroidx/compose/runtime/SlotTable;
+Landroidx/compose/runtime/SlotWriter;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl;
+Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableStateImpl;
+Landroidx/compose/runtime/SnapshotMutationPolicy;
+Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;
+Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;
+Landroidx/compose/runtime/Stack;
+Landroidx/compose/runtime/State;
+Landroidx/compose/runtime/StaticProvidableCompositionLocal;
+Landroidx/compose/runtime/StaticValueHolder;
+Landroidx/compose/runtime/StructuralEqualityPolicy;
+Landroidx/compose/runtime/WeakReference;
+Landroidx/compose/runtime/changelist/ChangeList;
+Landroidx/compose/runtime/changelist/ComposerChangeListWriter;
+Landroidx/compose/runtime/changelist/FixupList;
+Landroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;
+Landroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$Downs;
+Landroidx/compose/runtime/changelist/Operation$EndCompositionScope;
+Landroidx/compose/runtime/changelist/Operation$EndCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$InsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$InsertSlots;
+Landroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;
+Landroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$Remember;
+Landroidx/compose/runtime/changelist/Operation$SideEffect;
+Landroidx/compose/runtime/changelist/Operation$UpdateAuxData;
+Landroidx/compose/runtime/changelist/Operation$UpdateNode;
+Landroidx/compose/runtime/changelist/Operation$UpdateValue;
+Landroidx/compose/runtime/changelist/Operation$Ups;
+Landroidx/compose/runtime/changelist/Operation$UseCurrentNode;
+Landroidx/compose/runtime/changelist/Operation;
+Landroidx/compose/runtime/changelist/Operations$OpIterator;
+Landroidx/compose/runtime/changelist/Operations;
+Landroidx/compose/runtime/collection/IdentityArrayIntMap;
+Landroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;
+Landroidx/compose/runtime/collection/IdentityArraySet;
+Landroidx/compose/runtime/collection/MutableVector$MutableVectorList;
+Landroidx/compose/runtime/collection/MutableVector$VectorListIterator;
+Landroidx/compose/runtime/collection/MutableVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;
+Landroidx/compose/runtime/internal/ComposableLambda;
+Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+Landroidx/compose/runtime/internal/ThreadMap;
+Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;
+Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;
+Landroidx/compose/runtime/saveable/SaveableHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistry;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryKt;
+Landroidx/compose/runtime/saveable/SaverKt$Saver$1;
+Landroidx/compose/runtime/saveable/SaverKt;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot;
+Landroidx/compose/runtime/snapshots/MutableSnapshot;
+Landroidx/compose/runtime/snapshots/ObserverHandle;
+Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
+Landroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/runtime/snapshots/Snapshot;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;
+Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;
+Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;
+Landroidx/compose/runtime/snapshots/SnapshotKt;
+Landroidx/compose/runtime/snapshots/SnapshotMutableState;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;
+Landroidx/compose/runtime/snapshots/SnapshotStateList;
+Landroidx/compose/runtime/snapshots/SnapshotStateListKt;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver;
+Landroidx/compose/runtime/snapshots/StateObject;
+Landroidx/compose/runtime/snapshots/StateRecord;
+Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
+Landroidx/compose/runtime/tooling/InspectionTablesKt;
+Landroidx/compose/ui/Alignment$Horizontal;
+Landroidx/compose/ui/Alignment$Vertical;
+Landroidx/compose/ui/Alignment;
+Landroidx/compose/ui/BiasAlignment$Horizontal;
+Landroidx/compose/ui/BiasAlignment$Vertical;
+Landroidx/compose/ui/BiasAlignment;
+Landroidx/compose/ui/CombinedModifier$toString$1;
+Landroidx/compose/ui/CombinedModifier;
+Landroidx/compose/ui/ComposedModifier;
+Landroidx/compose/ui/CompositionLocalMapInjectionElement;
+Landroidx/compose/ui/Modifier$Companion;
+Landroidx/compose/ui/Modifier$Element;
+Landroidx/compose/ui/Modifier$Node;
+Landroidx/compose/ui/Modifier;
+Landroidx/compose/ui/MotionDurationScale;
+Landroidx/compose/ui/ZIndexElement;
+Landroidx/compose/ui/ZIndexNode$measure$1;
+Landroidx/compose/ui/ZIndexNode;
+Landroidx/compose/ui/autofill/AndroidAutofill;
+Landroidx/compose/ui/autofill/Autofill;
+Landroidx/compose/ui/autofill/AutofillCallback;
+Landroidx/compose/ui/autofill/AutofillTree;
+Landroidx/compose/ui/draw/BuildDrawCacheParams;
+Landroidx/compose/ui/draw/CacheDrawModifierNode;
+Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;
+Landroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;
+Landroidx/compose/ui/draw/CacheDrawScope;
+Landroidx/compose/ui/draw/ClipKt;
+Landroidx/compose/ui/draw/DrawModifier;
+Landroidx/compose/ui/draw/DrawResult;
+Landroidx/compose/ui/draw/DrawWithCacheElement;
+Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams;
+Landroidx/compose/ui/draw/PainterElement;
+Landroidx/compose/ui/draw/PainterNode$measure$1;
+Landroidx/compose/ui/draw/PainterNode;
+Landroidx/compose/ui/focus/FocusChangedElement;
+Landroidx/compose/ui/focus/FocusChangedNode;
+Landroidx/compose/ui/focus/FocusDirection;
+Landroidx/compose/ui/focus/FocusEventModifierNode;
+Landroidx/compose/ui/focus/FocusInvalidationManager;
+Landroidx/compose/ui/focus/FocusModifierKt;
+Landroidx/compose/ui/focus/FocusOwner;
+Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl;
+Landroidx/compose/ui/focus/FocusProperties$exit$1;
+Landroidx/compose/ui/focus/FocusProperties;
+Landroidx/compose/ui/focus/FocusPropertiesImpl;
+Landroidx/compose/ui/focus/FocusPropertiesModifierNode;
+Landroidx/compose/ui/focus/FocusRequester;
+Landroidx/compose/ui/focus/FocusRequesterModifierNode;
+Landroidx/compose/ui/focus/FocusState;
+Landroidx/compose/ui/focus/FocusStateImpl;
+Landroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;
+Landroidx/compose/ui/focus/FocusTargetNode;
+Landroidx/compose/ui/geometry/CornerRadius;
+Landroidx/compose/ui/geometry/MutableRect;
+Landroidx/compose/ui/geometry/Offset;
+Landroidx/compose/ui/geometry/Rect;
+Landroidx/compose/ui/geometry/RoundRect;
+Landroidx/compose/ui/geometry/Size;
+Landroidx/compose/ui/graphics/AndroidCanvas;
+Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;
+Landroidx/compose/ui/graphics/AndroidImageBitmap;
+Landroidx/compose/ui/graphics/AndroidPaint;
+Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;
+Landroidx/compose/ui/graphics/AndroidPath;
+Landroidx/compose/ui/graphics/BlendModeColorFilter;
+Landroidx/compose/ui/graphics/BlendModeColorFilterHelper;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerElement;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/Brush;
+Landroidx/compose/ui/graphics/BrushKt$ShaderBrush$1;
+Landroidx/compose/ui/graphics/BrushKt;
+Landroidx/compose/ui/graphics/Canvas;
+Landroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/graphics/Color;
+Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/Float16;
+Landroidx/compose/ui/graphics/GraphicsLayerElement;
+Landroidx/compose/ui/graphics/GraphicsLayerScopeKt;
+Landroidx/compose/ui/graphics/ImageBitmap;
+Landroidx/compose/ui/graphics/ImageBitmapConfig;
+Landroidx/compose/ui/graphics/Matrix;
+Landroidx/compose/ui/graphics/Outline$Generic;
+Landroidx/compose/ui/graphics/Outline$Rectangle;
+Landroidx/compose/ui/graphics/Outline$Rounded;
+Landroidx/compose/ui/graphics/Path;
+Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;
+Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
+Landroidx/compose/ui/graphics/Shadow;
+Landroidx/compose/ui/graphics/Shape;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/SolidColor;
+Landroidx/compose/ui/graphics/TransformOrigin;
+Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;
+Landroidx/compose/ui/graphics/colorspace/Adaptation;
+Landroidx/compose/ui/graphics/colorspace/ColorModel;
+Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+Landroidx/compose/ui/graphics/colorspace/ColorSpaces;
+Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;
+Landroidx/compose/ui/graphics/colorspace/Connector;
+Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
+Landroidx/compose/ui/graphics/colorspace/Lab;
+Landroidx/compose/ui/graphics/colorspace/Oklab;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;
+Landroidx/compose/ui/graphics/colorspace/Rgb;
+Landroidx/compose/ui/graphics/colorspace/TransferParameters;
+Landroidx/compose/ui/graphics/colorspace/WhitePoint;
+Landroidx/compose/ui/graphics/colorspace/Xyz;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;
+Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
+Landroidx/compose/ui/graphics/drawscope/DrawScope;
+Landroidx/compose/ui/graphics/drawscope/EmptyCanvas;
+Landroidx/compose/ui/graphics/drawscope/Fill;
+Landroidx/compose/ui/graphics/drawscope/Stroke;
+Landroidx/compose/ui/graphics/painter/BitmapPainter;
+Landroidx/compose/ui/graphics/painter/Painter;
+Landroidx/compose/ui/graphics/vector/GroupComponent;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
+Landroidx/compose/ui/graphics/vector/ImageVector;
+Landroidx/compose/ui/graphics/vector/VNode;
+Landroidx/compose/ui/graphics/vector/VectorComponent;
+Landroidx/compose/ui/graphics/vector/VectorGroup;
+Landroidx/compose/ui/graphics/vector/VectorKt;
+Landroidx/compose/ui/graphics/vector/VectorNode;
+Landroidx/compose/ui/graphics/vector/VectorPainter;
+Landroidx/compose/ui/graphics/vector/VectorPath;
+Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;
+Landroidx/compose/ui/hapticfeedback/HapticFeedback;
+Landroidx/compose/ui/input/InputMode;
+Landroidx/compose/ui/input/InputModeManager;
+Landroidx/compose/ui/input/InputModeManagerImpl;
+Landroidx/compose/ui/input/key/Key;
+Landroidx/compose/ui/input/key/KeyEvent;
+Landroidx/compose/ui/input/key/KeyInputElement;
+Landroidx/compose/ui/input/key/KeyInputModifierNode;
+Landroidx/compose/ui/input/key/KeyInputNode;
+Landroidx/compose/ui/input/key/Key_androidKt;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;
+Landroidx/compose/ui/input/pointer/AndroidPointerIconType;
+Landroidx/compose/ui/input/pointer/MotionEventAdapter;
+Landroidx/compose/ui/input/pointer/Node;
+Landroidx/compose/ui/input/pointer/NodeParent;
+Landroidx/compose/ui/input/pointer/PointerEvent;
+Landroidx/compose/ui/input/pointer/PointerIcon;
+Landroidx/compose/ui/input/pointer/PointerIconService;
+Landroidx/compose/ui/input/pointer/PointerInputChange;
+Landroidx/compose/ui/input/pointer/PointerInputScope;
+Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
+Landroidx/compose/ui/input/pointer/PositionCalculator;
+Landroidx/compose/ui/input/pointer/SuspendPointerInputElement;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;
+Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
+Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker1D;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker;
+Landroidx/compose/ui/input/rotary/RotaryInputElement;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierKt;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierNode;
+Landroidx/compose/ui/input/rotary/RotaryInputNode;
+Landroidx/compose/ui/layout/AlignmentLine;
+Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt;
+Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;
+Landroidx/compose/ui/layout/BeyondBoundsLayout;
+Landroidx/compose/ui/layout/BeyondBoundsLayoutKt;
+Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;
+Landroidx/compose/ui/layout/ContentScale;
+Landroidx/compose/ui/layout/DefaultIntrinsicMeasurable;
+Landroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;
+Landroidx/compose/ui/layout/HorizontalAlignmentLine;
+Landroidx/compose/ui/layout/IntrinsicMeasureScope;
+Landroidx/compose/ui/layout/IntrinsicMinMax;
+Landroidx/compose/ui/layout/IntrinsicWidthHeight;
+Landroidx/compose/ui/layout/IntrinsicsMeasureScope;
+Landroidx/compose/ui/layout/LayoutCoordinates;
+Landroidx/compose/ui/layout/LayoutElement;
+Landroidx/compose/ui/layout/LayoutKt$materializerOf$1;
+Landroidx/compose/ui/layout/LayoutKt;
+Landroidx/compose/ui/layout/LayoutModifierImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+Landroidx/compose/ui/layout/LookaheadLayoutCoordinates;
+Landroidx/compose/ui/layout/Measurable;
+Landroidx/compose/ui/layout/MeasurePolicy;
+Landroidx/compose/ui/layout/MeasureResult;
+Landroidx/compose/ui/layout/MeasureScope$layout$1;
+Landroidx/compose/ui/layout/MeasureScope;
+Landroidx/compose/ui/layout/Measured;
+Landroidx/compose/ui/layout/OnRemeasuredModifier;
+Landroidx/compose/ui/layout/OnSizeChangedModifier;
+Landroidx/compose/ui/layout/PinnableContainerKt;
+Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;
+Landroidx/compose/ui/layout/Placeable$PlacementScope;
+Landroidx/compose/ui/layout/Placeable;
+Landroidx/compose/ui/layout/PlaceableKt;
+Landroidx/compose/ui/layout/Remeasurement;
+Landroidx/compose/ui/layout/RemeasurementModifier;
+Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2;
+Landroidx/compose/ui/layout/RootMeasurePolicy;
+Landroidx/compose/ui/layout/ScaleFactor;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState;
+Landroidx/compose/ui/layout/SubcomposeMeasureScope;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
+Landroidx/compose/ui/modifier/BackwardsCompatLocalMap;
+Landroidx/compose/ui/modifier/EmptyMap;
+Landroidx/compose/ui/modifier/ModifierLocal;
+Landroidx/compose/ui/modifier/ModifierLocalConsumer;
+Landroidx/compose/ui/modifier/ModifierLocalManager;
+Landroidx/compose/ui/modifier/ModifierLocalModifierNode;
+Landroidx/compose/ui/modifier/ModifierLocalProvider;
+Landroidx/compose/ui/modifier/ModifierLocalReadScope;
+Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+Landroidx/compose/ui/modifier/SingleLocalMap;
+Landroidx/compose/ui/node/AlignmentLines;
+Landroidx/compose/ui/node/AlignmentLinesOwner;
+Landroidx/compose/ui/node/BackwardsCompatNode;
+Landroidx/compose/ui/node/CanFocusChecker;
+Landroidx/compose/ui/node/ComposeUiNode$Companion;
+Landroidx/compose/ui/node/ComposeUiNode;
+Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;
+Landroidx/compose/ui/node/DelegatableNode;
+Landroidx/compose/ui/node/DelegatingNode;
+Landroidx/compose/ui/node/DrawModifierNode;
+Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;
+Landroidx/compose/ui/node/HitTestResult;
+Landroidx/compose/ui/node/InnerNodeCoordinator;
+Landroidx/compose/ui/node/IntrinsicsPolicy;
+Landroidx/compose/ui/node/LayerPositionalProperties;
+Landroidx/compose/ui/node/LayoutAwareModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;
+Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;
+Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;
+Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;
+Landroidx/compose/ui/node/LayoutNode$WhenMappings;
+Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;
+Landroidx/compose/ui/node/LayoutNode;
+Landroidx/compose/ui/node/LayoutNodeDrawScope;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
+Landroidx/compose/ui/node/LookaheadAlignmentLines;
+Landroidx/compose/ui/node/LookaheadCapablePlaceable;
+Landroidx/compose/ui/node/LookaheadDelegate;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate;
+Landroidx/compose/ui/node/ModifierNodeElement;
+Landroidx/compose/ui/node/NodeChain$Differ;
+Landroidx/compose/ui/node/NodeChain;
+Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
+Landroidx/compose/ui/node/NodeChainKt;
+Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
+Landroidx/compose/ui/node/NodeCoordinator$invoke$1;
+Landroidx/compose/ui/node/NodeCoordinator;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;
+Landroidx/compose/ui/node/ObserverModifierNode;
+Landroidx/compose/ui/node/ObserverNodeOwnerScope;
+Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;
+Landroidx/compose/ui/node/OnPositionedDispatcher;
+Landroidx/compose/ui/node/OwnedLayer;
+Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;
+Landroidx/compose/ui/node/Owner;
+Landroidx/compose/ui/node/OwnerScope;
+Landroidx/compose/ui/node/OwnerSnapshotObserver;
+Landroidx/compose/ui/node/ParentDataModifierNode;
+Landroidx/compose/ui/node/PointerInputModifierNode;
+Landroidx/compose/ui/node/RootForTest;
+Landroidx/compose/ui/node/SemanticsModifierNode;
+Landroidx/compose/ui/node/TailModifierNode;
+Landroidx/compose/ui/node/TreeSet;
+Landroidx/compose/ui/node/UiApplier;
+Landroidx/compose/ui/platform/AbstractComposeView;
+Landroidx/compose/ui/platform/AccessibilityManager;
+Landroidx/compose/ui/platform/AndroidAccessibilityManager;
+Landroidx/compose/ui/platform/AndroidClipboardManager;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;
+Landroidx/compose/ui/platform/AndroidComposeView$AndroidComposeViewTranslationCallback;
+Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;
+Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;
+Landroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;
+Landroidx/compose/ui/platform/AndroidComposeView;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeeded$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;
+Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;
+Landroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;
+Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;
+Landroidx/compose/ui/platform/AndroidUiDispatcher;
+Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;
+Landroidx/compose/ui/platform/AndroidUiFrameClock;
+Landroidx/compose/ui/platform/AndroidUriHandler;
+Landroidx/compose/ui/platform/AndroidViewConfiguration;
+Landroidx/compose/ui/platform/CalculateMatrixToWindow;
+Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29;
+Landroidx/compose/ui/platform/ClipboardManager;
+Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;
+Landroidx/compose/ui/platform/ComposeView;
+Landroidx/compose/ui/platform/CompositionLocalsKt;
+Landroidx/compose/ui/platform/DeviceRenderNode;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;
+Landroidx/compose/ui/platform/DrawChildContainer;
+Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;
+Landroidx/compose/ui/platform/GlobalSnapshotManager;
+Landroidx/compose/ui/platform/InspectableModifier$End;
+Landroidx/compose/ui/platform/InspectableModifier;
+Landroidx/compose/ui/platform/LayerMatrixCache;
+Landroidx/compose/ui/platform/MotionDurationScaleImpl;
+Landroidx/compose/ui/platform/OutlineResolver;
+Landroidx/compose/ui/platform/RenderNodeApi29;
+Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;
+Landroidx/compose/ui/platform/RenderNodeLayer;
+Landroidx/compose/ui/platform/ScrollObservationScope;
+Landroidx/compose/ui/platform/SoftwareKeyboardController;
+Landroidx/compose/ui/platform/TextToolbar;
+Landroidx/compose/ui/platform/UriHandler;
+Landroidx/compose/ui/platform/ViewCompositionStrategy;
+Landroidx/compose/ui/platform/ViewConfiguration;
+Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;
+Landroidx/compose/ui/platform/ViewLayer;
+Landroidx/compose/ui/platform/ViewLayerContainer;
+Landroidx/compose/ui/platform/WeakCache;
+Landroidx/compose/ui/platform/WindowInfo;
+Landroidx/compose/ui/platform/WindowInfoImpl;
+Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/platform/WindowRecomposerFactory;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1;
+Landroidx/compose/ui/platform/WrappedComposition;
+Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;
+Landroidx/compose/ui/platform/WrapperVerificationHelperMethods;
+Landroidx/compose/ui/platform/Wrapper_androidKt;
+Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;
+Landroidx/compose/ui/res/ImageVectorCache$Key;
+Landroidx/compose/ui/res/ImageVectorCache;
+Landroidx/compose/ui/semantics/AppendedSemanticsElement;
+Landroidx/compose/ui/semantics/CollectionInfo;
+Landroidx/compose/ui/semantics/CoreSemanticsModifierNode;
+Landroidx/compose/ui/semantics/EmptySemanticsElement;
+Landroidx/compose/ui/semantics/EmptySemanticsModifier;
+Landroidx/compose/ui/semantics/Role;
+Landroidx/compose/ui/semantics/ScrollAxisRange;
+Landroidx/compose/ui/semantics/SemanticsConfiguration;
+Landroidx/compose/ui/semantics/SemanticsModifier;
+Landroidx/compose/ui/semantics/SemanticsModifierKt;
+Landroidx/compose/ui/semantics/SemanticsNode;
+Landroidx/compose/ui/semantics/SemanticsOwner;
+Landroidx/compose/ui/semantics/SemanticsProperties;
+Landroidx/compose/ui/semantics/SemanticsPropertiesKt;
+Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;
+Landroidx/compose/ui/text/AndroidParagraph;
+Landroidx/compose/ui/text/AnnotatedString$Range;
+Landroidx/compose/ui/text/AnnotatedString;
+Landroidx/compose/ui/text/AnnotatedStringKt;
+Landroidx/compose/ui/text/EmojiSupportMatch;
+Landroidx/compose/ui/text/MultiParagraph;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsicInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphStyle;
+Landroidx/compose/ui/text/ParagraphStyleKt;
+Landroidx/compose/ui/text/PlatformParagraphStyle;
+Landroidx/compose/ui/text/PlatformTextStyle;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$1;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$2;
+Landroidx/compose/ui/text/SaversKt;
+Landroidx/compose/ui/text/SpanStyle;
+Landroidx/compose/ui/text/SpanStyleKt;
+Landroidx/compose/ui/text/TextLayoutInput;
+Landroidx/compose/ui/text/TextLayoutResult;
+Landroidx/compose/ui/text/TextRange;
+Landroidx/compose/ui/text/TextStyle;
+Landroidx/compose/ui/text/TtsAnnotation;
+Landroidx/compose/ui/text/UrlAnnotation;
+Landroidx/compose/ui/text/VerbatimTtsAnnotation;
+Landroidx/compose/ui/text/android/BoringLayoutFactoryDefault;
+Landroidx/compose/ui/text/android/LayoutIntrinsics;
+Landroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/text/android/Paint29;
+Landroidx/compose/ui/text/android/StaticLayoutFactory23;
+Landroidx/compose/ui/text/android/StaticLayoutFactory26;
+Landroidx/compose/ui/text/android/StaticLayoutFactory28;
+Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl;
+Landroidx/compose/ui/text/android/StaticLayoutParams;
+Landroidx/compose/ui/text/android/TextAlignmentAdapter;
+Landroidx/compose/ui/text/android/TextAndroidCanvas;
+Landroidx/compose/ui/text/android/TextLayout;
+Landroidx/compose/ui/text/android/TextLayoutKt;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx;
+Landroidx/compose/ui/text/android/style/LineHeightSpan;
+Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
+Landroidx/compose/ui/text/android/style/PlaceholderSpan;
+Landroidx/compose/ui/text/android/style/ShadowSpan;
+Landroidx/compose/ui/text/android/style/SkewXSpan;
+Landroidx/compose/ui/text/android/style/TextDecorationSpan;
+Landroidx/compose/ui/text/android/style/TypefaceSpan;
+Landroidx/compose/ui/text/caches/LruCache;
+Landroidx/compose/ui/text/caches/SimpleArrayMap;
+Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
+Landroidx/compose/ui/text/font/AsyncTypefaceCache;
+Landroidx/compose/ui/text/font/DefaultFontFamily;
+Landroidx/compose/ui/text/font/Font$ResourceLoader;
+Landroidx/compose/ui/text/font/FontFamily$Resolver;
+Landroidx/compose/ui/text/font/FontFamily;
+Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+Landroidx/compose/ui/text/font/FontFamilyResolverKt;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
+Landroidx/compose/ui/text/font/FontStyle;
+Landroidx/compose/ui/text/font/FontSynthesis;
+Landroidx/compose/ui/text/font/FontWeight;
+Landroidx/compose/ui/text/font/GenericFontFamily;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor;
+Landroidx/compose/ui/text/font/PlatformTypefaces;
+Landroidx/compose/ui/text/font/SystemFontFamily;
+Landroidx/compose/ui/text/font/TypefaceRequest;
+Landroidx/compose/ui/text/font/TypefaceResult$Immutable;
+Landroidx/compose/ui/text/font/TypefaceResult;
+Landroidx/compose/ui/text/input/InputMethodManagerImpl;
+Landroidx/compose/ui/text/input/PlatformTextInputService;
+Landroidx/compose/ui/text/input/TextFieldValue;
+Landroidx/compose/ui/text/input/TextInputService;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/text/intl/AndroidLocale;
+Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;
+Landroidx/compose/ui/text/intl/Locale;
+Landroidx/compose/ui/text/intl/LocaleList;
+Landroidx/compose/ui/text/intl/PlatformLocaleKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+Landroidx/compose/ui/text/platform/AndroidTextPaint;
+Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;
+Landroidx/compose/ui/text/platform/DefaultImpl;
+Landroidx/compose/ui/text/platform/EmojiCompatStatus;
+Landroidx/compose/ui/text/platform/ImmutableBool;
+Landroidx/compose/ui/text/platform/URLSpanCache;
+Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;
+Landroidx/compose/ui/text/platform/style/DrawStyleSpan;
+Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
+Landroidx/compose/ui/text/style/BaselineShift;
+Landroidx/compose/ui/text/style/BrushStyle;
+Landroidx/compose/ui/text/style/ColorStyle;
+Landroidx/compose/ui/text/style/Hyphens;
+Landroidx/compose/ui/text/style/LineBreak$Strategy;
+Landroidx/compose/ui/text/style/LineBreak$Strictness;
+Landroidx/compose/ui/text/style/LineBreak$WordBreak;
+Landroidx/compose/ui/text/style/LineBreak;
+Landroidx/compose/ui/text/style/LineHeightStyle$Alignment;
+Landroidx/compose/ui/text/style/LineHeightStyle;
+Landroidx/compose/ui/text/style/TextAlign;
+Landroidx/compose/ui/text/style/TextDecoration;
+Landroidx/compose/ui/text/style/TextDirection;
+Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;
+Landroidx/compose/ui/text/style/TextForegroundStyle;
+Landroidx/compose/ui/text/style/TextGeometricTransform;
+Landroidx/compose/ui/text/style/TextIndent;
+Landroidx/compose/ui/text/style/TextMotion;
+Landroidx/compose/ui/unit/Constraints;
+Landroidx/compose/ui/unit/Density;
+Landroidx/compose/ui/unit/DensityImpl;
+Landroidx/compose/ui/unit/Dp$Companion;
+Landroidx/compose/ui/unit/Dp;
+Landroidx/compose/ui/unit/DpOffset;
+Landroidx/compose/ui/unit/DpRect;
+Landroidx/compose/ui/unit/IntOffset;
+Landroidx/compose/ui/unit/IntSize;
+Landroidx/compose/ui/unit/LayoutDirection;
+Landroidx/compose/ui/unit/TextUnit;
+Landroidx/compose/ui/unit/TextUnitType;
+Landroidx/core/app/ComponentActivity;
+Landroidx/core/app/CoreComponentFactory;
+Landroidx/core/content/res/ColorStateListInflaterCompat;
+Landroidx/core/content/res/ComplexColorCompat;
+Landroidx/core/graphics/TypefaceCompat;
+Landroidx/core/graphics/TypefaceCompatApi29Impl;
+Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl;
+Landroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;
+Landroidx/core/os/BuildCompat$Extensions30Impl;
+Landroidx/core/os/BuildCompat;
+Landroidx/core/os/TraceCompat$Api18Impl;
+Landroidx/core/os/TraceCompat;
+Landroidx/core/provider/CallbackWithHandler$2;
+Landroidx/core/provider/FontProvider$Api16Impl;
+Landroidx/core/provider/FontRequest;
+Landroidx/core/provider/FontsContractCompat$FontInfo;
+Landroidx/core/text/TextUtilsCompat$Api17Impl;
+Landroidx/core/text/TextUtilsCompat;
+Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;
+Landroidx/core/view/AccessibilityDelegateCompat;
+Landroidx/core/view/MenuHostHelper;
+Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;
+Landroidx/core/view/ViewCompat$Api29Impl;
+Landroidx/core/view/ViewCompat$Api30Impl;
+Landroidx/core/view/ViewCompat;
+Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;
+Landroidx/emoji2/text/DefaultGlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19;
+Landroidx/emoji2/text/EmojiCompat$Config;
+Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
+Landroidx/emoji2/text/EmojiCompat;
+Landroidx/emoji2/text/EmojiCompatInitializer$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;
+Landroidx/emoji2/text/EmojiCompatInitializer;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;
+Landroidx/emoji2/text/EmojiProcessor$ProcessorSm;
+Landroidx/emoji2/text/EmojiProcessor;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+Landroidx/emoji2/text/MetadataRepo$Node;
+Landroidx/emoji2/text/MetadataRepo;
+Landroidx/emoji2/text/TypefaceEmojiRasterizer;
+Landroidx/emoji2/text/TypefaceEmojiSpan;
+Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
+Landroidx/emoji2/text/flatbuffer/MetadataItem;
+Landroidx/emoji2/text/flatbuffer/MetadataList;
+Landroidx/emoji2/text/flatbuffer/Table;
+Landroidx/lifecycle/DefaultLifecycleObserver;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter;
+Landroidx/lifecycle/EmptyActivityLifecycleCallbacks;
+Landroidx/lifecycle/HasDefaultViewModelProviderFactory;
+Landroidx/lifecycle/Lifecycle$Event$Companion;
+Landroidx/lifecycle/Lifecycle$Event$WhenMappings;
+Landroidx/lifecycle/Lifecycle$Event;
+Landroidx/lifecycle/Lifecycle$State;
+Landroidx/lifecycle/Lifecycle;
+Landroidx/lifecycle/LifecycleDestroyedException;
+Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;
+Landroidx/lifecycle/LifecycleDispatcher;
+Landroidx/lifecycle/LifecycleEventObserver;
+Landroidx/lifecycle/LifecycleObserver;
+Landroidx/lifecycle/LifecycleOwner;
+Landroidx/lifecycle/LifecycleRegistry$ObserverWithState;
+Landroidx/lifecycle/LifecycleRegistry;
+Landroidx/lifecycle/Lifecycling;
+Landroidx/lifecycle/ProcessLifecycleInitializer;
+Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;
+Landroidx/lifecycle/ProcessLifecycleOwner;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;
+Landroidx/lifecycle/ReportFragment;
+Landroidx/lifecycle/SavedStateHandleAttacher;
+Landroidx/lifecycle/SavedStateHandlesProvider;
+Landroidx/lifecycle/SavedStateHandlesVM;
+Landroidx/lifecycle/ViewModelStore;
+Landroidx/lifecycle/ViewModelStoreOwner;
+Landroidx/lifecycle/viewmodel/CreationExtras$Empty;
+Landroidx/lifecycle/viewmodel/CreationExtras;
+Landroidx/lifecycle/viewmodel/MutableCreationExtras;
+Landroidx/lifecycle/viewmodel/ViewModelInitializer;
+Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+Landroidx/metrics/performance/FrameData;
+Landroidx/metrics/performance/FrameDataApi24;
+Landroidx/metrics/performance/FrameDataApi31;
+Landroidx/metrics/performance/JankStats;
+Landroidx/metrics/performance/JankStatsApi16Impl;
+Landroidx/metrics/performance/JankStatsApi22Impl;
+Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;
+Landroidx/metrics/performance/JankStatsApi24Impl;
+Landroidx/metrics/performance/JankStatsApi26Impl;
+Landroidx/metrics/performance/JankStatsApi31Impl;
+Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+Landroidx/metrics/performance/PerformanceMetricsState;
+Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer;
+Landroidx/savedstate/Recreator;
+Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;
+Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
+Landroidx/savedstate/SavedStateRegistry;
+Landroidx/savedstate/SavedStateRegistryController;
+Landroidx/savedstate/SavedStateRegistryOwner;
+Landroidx/startup/AppInitializer;
+Landroidx/startup/InitializationProvider;
+Landroidx/startup/Initializer;
+Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;
+Landroidx/tv/foundation/PivotOffsets;
+Landroidx/tv/foundation/TvBringIntoViewSpec;
+Landroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator$onMeasured$$inlined$sortBy$1;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;
+Landroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;
+Landroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;
+Landroidx/tv/foundation/lazy/grid/TvGridItemSpan;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridItemSpanScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutKeyIndexMap;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;
+Landroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortBy$2;
+Landroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;
+Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt;
+Landroidx/tv/foundation/lazy/list/TvLazyListInterval;
+Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;
+Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;
+Landroidx/tv/foundation/lazy/list/TvLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/TvLazyListScope;
+Landroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;
+Landroidx/tv/foundation/lazy/list/TvLazyListState;
+Landroidx/tv/material3/Border;
+Landroidx/tv/material3/BorderIndication;
+Landroidx/tv/material3/ColorScheme;
+Landroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;
+Landroidx/tv/material3/ColorSchemeKt;
+Landroidx/tv/material3/ContentColorKt;
+Landroidx/tv/material3/Glow;
+Landroidx/tv/material3/GlowIndication;
+Landroidx/tv/material3/GlowIndicationInstance;
+Landroidx/tv/material3/ScaleIndication;
+Landroidx/tv/material3/ScaleIndicationInstance;
+Landroidx/tv/material3/ScaleIndicationTokens;
+Landroidx/tv/material3/ShapesKt$LocalShapes$1;
+Landroidx/tv/material3/SurfaceKt$Surface$4;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$3;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$1;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1;
+Landroidx/tv/material3/SurfaceKt;
+Landroidx/tv/material3/TabColors;
+Landroidx/tv/material3/TabKt$Tab$1;
+Landroidx/tv/material3/TabKt$Tab$3$1;
+Landroidx/tv/material3/TabKt$Tab$4$1;
+Landroidx/tv/material3/TabKt$Tab$6;
+Landroidx/tv/material3/TabKt$Tab$7;
+Landroidx/tv/material3/TabKt;
+Landroidx/tv/material3/TabRowDefaults$PillIndicator$1;
+Landroidx/tv/material3/TabRowDefaults;
+Landroidx/tv/material3/TabRowKt$TabRow$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2;
+Landroidx/tv/material3/TabRowKt$TabRow$3;
+Landroidx/tv/material3/TabRowScopeImpl;
+Landroidx/tv/material3/TabRowSlots;
+Landroidx/tv/material3/TextKt$Text$1;
+Landroidx/tv/material3/TextKt$Text$2;
+Landroidx/tv/material3/TextKt;
+Landroidx/tv/material3/ToggleableSurfaceBorder;
+Landroidx/tv/material3/ToggleableSurfaceColors;
+Landroidx/tv/material3/ToggleableSurfaceGlow;
+Landroidx/tv/material3/ToggleableSurfaceScale;
+Landroidx/tv/material3/ToggleableSurfaceShape;
+Landroidx/tv/material3/tokens/ColorLightTokens;
+Landroidx/tv/material3/tokens/Elevation;
+Landroidx/tv/material3/tokens/PaletteTokens;
+Landroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;
+Landroidx/tv/material3/tokens/ShapeTokens;
+Landroidx/tv/material3/tokens/TypographyTokensKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;
+Lcom/example/tvcomposebasedtests/Config;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator;
+Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;
+Lcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;
+Lcom/example/tvcomposebasedtests/MainActivity;
+Lcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;
+Lcom/example/tvcomposebasedtests/UtilsKt;
+Lcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;
+Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;
+Lcom/google/gson/JsonIOException;
+Lcom/google/gson/internal/ConstructorConstructor;
+Lcom/google/gson/internal/LinkedTreeMap$1;
+Lcom/google/gson/internal/ObjectConstructor;
+Lkotlin/Function;
+Lkotlin/Lazy;
+Lkotlin/Pair;
+Lkotlin/Result$Failure;
+Lkotlin/Result;
+Lkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;
+Lkotlin/ResultKt;
+Lkotlin/SynchronizedLazyImpl;
+Lkotlin/TuplesKt;
+Lkotlin/ULong$Companion;
+Lkotlin/UNINITIALIZED_VALUE;
+Lkotlin/Unit;
+Lkotlin/UnsafeLazyImpl;
+Lkotlin/collections/AbstractCollection;
+Lkotlin/collections/AbstractList;
+Lkotlin/collections/AbstractMap$toString$1;
+Lkotlin/collections/AbstractMap;
+Lkotlin/collections/AbstractMutableList;
+Lkotlin/collections/AbstractSet;
+Lkotlin/collections/ArrayDeque;
+Lkotlin/collections/ArraysKt___ArraysKt;
+Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;
+Lkotlin/collections/CollectionsKt__ReversedViewsKt;
+Lkotlin/collections/CollectionsKt___CollectionsKt;
+Lkotlin/collections/EmptyList;
+Lkotlin/collections/EmptyMap;
+Lkotlin/coroutines/AbstractCoroutineContextElement;
+Lkotlin/coroutines/AbstractCoroutineContextKey;
+Lkotlin/coroutines/CombinedContext;
+Lkotlin/coroutines/Continuation;
+Lkotlin/coroutines/ContinuationInterceptor;
+Lkotlin/coroutines/CoroutineContext$Element;
+Lkotlin/coroutines/CoroutineContext$Key;
+Lkotlin/coroutines/CoroutineContext$plus$1;
+Lkotlin/coroutines/CoroutineContext;
+Lkotlin/coroutines/EmptyCoroutineContext;
+Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CompletedContinuation;
+Lkotlin/coroutines/jvm/internal/ContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
+Lkotlin/coroutines/jvm/internal/SuspendLambda;
+Lkotlin/jvm/functions/Function0;
+Lkotlin/jvm/functions/Function12;
+Lkotlin/jvm/functions/Function1;
+Lkotlin/jvm/functions/Function22;
+Lkotlin/jvm/functions/Function2;
+Lkotlin/jvm/functions/Function3;
+Lkotlin/jvm/functions/Function4;
+Lkotlin/jvm/functions/Function5;
+Lkotlin/jvm/internal/ArrayIterator;
+Lkotlin/jvm/internal/CallableReference$NoReceiver;
+Lkotlin/jvm/internal/CallableReference;
+Lkotlin/jvm/internal/ClassBasedDeclarationContainer;
+Lkotlin/jvm/internal/ClassReference;
+Lkotlin/jvm/internal/FunctionBase;
+Lkotlin/jvm/internal/FunctionReferenceImpl;
+Lkotlin/jvm/internal/Lambda;
+Lkotlin/jvm/internal/PropertyReference0Impl;
+Lkotlin/jvm/internal/PropertyReference;
+Lkotlin/jvm/internal/Ref$BooleanRef;
+Lkotlin/jvm/internal/Ref$ObjectRef;
+Lkotlin/jvm/internal/Reflection;
+Lkotlin/jvm/internal/ReflectionFactory;
+Lkotlin/jvm/internal/markers/KMappedMarker;
+Lkotlin/jvm/internal/markers/KMutableCollection;
+Lkotlin/jvm/internal/markers/KMutableMap;
+Lkotlin/math/MathKt;
+Lkotlin/random/FallbackThreadLocalRandom$implStorage$1;
+Lkotlin/ranges/IntProgression;
+Lkotlin/ranges/IntProgressionIterator;
+Lkotlin/ranges/IntRange;
+Lkotlin/reflect/KCallable;
+Lkotlin/reflect/KClass;
+Lkotlin/reflect/KFunction;
+Lkotlin/reflect/KProperty0;
+Lkotlin/reflect/KProperty;
+Lkotlin/sequences/ConstrainedOnceSequence;
+Lkotlin/sequences/FilteringSequence$iterator$1;
+Lkotlin/sequences/FilteringSequence;
+Lkotlin/sequences/GeneratorSequence$iterator$1;
+Lkotlin/sequences/GeneratorSequence;
+Lkotlin/sequences/Sequence;
+Lkotlin/sequences/SequencesKt;
+Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;
+Lkotlin/sequences/TransformingSequence$iterator$1;
+Lkotlin/text/StringsKt__IndentKt$getIndentFunction$2;
+Lkotlin/text/StringsKt__RegexExtensionsKt;
+Lkotlin/text/StringsKt__StringBuilderKt;
+Lkotlin/text/StringsKt__StringNumberConversionsKt;
+Lkotlin/text/StringsKt__StringsKt;
+Lkotlin/text/StringsKt___StringsKt;
+Lkotlinx/coroutines/AbstractCoroutine;
+Lkotlinx/coroutines/Active;
+Lkotlinx/coroutines/BlockingCoroutine;
+Lkotlinx/coroutines/BlockingEventLoop;
+Lkotlinx/coroutines/CancelHandler;
+Lkotlinx/coroutines/CancellableContinuation;
+Lkotlinx/coroutines/CancellableContinuationImpl;
+Lkotlinx/coroutines/CancelledContinuation;
+Lkotlinx/coroutines/ChildContinuation;
+Lkotlinx/coroutines/ChildHandle;
+Lkotlinx/coroutines/ChildHandleNode;
+Lkotlinx/coroutines/ChildJob;
+Lkotlinx/coroutines/CompletableDeferredImpl;
+Lkotlinx/coroutines/CompletedContinuation;
+Lkotlinx/coroutines/CompletedExceptionally;
+Lkotlinx/coroutines/CompletedWithCancellation;
+Lkotlinx/coroutines/CoroutineContextKt$foldCopies$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key;
+Lkotlinx/coroutines/CoroutineDispatcher;
+Lkotlinx/coroutines/CoroutineExceptionHandler;
+Lkotlinx/coroutines/CoroutineScope;
+Lkotlinx/coroutines/DefaultExecutor;
+Lkotlinx/coroutines/DefaultExecutorKt;
+Lkotlinx/coroutines/Delay;
+Lkotlinx/coroutines/DispatchedTask;
+Lkotlinx/coroutines/Dispatchers;
+Lkotlinx/coroutines/DisposableHandle;
+Lkotlinx/coroutines/Empty;
+Lkotlinx/coroutines/EventLoopImplBase;
+Lkotlinx/coroutines/EventLoopImplPlatform;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher;
+Lkotlinx/coroutines/GlobalScope;
+Lkotlinx/coroutines/InactiveNodeList;
+Lkotlinx/coroutines/Incomplete;
+Lkotlinx/coroutines/IncompleteStateBox;
+Lkotlinx/coroutines/InvokeOnCancel;
+Lkotlinx/coroutines/InvokeOnCancelling;
+Lkotlinx/coroutines/InvokeOnCompletion;
+Lkotlinx/coroutines/Job;
+Lkotlinx/coroutines/JobCancellingNode;
+Lkotlinx/coroutines/JobImpl;
+Lkotlinx/coroutines/JobNode;
+Lkotlinx/coroutines/JobSupport$ChildCompletion;
+Lkotlinx/coroutines/JobSupport$Finishing;
+Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;
+Lkotlinx/coroutines/JobSupport;
+Lkotlinx/coroutines/MainCoroutineDispatcher;
+Lkotlinx/coroutines/NodeList;
+Lkotlinx/coroutines/NonDisposableHandle;
+Lkotlinx/coroutines/NotCompleted;
+Lkotlinx/coroutines/ParentJob;
+Lkotlinx/coroutines/StandaloneCoroutine;
+Lkotlinx/coroutines/SupervisorJobImpl;
+Lkotlinx/coroutines/ThreadLocalEventLoop;
+Lkotlinx/coroutines/TimeoutCancellationException;
+Lkotlinx/coroutines/Unconfined;
+Lkotlinx/coroutines/UndispatchedCoroutine;
+Lkotlinx/coroutines/UndispatchedMarker;
+Lkotlinx/coroutines/Waiter;
+Lkotlinx/coroutines/android/AndroidDispatcherFactory;
+Lkotlinx/coroutines/android/HandlerContext;
+Lkotlinx/coroutines/android/HandlerDispatcher;
+Lkotlinx/coroutines/android/HandlerDispatcherKt;
+Lkotlinx/coroutines/channels/BufferOverflow;
+Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+Lkotlinx/coroutines/channels/BufferedChannel;
+Lkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;
+Lkotlinx/coroutines/channels/BufferedChannelKt;
+Lkotlinx/coroutines/channels/Channel$Factory;
+Lkotlinx/coroutines/channels/Channel;
+Lkotlinx/coroutines/channels/ChannelResult$Closed;
+Lkotlinx/coroutines/channels/ChannelResult$Failed;
+Lkotlinx/coroutines/channels/ChannelSegment;
+Lkotlinx/coroutines/channels/ConflatedBufferedChannel;
+Lkotlinx/coroutines/channels/ProducerCoroutine;
+Lkotlinx/coroutines/channels/ProducerScope;
+Lkotlinx/coroutines/channels/ReceiveChannel;
+Lkotlinx/coroutines/channels/SendChannel;
+Lkotlinx/coroutines/channels/WaiterEB;
+Lkotlinx/coroutines/flow/AbstractFlow$collect$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;
+Lkotlinx/coroutines/flow/DistinctFlowImpl;
+Lkotlinx/coroutines/flow/Flow;
+Lkotlinx/coroutines/flow/FlowCollector;
+Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;
+Lkotlinx/coroutines/flow/MutableSharedFlow;
+Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+Lkotlinx/coroutines/flow/SafeFlow;
+Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter;
+Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/SharedFlowImpl;
+Lkotlinx/coroutines/flow/SharedFlowSlot;
+Lkotlinx/coroutines/flow/SharingCommand;
+Lkotlinx/coroutines/flow/SharingConfig;
+Lkotlinx/coroutines/flow/SharingStarted;
+Lkotlinx/coroutines/flow/StartedLazily;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed;
+Lkotlinx/coroutines/flow/StateFlow;
+Lkotlinx/coroutines/flow/StateFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/StateFlowImpl;
+Lkotlinx/coroutines/flow/StateFlowSlot;
+Lkotlinx/coroutines/flow/internal/AbortFlowException;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlow;
+Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;
+Lkotlinx/coroutines/flow/internal/FusibleFlow;
+Lkotlinx/coroutines/flow/internal/NoOpContinuation;
+Lkotlinx/coroutines/flow/internal/NopCollector;
+Lkotlinx/coroutines/flow/internal/SafeCollector;
+Lkotlinx/coroutines/flow/internal/SendingCollector;
+Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
+Lkotlinx/coroutines/internal/AtomicOp;
+Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+Lkotlinx/coroutines/internal/ContextScope;
+Lkotlinx/coroutines/internal/DispatchedContinuation;
+Lkotlinx/coroutines/internal/LimitedDispatcher;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+Lkotlinx/coroutines/internal/LockFreeTaskQueue;
+Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;
+Lkotlinx/coroutines/internal/MainDispatcherFactory;
+Lkotlinx/coroutines/internal/MainDispatcherLoader;
+Lkotlinx/coroutines/internal/OpDescriptor;
+Lkotlinx/coroutines/internal/Removed;
+Lkotlinx/coroutines/internal/ResizableAtomicArray;
+Lkotlinx/coroutines/internal/ScopeCoroutine;
+Lkotlinx/coroutines/internal/Segment;
+Lkotlinx/coroutines/internal/StackTraceRecoveryKt;
+Lkotlinx/coroutines/internal/Symbol;
+Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;
+Lkotlinx/coroutines/internal/ThreadState;
+Lkotlinx/coroutines/scheduling/CoroutineScheduler;
+Lkotlinx/coroutines/scheduling/DefaultIoScheduler;
+Lkotlinx/coroutines/scheduling/DefaultScheduler;
+Lkotlinx/coroutines/scheduling/GlobalQueue;
+Lkotlinx/coroutines/scheduling/NanoTimeSource;
+Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;
+Lkotlinx/coroutines/scheduling/Task;
+Lkotlinx/coroutines/scheduling/TasksKt;
+Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;
+Lkotlinx/coroutines/sync/Mutex;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;
+Lkotlinx/coroutines/sync/MutexImpl;
+Lkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl;
+Lkotlinx/coroutines/sync/SemaphoreKt;
+Lkotlinx/coroutines/sync/SemaphoreSegment;
+Lokhttp3/Headers$Builder;
+Lokhttp3/MediaType;
+PL_COROUTINE/ArtificialStackFrames;->access$removeRunning(Landroidx/compose/runtime/Stack;)V
+PL_COROUTINE/ArtificialStackFrames;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List;
+PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->run()V
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/collection/ArrayMap$EntrySet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->resumeAndRemoveAll()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V
+PLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/layout/OffsetElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
+PLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V
+PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+PLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
+PLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I
+PLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
+PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Throwable;)V
+PLandroidx/compose/runtime/Recomposer;->cancel()V
+PLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+PLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V
+PLandroidx/compose/runtime/SlotWriter;->startGroup()V
+PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILandroidx/compose/runtime/Stack;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+PLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V
+PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
+PLandroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;->dispose()V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+PLandroidx/compose/ui/focus/FocusOwnerImpl;->clearFocus(ZZ)V
+PLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V
+PLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V
+PLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
+PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;-><init>(Landroidx/compose/ui/node/LayoutNode;ZZ)V
+PLandroidx/compose/ui/node/UiApplier;->remove(II)V
+PLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;
+PLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
+PLandroidx/compose/ui/platform/WeakCache;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Ljava/lang/Class;)V
+PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
+PLandroidx/compose/ui/text/PlatformTextStyle;->equals(Ljava/lang/Object;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><init>(I)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V
+PLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
+PLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
+PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment;->onDestroy()V
+PLandroidx/lifecycle/ReportFragment;->onPause()V
+PLandroidx/lifecycle/ReportFragment;->onStop()V
+PLandroidx/metrics/performance/JankStatsApi24Impl;->removeFrameMetricsListenerDelegate(Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;Landroid/view/Window;)V
+PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;-><init>(I)V
+PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;-><init>(IIJJ)V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V
+PLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V
+PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/compose/ui/unit/Dp$Companion;
+PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)V
+PLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;->equals(Ljava/lang/Object;)Z
+PLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object;
+PLcom/example/tvcomposebasedtests/MainActivity;->onPause()V
+PLcom/google/gson/FieldNamingPolicy$1;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$1;->translateName(Ljava/lang/reflect/Field;)Ljava/lang/String;
+PLcom/google/gson/FieldNamingPolicy$2;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$3;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$4;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$5;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$6;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$7;-><init>()V
+PLcom/google/gson/FieldNamingPolicy;-><clinit>()V
+PLcom/google/gson/FieldNamingPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/Gson$1;-><init>(I)V
+PLcom/google/gson/Gson$3;-><init>(I)V
+PLcom/google/gson/Gson$4;-><init>(Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/Gson$FutureTypeAdapter;-><init>()V
+PLcom/google/gson/Gson;-><init>()V
+PLcom/google/gson/Gson;->newJsonWriter(Ljava/io/Writer;)Lcom/google/gson/stream/JsonWriter;
+PLcom/google/gson/Gson;->toJson(Lcom/google/gson/JsonObject;Lcom/google/gson/stream/JsonWriter;)V
+PLcom/google/gson/JsonNull;-><clinit>()V
+PLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/String;)V
+PLcom/google/gson/ToNumberPolicy$1;-><init>()V
+PLcom/google/gson/ToNumberPolicy$2;-><init>()V
+PLcom/google/gson/ToNumberPolicy$3;-><init>()V
+PLcom/google/gson/ToNumberPolicy$4;-><init>()V
+PLcom/google/gson/ToNumberPolicy;-><clinit>()V
+PLcom/google/gson/ToNumberPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/TypeAdapter;->nullSafe()Lcom/google/gson/Gson$4;
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;-><init>(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)V
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;
+PLcom/google/gson/internal/ConstructorConstructor;-><init>(Ljava/util/Map;Ljava/util/List;)V
+PLcom/google/gson/internal/ConstructorConstructor;->checkInstantiable(Ljava/lang/Class;)Ljava/lang/String;
+PLcom/google/gson/internal/ConstructorConstructor;->get(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/internal/ObjectConstructor;
+PLcom/google/gson/internal/Excluder;-><clinit>()V
+PLcom/google/gson/internal/Excluder;-><init>()V
+PLcom/google/gson/internal/Excluder;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/Excluder;->excludeClassInStrategy(Z)V
+PLcom/google/gson/internal/Excluder;->isAnonymousOrNonStaticLocal(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;-><init>(Landroidx/collection/ArrayMap$EntrySet;)V
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;->next()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->nextNode()Lcom/google/gson/internal/LinkedTreeMap$Node;
+PLcom/google/gson/internal/LinkedTreeMap$Node;->getKey()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap;-><clinit>()V
+PLcom/google/gson/internal/bind/ArrayTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;I)V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/DateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter$1;-><init>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->beginObject()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->value(Ljava/lang/Boolean;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;-><init>(ILjava/lang/Object;)V
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><init>(Lcom/google/gson/Gson;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;-><init>(Ljava/lang/String;Ljava/lang/reflect/Field;ZZLjava/lang/reflect/Method;ZLcom/google/gson/TypeAdapter;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;-><init>(Ljava/util/LinkedHashMap;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Lcom/google/gson/internal/Excluder;Lcom/google/gson/internal/bind/CollectionTypeAdapterFactory;Ljava/util/List;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->getBoundFields(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Ljava/lang/Class;Z)Ljava/util/LinkedHashMap;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->includeField(Ljava/lang/reflect/Field;Z)Z
+PLcom/google/gson/internal/bind/TypeAdapters$29;-><init>(I)V
+PLcom/google/gson/internal/bind/TypeAdapters$29;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$31;-><init>(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$31;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$32;-><init>(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$32;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$34$1;-><init>(Lcom/google/gson/Gson;Ljava/lang/reflect/Type;Lcom/google/gson/TypeAdapter;Lcom/google/gson/internal/ObjectConstructor;)V
+PLcom/google/gson/internal/bind/TypeAdapters;-><clinit>()V
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$31;
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$32;
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;->isRecord(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;-><clinit>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;->makeAccessible(Ljava/lang/reflect/AccessibleObject;)V
+PLcom/google/gson/internal/sql/SqlDateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimeTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimestampTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTypesSupport;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;->endArray()V
+PLcom/google/gson/stream/JsonWriter;->name(Ljava/lang/String;)V
+PLcom/google/gson/stream/JsonWriter;->newline()V
+PLkotlin/ResultKt;->SampleTvLazyColumn(ILandroidx/compose/runtime/Composer;I)V
+PLkotlin/ResultKt;->TvLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+PLkotlin/ResultKt;->checkArgument(Z)V
+PLkotlin/ResultKt;->checkNotPrimitive(Ljava/lang/reflect/Type;)V
+PLkotlin/ResultKt;->equals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z
+PLkotlin/ResultKt;->getFilterResult(Ljava/util/List;)V
+PLkotlin/ResultKt;->getGenericSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->getSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->resolve(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/reflect/Type;Ljava/util/HashMap;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->write(Lcom/google/gson/JsonElement;Lcom/google/gson/stream/JsonWriter;)V
+PLkotlin/TuplesKt;-><init>(I)V
+PLkotlin/TuplesKt;-><init>(Ljava/lang/Object;)V
+PLkotlin/TuplesKt;->access$removeEntryAtIndex([Ljava/lang/Object;I)[Ljava/lang/Object;
+PLkotlin/TuplesKt;->asMutableCollection(Ljava/util/LinkedHashSet;)Ljava/util/Collection;
+PLkotlin/TuplesKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V
+PLkotlin/TuplesKt;->writeProfile(Landroid/content/Context;Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V
+PLkotlin/ULong$Companion;->checkPositionIndex$kotlin_stdlib(II)V
+PLkotlin/ULong$Companion;->onResultReceived(ILjava/lang/Object;)V
+PLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/util/List;Lkotlin/Function;)Ljava/util/ArrayList;
+PLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V
+PLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/sequences/SequenceBuilderIterator;-><init>()V
+PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;
+PLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z
+PLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;
+PLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V
+PLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+PLkotlin/text/Charsets;-><clinit>()V
+PLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
+PLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V
+PLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z
+PLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;
+PLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
+PLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
+PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/SharingConfig;->clear()V
+PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
+PLkotlinx/coroutines/internal/DispatchedContinuation;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V
+PLokhttp3/MediaType;->access$locationOf(Ljava/util/ArrayList;II)I
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt b/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt
index 2e8faf1..e2cdc97 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt
@@ -139,7 +139,9 @@
     modifier: Modifier = Modifier,
     tint: Color = LocalContentColor.current
 ) {
-    val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    val colorFilter = remember(tint) {
+        if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    }
     val semantics =
         if (contentDescription != null) {
             Modifier.semantics {
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt
index cc97ac8..297d92c 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt
@@ -84,7 +84,7 @@
     content: @Composable () -> Unit,
 ) {
     val animatedWidth by animateDpAsState(
-        targetValue = if (doesNavigationDrawerHaveFocus) {
+        targetValue = if (hasFocus) {
             NavigationDrawerItemDefaults.ExpandedDrawerItemWidth
         } else {
             NavigationDrawerItemDefaults.CollapsedDrawerItemWidth
@@ -101,7 +101,7 @@
         onClick = onClick,
         headlineContent = {
             AnimatedVisibility(
-                visible = doesNavigationDrawerHaveFocus,
+                visible = hasFocus,
                 enter = NavigationDrawerItemDefaults.ContentAnimationEnter,
                 exit = NavigationDrawerItemDefaults.ContentAnimationExit,
             ) {
@@ -116,7 +116,7 @@
         trailingContent = trailingContent?.let {
             {
                 AnimatedVisibility(
-                    visible = doesNavigationDrawerHaveFocus,
+                    visible = hasFocus,
                     enter = NavigationDrawerItemDefaults.ContentAnimationEnter,
                     exit = NavigationDrawerItemDefaults.ContentAnimationExit,
                 ) {
@@ -127,7 +127,7 @@
         supportingContent = supportingContent?.let {
             {
                 AnimatedVisibility(
-                    visible = doesNavigationDrawerHaveFocus,
+                    visible = hasFocus,
                     enter = NavigationDrawerItemDefaults.ContentAnimationEnter,
                     exit = NavigationDrawerItemDefaults.ContentAnimationExit,
                 ) {
@@ -155,7 +155,7 @@
         onLongClick = onLongClick,
         tonalElevation = tonalElevation,
         shape = shape.toToggleableListItemShape(),
-        colors = colors.toToggleableListItemColors(doesNavigationDrawerHaveFocus),
+        colors = colors.toToggleableListItemColors(hasFocus),
         scale = scale.toToggleableListItemScale(),
         border = border.toToggleableListItemBorder(),
         glow = glow.toToggleableListItemGlow(),
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt
index 85434a3..8916e49 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt
@@ -17,18 +17,19 @@
 package androidx.tv.material3
 
 /**
- * [NavigationDrawerScope] is used to provide the isActivated state to the [NavigationDrawerItem]
- * composable
+ * [NavigationDrawerScope] is used to provide the doesNavigationDrawerHaveFocus state to the
+ * [NavigationDrawerItem] composable
  */
 @ExperimentalTvMaterial3Api // TODO (b/263353219): Remove this before launching beta
 interface NavigationDrawerScope {
     /**
      * Whether any item within the [NavigationDrawer] or [ModalNavigationDrawer] is focused
      */
-    val doesNavigationDrawerHaveFocus: Boolean
+    @get:Suppress("GetterSetterNames")
+    val hasFocus: Boolean
 }
 
 @OptIn(ExperimentalTvMaterial3Api::class)
 internal class NavigationDrawerScopeImpl(
-    override val doesNavigationDrawerHaveFocus: Boolean
+    override val hasFocus: Boolean
 ) : NavigationDrawerScope
diff --git a/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt b/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt
index b43a669..cc1f9ce 100644
--- a/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt
+++ b/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt
@@ -17,6 +17,8 @@
 package androidx.wear.compose.foundation.samples
 
 import androidx.annotation.Sampled
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.tween
 import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Box
@@ -34,6 +36,10 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.graphicsLayer
+import androidx.compose.ui.semantics.CustomAccessibilityAction
+import androidx.compose.ui.semantics.customActions
+import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.dp
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
 import androidx.wear.compose.foundation.RevealValue
@@ -56,6 +62,15 @@
 @Composable
 fun SwipeToRevealSample() {
     SwipeToReveal(
+        modifier = Modifier.semantics {
+            // Use custom actions to make the primary and secondary actions accessible
+            customActions = listOf(
+                CustomAccessibilityAction("Delete") {
+                    /* Add the primary action click handler */
+                    true
+                }
+            )
+        },
         primaryAction = {
             Box(
                 modifier = Modifier
@@ -89,9 +104,18 @@
 @OptIn(ExperimentalWearFoundationApi::class)
 @Sampled
 @Composable
-fun SwipeToRevealWithRevealOffset() {
+fun SwipeToRevealWithDelayedText() {
     val state = rememberRevealState()
     SwipeToReveal(
+        modifier = Modifier.semantics {
+            // Use custom actions to make the primary and secondary actions accessible
+            customActions = listOf(
+                CustomAccessibilityAction("Delete") {
+                    /* Add the primary action click handler */
+                    true
+                }
+            )
+        },
         state = state,
         primaryAction = {
             Box(
@@ -104,8 +128,19 @@
                     contentDescription = "Delete"
                 )
                 if (abs(state.offset) > revealOffset) {
-                    Spacer(Modifier.size(5.dp))
-                    Text("Clear")
+                    // Delay the text appearance so that it has enough space to be displayed
+                    val textAlpha = animateFloatAsState(
+                        targetValue = 1f,
+                        animationSpec = tween(
+                            durationMillis = 250,
+                            delayMillis = 250
+                        ),
+                        label = "PrimaryActionTextAlpha"
+                    )
+                    Box(modifier = Modifier.graphicsLayer { alpha = textAlpha.value }) {
+                        Spacer(Modifier.size(5.dp))
+                        Text("Clear")
+                    }
                 }
             }
         },
@@ -158,6 +193,18 @@
                 val revealState = rememberRevealState()
                 if (isExpanded) {
                     SwipeToReveal(
+                        modifier = Modifier.semantics {
+                            // Use custom actions to make the primary and secondary actions
+                            // accessible
+                            customActions = listOf(
+                                CustomAccessibilityAction("Delete") {
+                                    coroutineScope.launch {
+                                        revealState.animateTo(RevealValue.Revealed)
+                                    }
+                                    true
+                                }
+                            )
+                        },
                         state = revealState,
                         primaryAction = {
                             Box(
diff --git a/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt
index 956835f..51e8ba6 100644
--- a/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt
+++ b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt
@@ -17,6 +17,7 @@
 package androidx.wear.compose.foundation
 
 import androidx.compose.foundation.ScrollState
+import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.focusable
 import androidx.compose.foundation.horizontalScroll
@@ -54,6 +55,7 @@
 import androidx.compose.ui.test.swipe
 import androidx.compose.ui.test.swipeLeft
 import androidx.compose.ui.test.swipeRight
+import androidx.compose.ui.test.swipeWithVelocity
 import java.lang.Math.sin
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
@@ -81,6 +83,47 @@
     }
 
     @Test
+    fun composes_in_one_frame_without_pending_changes() {
+        var outerCounter = 0
+        var innerCounter = 0
+        var runTest by mutableStateOf(false)
+        rule.mainClock.autoAdvance = false
+        rule.setContent {
+            if (runTest) {
+                outerCounter++
+                val state = rememberSwipeToDismissBoxState()
+                SwipeToDismissBox(
+                    state = state,
+                    onDismissed = { },
+                ) { isBackground ->
+                    innerCounter++
+                    if (isBackground) {
+                        Box(
+                            modifier = Modifier
+                                .fillMaxSize()
+                                .background(Color.Green)
+                        )
+                    } else {
+                        Box(
+                            modifier = Modifier
+                                .fillMaxSize()
+                                .background(Color.Red)
+                        )
+                    }
+                }
+            }
+        }
+
+        runTest = true
+
+        repeat(10) {
+            rule.mainClock.advanceTimeByFrame()
+            assertEquals("Outer", 1, outerCounter)
+            assertEquals("Inner", 1, innerCounter)
+        }
+    }
+
+    @Test
     fun dismisses_when_swiped_right() =
         verifySwipe(gesture = { swipeRight() }, expectedToDismiss = true)
 
@@ -91,10 +134,14 @@
 
     @Test
     fun does_not_dismiss_when_swipe_right_incomplete() =
-    // Execute a partial swipe over a longer-than-default duration so that there
+        // Execute a partial swipe over a longer-than-default duration so that there
         // is insufficient velocity to perform a 'fling'.
         verifySwipe(
-            gesture = { swipeRight(startX = 0f, endX = width / 4f, durationMillis = LONG_SWIPE) },
+            gesture = { swipeWithVelocity(
+                start = Offset(0f, centerY),
+                end = Offset(centerX / 2f, centerY),
+                endVelocity = 1.0f
+            ) },
             expectedToDismiss = false
         )
 
@@ -515,13 +562,10 @@
         var dismissed = false
         rule.setContent {
             val state = rememberSwipeToDismissBoxState()
-            LaunchedEffect(state.currentValue) {
-                dismissed =
-                    state.currentValue == SwipeToDismissValue.Dismissed
-            }
             SwipeToDismissBox(
                 state = state,
-                modifier = Modifier.testTag(TEST_TAG)
+                modifier = Modifier.testTag(TEST_TAG),
+                onDismissed = { dismissed = true }
             ) {
                 MessageContent()
             }
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt
index c1c7213..b626f97 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt
@@ -19,6 +19,7 @@
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.LinearOutSlowInEasing
 import androidx.compose.animation.core.TweenSpec
+import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.layout.Box
@@ -27,15 +28,14 @@
 import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.SideEffect
 import androidx.compose.runtime.Stable
 import androidx.compose.runtime.State
 import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.key
-import androidx.compose.runtime.mutableFloatStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.composed
 import androidx.compose.ui.geometry.Offset
@@ -48,7 +48,8 @@
 import androidx.compose.ui.input.pointer.PointerInputScope
 import androidx.compose.ui.input.pointer.changedToUp
 import androidx.compose.ui.input.pointer.pointerInput
-import androidx.compose.ui.layout.onSizeChanged
+import androidx.compose.ui.platform.LocalConfiguration
+import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.debugInspectorInfo
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.Velocity
@@ -57,7 +58,6 @@
 import androidx.compose.ui.util.lerp
 import kotlin.math.max
 import kotlin.math.min
-import kotlin.math.roundToInt
 import kotlinx.coroutines.coroutineScope
 import kotlinx.coroutines.isActive
 
@@ -97,7 +97,8 @@
  */
 @OptIn(ExperimentalWearFoundationApi::class)
 @Composable
-public fun SwipeToDismissBox(
+@Suppress("PrimitiveInCollection")
+fun SwipeToDismissBox(
     state: SwipeToDismissBoxState,
     modifier: Modifier = Modifier,
     backgroundKey: Any = SwipeToDismissKeys.Background,
@@ -105,113 +106,95 @@
     userSwipeEnabled: Boolean = true,
     content: @Composable BoxScope.(isBackground: Boolean) -> Unit
 ) {
-    // Will be updated in onSizeChanged, initialise to any value other than zero
-    // so that it is different to the other anchor used for the swipe gesture.
-    var maxWidth by remember { mutableFloatStateOf(1f) }
+    val density = LocalDensity.current
+    val maxWidthPx = with(density) {
+        LocalConfiguration.current.screenWidthDp.dp.toPx()
+    }
+    SideEffect {
+        val anchors = mapOf(
+            SwipeToDismissValue.Default to 0f,
+            SwipeToDismissValue.Dismissed to maxWidthPx
+        )
+        state.swipeableState.density = density
+        state.swipeableState.updateAnchors(anchors)
+    }
+
     Box(
         modifier = modifier
             .fillMaxSize()
-            .onSizeChanged { maxWidth = it.width.toFloat() }
             .swipeableV2(
                 state = state.swipeableState,
                 orientation = Orientation.Horizontal,
                 enabled = userSwipeEnabled
             )
-            .swipeAnchors(
-                state = state.swipeableState,
-                possibleValues = anchors().keys
-            ) { value, layoutSize ->
-                val width = layoutSize.width.toFloat()
-                anchors()[value]!! * width
-            }
     ) {
-        var squeezeMode by remember {
-            mutableStateOf(true)
-        }
-
-        LaunchedEffect(state.isAnimationRunning) {
-            if (state.targetValue == SwipeToDismissValue.Dismissed) {
-                squeezeMode = false
-            }
-        }
-
-        LaunchedEffect(state.targetValue) {
-            if (!squeezeMode && state.targetValue == SwipeToDismissValue.Default) {
-                squeezeMode = true
-            }
-        }
-
         val isRound = isRoundDevice()
         val backgroundScrimColor = LocalSwipeToDismissBackgroundScrimColor.current
         val contentScrimColor = LocalSwipeToDismissContentScrimColor.current
 
-        // Use remember { derivedStateOf{ ... } } idiom to re-use modifiers where possible.
-        // b/280392104: re-calculate modifiers if keys have changed
-        val modifiers by remember(isRound, backgroundScrimColor, backgroundKey, contentKey) {
-            derivedStateOf {
-                val progress = ((state.swipeableState.offset ?: 0f) / maxWidth).coerceIn(0f, 1f)
-                val scale = lerp(SCALE_MAX, SCALE_MIN, progress).coerceIn(SCALE_MIN, SCALE_MAX)
-                val squeezeOffset = max(0f, (1f - scale) * maxWidth / 2f)
-                val slideOffset = lerp(squeezeOffset, maxWidth, max(0f, progress - 0.7f) / 0.3f)
-
-                val translationX = if (squeezeMode) squeezeOffset else slideOffset
-
-                val backgroundAlpha = MAX_BACKGROUND_SCRIM_ALPHA * (1 - progress)
-                val contentScrimAlpha = min(MAX_CONTENT_SCRIM_ALPHA, progress / 2f)
-
-                Modifiers(
-                    contentForeground = Modifier
-                        .fillMaxSize()
-                        .graphicsLayer {
-                            this.translationX = translationX
-                            scaleX = scale
-                            scaleY = scale
-                            clip = isRound && translationX > 0
-                            shape = if (isRound) CircleShape else RectangleShape
-                        }
-                        .background(backgroundScrimColor),
-                    scrimForeground =
-                    Modifier
-                        .background(
-                            contentScrimColor.copy(alpha = contentScrimAlpha)
-                        )
-                        .fillMaxSize(),
-                    scrimBackground =
-                    Modifier
-                        .matchParentSize()
-                        .background(
-                            backgroundScrimColor.copy(alpha = backgroundAlpha)
-                        )
-                )
-            }
+        val progress by remember(state) {
+            derivedStateOf { ((state.swipeableState.offset ?: 0f) / maxWidthPx).coerceIn(0f, 1f) }
         }
+        val isSwiping by remember { derivedStateOf { progress > 0 } }
 
         repeat(2) {
             val isBackground = it == 0
-            val contentModifier = if (isBackground) {
-                Modifier.fillMaxSize()
-            } else {
-                modifiers.contentForeground
-            }
-
-            val scrimModifier = if (isBackground) {
-                modifiers.scrimBackground
-            } else {
-                modifiers.scrimForeground
-            }
 
             key(if (isBackground) backgroundKey else contentKey) {
-                if (!isBackground ||
-                    (userSwipeEnabled && (state.swipeableState.offset?.roundToInt() ?: 0) > 0)
-                ) {
+                if (!isBackground || (userSwipeEnabled && isSwiping)) {
                     HierarchicalFocusCoordinator(requiresFocus = { !isBackground }) {
-                        Box(contentModifier) {
+                        Box(Modifier
+                            .fillMaxSize()
+                            .then(
+                                if (!isBackground) {
+                                    Modifier
+                                        .graphicsLayer {
+                                            val scale = lerp(SCALE_MAX, SCALE_MIN, progress)
+                                                .coerceIn(SCALE_MIN, SCALE_MAX)
+                                            val squeezeOffset =
+                                                max(0f, (1f - scale) * maxWidthPx / 2f)
+
+                                            val translationX =
+                                                if (state.targetValue
+                                                    != SwipeToDismissValue.Dismissed
+                                                ) {
+                                                    // Squeeze
+                                                    squeezeOffset
+                                                } else {
+                                                    // slide
+                                                    lerp(
+                                                        squeezeOffset,
+                                                        maxWidthPx,
+                                                        max(0f, progress - 0.7f) / 0.3f
+                                                    )
+                                                }
+
+                                            this.translationX = translationX
+                                            scaleX = scale
+                                            scaleY = scale
+                                            clip = isRound && translationX > 0
+                                            shape = if (isRound) CircleShape else RectangleShape
+                                        }
+                                        .background(backgroundScrimColor)
+                                } else Modifier
+                            )
+                        ) {
                             // We use the repeat loop above and call content at this location
                             // for both background and foreground so that any persistence
                             // within the content composable has the same call stack which is used
                             // as part of the hash identity for saveable state.
                             content(isBackground)
-                            Box(modifier = scrimModifier)
+
+                            Canvas(Modifier.fillMaxSize()) {
+                                val color = if (isBackground) {
+                                    backgroundScrimColor
+                                        .copy(alpha = MAX_BACKGROUND_SCRIM_ALPHA * (1 - progress))
+                                } else {
+                                    contentScrimColor
+                                        .copy(alpha = min(MAX_CONTENT_SCRIM_ALPHA, progress / 2f))
+                                }
+                                drawRect(color = color)
+                            }
                         }
                     }
                 }
@@ -256,8 +239,9 @@
  * scrim during the swipe gesture, and is shown without scrim once the finger passes the
  * swipe-to-dismiss threshold.
  */
+@OptIn(ExperimentalWearFoundationApi::class)
 @Composable
-public fun SwipeToDismissBox(
+fun SwipeToDismissBox(
     onDismissed: () -> Unit,
     modifier: Modifier = Modifier,
     state: SwipeToDismissBoxState = rememberSwipeToDismissBoxState(),
@@ -290,7 +274,7 @@
  */
 @Stable
 @OptIn(ExperimentalWearFoundationApi::class)
-public class SwipeToDismissBoxState(
+class SwipeToDismissBoxState(
     animationSpec: AnimationSpec<Float> = SwipeToDismissBoxDefaults.AnimationSpec,
     confirmStateChange: (SwipeToDismissValue) -> Boolean = { true },
 ) {
@@ -300,7 +284,7 @@
      * Before and during a swipe, corresponds to [SwipeToDismissValue.Default], then switches to
      * [SwipeToDismissValue.Dismissed] if the swipe has been completed.
      */
-    public val currentValue: SwipeToDismissValue
+    val currentValue: SwipeToDismissValue
         get() = swipeableState.currentValue
 
     /**
@@ -310,13 +294,13 @@
      * swipe finished. If an animation is running, this is the target value of that animation.
      * Finally, if no swipe or animation is in progress, this is the same as the [currentValue].
      */
-    public val targetValue: SwipeToDismissValue
+    val targetValue: SwipeToDismissValue
         get() = swipeableState.targetValue
 
     /**
      * Whether the state is currently animating.
      */
-    public val isAnimationRunning: Boolean
+    val isAnimationRunning: Boolean
         get() = swipeableState.isAnimationRunning
 
     internal fun edgeNestedScrollConnection(
@@ -329,7 +313,7 @@
      *
      * @param targetValue The new target value to set [currentValue] to.
      */
-    public suspend fun snapTo(targetValue: SwipeToDismissValue) = swipeableState.snapTo(targetValue)
+    suspend fun snapTo(targetValue: SwipeToDismissValue) = swipeableState.snapTo(targetValue)
 
     private companion object {
         private fun <T> SwipeableV2State<T>.edgeNestedScrollConnection(
@@ -393,7 +377,7 @@
  * @param confirmStateChange callback to confirm or veto a pending state change.
  */
 @Composable
-public fun rememberSwipeToDismissBoxState(
+fun rememberSwipeToDismissBoxState(
     animationSpec: AnimationSpec<Float> = SWIPE_TO_DISMISS_BOX_ANIMATION_SPEC,
     confirmStateChange: (SwipeToDismissValue) -> Boolean = { true },
 ): SwipeToDismissBoxState {
@@ -405,24 +389,24 @@
 /**
  * Contains defaults for [SwipeToDismissBox].
  */
-public object SwipeToDismissBoxDefaults {
+object SwipeToDismissBoxDefaults {
     /**
      * The default animation that will be used to animate to a new state after the swipe gesture.
      */
     @OptIn(ExperimentalWearFoundationApi::class)
-    public val AnimationSpec = SwipeableV2Defaults.AnimationSpec
+    val AnimationSpec = SwipeableV2Defaults.AnimationSpec
 
     /**
      * The default width of the area which might trigger a swipe
      * with [edgeSwipeToDismiss] modifier
      */
-    public val EdgeWidth = 30.dp
+    val EdgeWidth = 30.dp
 }
 
 /**
  * Keys used to persistent state in [SwipeToDismissBox].
  */
-public enum class SwipeToDismissKeys {
+enum class SwipeToDismissKeys {
     /**
      * The default background key to identify the content displayed by the content block
      * when isBackground == true. Specifying a background key instead of using the default
@@ -441,7 +425,7 @@
 /**
  * States used as targets for the anchor points for swipe-to-dismiss.
  */
-public enum class SwipeToDismissValue {
+enum class SwipeToDismissValue {
     /**
      * The state of the SwipeToDismissBox before the swipe started.
      */
@@ -473,7 +457,7 @@
  * on SwipeToDismissBox
  * @param edgeWidth A width of edge, where swipe should be recognised
  */
-public fun Modifier.edgeSwipeToDismiss(
+fun Modifier.edgeSwipeToDismiss(
     swipeToDismissBoxState: SwipeToDismissBoxState,
     edgeWidth: Dp = SwipeToDismissBoxDefaults.EdgeWidth
 ): Modifier =
@@ -563,22 +547,6 @@
     SwipeToDismissInProgress
 }
 
-/**
- * Class to enable calculating group of modifiers in a single, memoised block.
- */
-private data class Modifiers(
-    val contentForeground: Modifier,
-    val scrimForeground: Modifier,
-    val scrimBackground: Modifier,
-)
-
-// Map states to pixel position - initially, don't know the width in pixels so omit upper bound.
-private fun anchors(): Map<SwipeToDismissValue, Float> =
-    mapOf(
-        SwipeToDismissValue.Default to 0f,
-        SwipeToDismissValue.Dismissed to 1f
-    )
-
 private const val SWIPE_THRESHOLD = 0.5f
 private const val SCALE_MAX = 1f
 private const val SCALE_MIN = 0.7f
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
index 50f3c3b..136d2b8 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
@@ -380,8 +380,8 @@
  * Example of SwipeToReveal with primary action and undo action
  * @sample androidx.wear.compose.foundation.samples.SwipeToRevealSample
  *
- * Example of SwipeToReveal using [RevealScope]
- * @sample androidx.wear.compose.foundation.samples.SwipeToRevealWithRevealOffset
+ * Example of SwipeToReveal using [RevealScope] to delay the appearance of primary action text
+ * @sample androidx.wear.compose.foundation.samples.SwipeToRevealWithDelayedText
  *
  * Example of SwipeToReveal used with Expandables
  * @sample androidx.wear.compose.foundation.samples.SwipeToRevealWithExpandables
@@ -504,10 +504,18 @@
                             animationSpec = tween(durationMillis = QUICK_ANIMATION),
                             label = "SecondaryActionAnimationSpec"
                         )
-                        val actionContentAlpha = animateFloatAsState(
+                        val secondaryActionAlpha = animateFloatAsState(
+                            targetValue = if (!showSecondaryAction || hideActions) 0f else 1f,
+                            animationSpec = tween(
+                                durationMillis = QUICK_ANIMATION,
+                                easing = LinearEasing
+                            ),
+                            label = "SecondaryActionAlpha"
+                        )
+                        val primaryActionAlpha = animateFloatAsState(
                             targetValue = if (hideActions) 0f else 1f,
                             animationSpec = tween(durationMillis = 100, easing = LinearEasing),
-                            label = "ActionContentOpacity"
+                            label = "PrimaryActionAlpha"
                         )
                         val revealedContentAlpha = animateFloatAsState(
                             targetValue = if (swipeCompleted) 0f else 1f,
@@ -529,7 +537,7 @@
                                 ActionSlot(
                                     revealScope,
                                     weight = secondaryActionWeight.value,
-                                    opacity = actionContentAlpha,
+                                    opacity = secondaryActionAlpha,
                                     content = secondaryAction,
                                 )
                             }
@@ -537,7 +545,7 @@
                             ActionSlot(
                                 revealScope,
                                 content = primaryAction,
-                                opacity = actionContentAlpha
+                                opacity = primaryActionAlpha
                             )
                         }
                     }
diff --git a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
index 7994fe3..ef51f18 100644
--- a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
@@ -224,89 +224,3 @@
         }
     }
 }
-
-/**
- * Opinionated Wear Material [Card] that offers a specific 3 slot layout to show interactive
- * information about an application, e.g. a message. TitleCards are designed for use within an
- * application.
- *
- * The first row of the layout has two slots. 1. a start aligned title. The title text is
- * expected to be a maximum of 2 lines of text.
- * 2. An optional time that the application activity has occurred shown at the
- * end of the row, expected to be an end aligned [Text] composable showing a time relevant to the
- * contents of the [Card].
- *
- * The rest of the [Card] contains the content which is expected to be [Text] or a contained
- * [Image].
- *
- * If the content is text it can be single or multiple line and is expected to be Top and Start
- * aligned.
- *
- * Overall the [title] and [content] text should be no more than 5 rows of text combined.
- *
- * If more than one composable is provided in the content slot it is the responsibility of the
- * caller to determine how to layout the contents, e.g. provide either a row or a column.
- *
- * @param onClick Will be called when the user clicks the card
- * @param modifier Modifier to be applied to the card
- * @param enabled Controls the enabled state of the card. When false, this card will not
- * be clickable and there will be no ripple effect on click. Wear cards do not have any specific
- * elevation or alpha differences when not enabled - they are simply not clickable.
- * @param border A BorderStroke object which is used for the outline drawing.
- * Can be null - then outline will not be drawn
- * @param contentPadding The spacing values to apply internally between the container and the
- * content
- * @param containerPainter A Painter which is used for background drawing.
- * @param interactionSource The [MutableInteractionSource] representing the stream of
- * [Interaction]s for this card. You can create and pass in your own remembered
- * [MutableInteractionSource] if you want to observe [Interaction]s and customize the
- * appearance / behavior of this card in different [Interaction]s.
- * @param shape Defines the card's shape. It is strongly recommended to use the default as this
- * shape is a key characteristic of the Wear Material Theme
- * @param title A slot for displaying the title of the card, expected to be one or two
- * lines of text.
- * @param time An optional slot for displaying the time relevant to the contents of the card,
- * expected to be a short piece of end aligned text.
- * @param content A main slot for a content of this card.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-@Composable
-public fun TitleCard(
-    onClick: () -> Unit,
-    modifier: Modifier,
-    enabled: Boolean,
-    border: BorderStroke?,
-    contentPadding: PaddingValues,
-    containerPainter: Painter,
-    interactionSource: MutableInteractionSource,
-    shape: Shape,
-    title: @Composable RowScope.() -> Unit,
-    time: @Composable (RowScope.() -> Unit)?,
-    content: @Composable ColumnScope.() -> Unit,
-) {
-    Card(
-        onClick = onClick,
-        modifier = modifier,
-        enabled = enabled,
-        containerPainter = containerPainter,
-        border = border,
-        contentPadding = contentPadding,
-        interactionSource = interactionSource,
-        role = null,
-        shape = shape
-    ) {
-        Column {
-            Row(
-                modifier = Modifier.fillMaxWidth(),
-                verticalAlignment = Alignment.CenterVertically
-            ) {
-                title()
-                time?.let {
-                    Spacer(modifier = Modifier.weight(1.0f))
-                    time()
-                }
-            }
-            content()
-        }
-    }
-}
diff --git a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
index 33dcc31..51eed78 100644
--- a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
@@ -20,6 +20,7 @@
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.size
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.paint
 import androidx.compose.ui.geometry.Size
@@ -55,8 +56,9 @@
     modifier: Modifier,
     tint: Color
 ) {
-    // TODO: b/149735981 semantics for content description
-    val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    val colorFilter = remember(tint) {
+        if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+    }
     val semantics = if (contentDescription != null) {
         Modifier.semantics {
             this.contentDescription = contentDescription
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ChipBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ChipBenchmark.kt
index e93b1f9..779f4ef 100644
--- a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ChipBenchmark.kt
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ChipBenchmark.kt
@@ -25,6 +25,7 @@
 import androidx.compose.testutils.benchmark.benchmarkFirstLayout
 import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
 import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.wear.compose.material.Chip
@@ -48,6 +49,11 @@
     private val chipCaseFactory = { ChipTestCase() }
 
     @Test
+    fun first_pixel() {
+        benchmarkRule.benchmarkToFirstPixel(chipCaseFactory)
+    }
+
+    @Test
     fun first_compose() {
         benchmarkRule.benchmarkFirstCompose(chipCaseFactory)
     }
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ListHeaderBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ListHeaderBenchmark.kt
new file mode 100644
index 0000000..3ffa865
--- /dev/null
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ListHeaderBenchmark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2023 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 androidx.wear.compose.material.benchmark
+
+import androidx.compose.runtime.Composable
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.wear.compose.material.ListHeader
+import androidx.wear.compose.material.MaterialTheme
+import androidx.wear.compose.material.Text
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class ListHeaderBenchmark {
+
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val listHeaderCaseFactory = { ListHeaderTestCase() }
+
+    @Test
+    fun first_pixel() {
+        benchmarkRule.benchmarkToFirstPixel(listHeaderCaseFactory)
+    }
+
+    internal class ListHeaderTestCase : LayeredComposeTestCase() {
+        @Composable
+        override fun MeasuredContent() {
+            ListHeader {
+                Text("Test")
+            }
+        }
+
+        @Composable
+        override fun ContentWrappers(content: @Composable () -> Unit) {
+            MaterialTheme {
+                content()
+            }
+        }
+    }
+}
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/PositionIndicatorBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/PositionIndicatorBenchmark.kt
new file mode 100644
index 0000000..edf6dd7
--- /dev/null
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/PositionIndicatorBenchmark.kt
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2023 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 androidx.wear.compose.material.benchmark
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.assertNoPendingChanges
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.compose.testutils.setupContent
+import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.wear.compose.material.MaterialTheme
+import androidx.wear.compose.material.PositionIndicator
+import androidx.wear.compose.material.PositionIndicatorState
+import androidx.wear.compose.material.PositionIndicatorVisibility
+import kotlinx.coroutines.runBlocking
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class PositionIndicatorBenchmark {
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+    private val defaultPositionIndicatorCaseFactory = { PositionIndicatorBenchmarkTestCase() }
+
+    @Test
+    fun changeFraction() {
+        benchmarkRule.changePositionBenchmark {
+            PositionIndicatorBenchmarkTestCase(targetFraction = 0.5f)
+        }
+    }
+
+    @Test
+    fun changeFractionAndSizeFraction_hide() {
+        benchmarkRule.changePositionBenchmark {
+            PositionIndicatorBenchmarkTestCase(
+                targetFraction = 0.5f,
+                targetSizeFraction = 0.5f,
+                targetVisibility = PositionIndicatorVisibility.Hide
+            )
+        }
+    }
+
+    @Test
+    fun changeFractionAndSizeFraction_autoHide() {
+        benchmarkRule.changePositionBenchmark {
+            PositionIndicatorBenchmarkTestCase(
+                targetFraction = 0.5f,
+                targetSizeFraction = 0.5f,
+                targetVisibility = PositionIndicatorVisibility.AutoHide
+            )
+        }
+    }
+
+    @Test
+    fun firstPixel() {
+        benchmarkRule.benchmarkToFirstPixel(defaultPositionIndicatorCaseFactory)
+    }
+}
+
+internal class PositionIndicatorBenchmarkTestCase(
+    val targetFraction: Float? = null,
+    val targetSizeFraction: Float? = null,
+    val targetVisibility: PositionIndicatorVisibility? = null
+) : LayeredComposeTestCase() {
+    private lateinit var positionFraction: MutableState<Float>
+    private lateinit var sizeFraction: MutableState<Float>
+    private lateinit var visibility: MutableState<PositionIndicatorVisibility>
+
+    fun onChange() {
+        runBlocking {
+            targetFraction?.let { positionFraction.value = targetFraction }
+            targetSizeFraction?.let { sizeFraction.value = targetSizeFraction }
+            targetVisibility?.let { visibility.value = targetVisibility }
+        }
+    }
+
+    @Composable
+    override fun MeasuredContent() {
+        positionFraction = remember { mutableFloatStateOf(0f) }
+        sizeFraction = remember { mutableFloatStateOf(.1f) }
+        visibility = remember { mutableStateOf(PositionIndicatorVisibility.Show) }
+
+        val state = remember {
+            CustomPositionIndicatorState(
+                _positionFraction = { positionFraction.value },
+                sizeFraction = { sizeFraction.value },
+                visibility = { visibility.value })
+        }
+
+        PositionIndicator(
+            state = state,
+            indicatorHeight = 50.dp,
+            indicatorWidth = 4.dp,
+            paddingHorizontal = 5.dp
+        )
+    }
+
+    @Composable
+    override fun ContentWrappers(content: @Composable () -> Unit) {
+        MaterialTheme {
+            content()
+        }
+    }
+}
+
+private class CustomPositionIndicatorState(
+    private val _positionFraction: () -> Float,
+    private val sizeFraction: () -> Float,
+    private val visibility: () -> PositionIndicatorVisibility
+) : PositionIndicatorState {
+    override val positionFraction: Float
+        get() = _positionFraction()
+
+    override fun sizeFraction(scrollableContainerSizePx: Float): Float = sizeFraction()
+
+    override fun visibility(scrollableContainerSizePx: Float): PositionIndicatorVisibility =
+        visibility()
+}
+
+internal fun ComposeBenchmarkRule.changePositionBenchmark(
+    caseFactory: () -> PositionIndicatorBenchmarkTestCase
+) {
+    runBenchmarkFor(caseFactory) {
+        disposeContent()
+        measureRepeated {
+            runWithTimingDisabled {
+                setupContent()
+                assertNoPendingChanges()
+            }
+            getTestCase().onChange()
+            doFrame()
+            runWithTimingDisabled {
+                disposeContent()
+            }
+        }
+    }
+}
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/SwipeToDismissBoxBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/SwipeToDismissBoxBenchmark.kt
new file mode 100644
index 0000000..96a3129
--- /dev/null
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/SwipeToDismissBoxBenchmark.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2023 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 androidx.wear.compose.material.benchmark
+
+import androidx.benchmark.ExperimentalBenchmarkConfigApi
+import androidx.benchmark.MicrobenchmarkConfig
+import androidx.benchmark.ProfilerConfig
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.runtime.Composable
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.compose.ui.Modifier
+import androidx.wear.compose.foundation.SwipeToDismissBox
+import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
+import androidx.wear.compose.material.MaterialTheme
+import org.junit.Rule
+import org.junit.Test
+
+class SwipeToDismissBoxBenchmark {
+    @OptIn(ExperimentalBenchmarkConfigApi::class)
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule(
+        MicrobenchmarkConfig(
+            profiler = ProfilerConfig.MethodTracing()
+        )
+    )
+
+    @Test
+    fun s2dbox_benchmarkToFirstPixel() {
+        benchmarkRule.benchmarkToFirstPixel { S2DBoxTestCase() }
+    }
+}
+
+private class S2DBoxTestCase : LayeredComposeTestCase() {
+    @Composable
+    override fun MeasuredContent() {
+        Screen()
+    }
+
+    @Composable
+    private fun Screen() {
+        val state = rememberSwipeToDismissBoxState()
+        SwipeToDismissBox(
+            state = state,
+            onDismissed = { },
+        ) { isBackground ->
+            if (isBackground) {
+                Box(
+                    modifier = Modifier
+                        .fillMaxSize()
+                        .background(MaterialTheme.colors.onSurface)
+                )
+            } else {
+                Box(
+                    modifier = Modifier
+                        .fillMaxSize()
+                        .background(MaterialTheme.colors.primary)
+                )
+            }
+        }
+    }
+}
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt
index 642c441..0796556 100644
--- a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt
@@ -25,6 +25,7 @@
 import androidx.compose.testutils.benchmark.benchmarkFirstLayout
 import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
 import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.wear.compose.material.Icon
@@ -49,6 +50,11 @@
     private val toggleChipCaseFactory = { ToggleChipTestCase() }
 
     @Test
+    fun first_pixel() {
+        benchmarkRule.benchmarkToFirstPixel(toggleChipCaseFactory)
+    }
+
+    @Test
     fun first_compose() {
         benchmarkRule.benchmarkFirstCompose(toggleChipCaseFactory)
     }
diff --git a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt
index e988234..d39af4a 100644
--- a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt
+++ b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt
@@ -24,7 +24,12 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.semantics.CustomAccessibilityAction
+import androidx.compose.ui.semantics.customActions
+import androidx.compose.ui.semantics.semantics
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
+import androidx.wear.compose.foundation.SwipeToDismissBoxState
+import androidx.wear.compose.foundation.edgeSwipeToDismiss
 import androidx.wear.compose.foundation.rememberRevealState
 import androidx.wear.compose.material.AppCard
 import androidx.wear.compose.material.CardDefaults
@@ -40,10 +45,26 @@
 @OptIn(ExperimentalWearMaterialApi::class, ExperimentalWearFoundationApi::class)
 @Composable
 @Sampled
-fun SwipeToRevealChipSample() {
+fun SwipeToRevealChipSample(swipeToDismissBoxState: SwipeToDismissBoxState) {
     SwipeToRevealChip(
         revealState = rememberRevealState(),
-        modifier = Modifier.fillMaxWidth(),
+        modifier = Modifier
+            .fillMaxWidth()
+            // Use edgeSwipeToDismiss to allow SwipeToDismissBox to capture swipe events
+            .edgeSwipeToDismiss(swipeToDismissBoxState)
+            .semantics {
+                // Use custom actions to make the primary and secondary actions accessible
+                customActions = listOf(
+                    CustomAccessibilityAction("Delete") {
+                        /* Add the primary action click handler here */
+                        true
+                    },
+                    CustomAccessibilityAction("More Options") {
+                        /* Add the secondary click handler here */
+                        true
+                    }
+                )
+            },
         primaryAction = SwipeToRevealDefaults.primaryAction(
             icon = { Icon(SwipeToRevealDefaults.Delete, "Delete") },
             label = { Text("Delete") },
@@ -63,6 +84,7 @@
         )
     ) {
         Chip(
+            modifier = Modifier.fillMaxWidth(),
             onClick = { /* Add the chip click handler here */ },
             colors = ChipDefaults.primaryChipColors(),
             border = ChipDefaults.outlinedChipBorder()
@@ -75,10 +97,26 @@
 @OptIn(ExperimentalWearMaterialApi::class, ExperimentalWearFoundationApi::class)
 @Composable
 @Sampled
-fun SwipeToRevealCardSample() {
+fun SwipeToRevealCardSample(swipeToDismissBoxState: SwipeToDismissBoxState) {
     SwipeToRevealCard(
         revealState = rememberRevealState(),
-        modifier = Modifier.fillMaxWidth(),
+        modifier = Modifier
+            .fillMaxWidth()
+            // Use edgeSwipeToDismiss to allow SwipeToDismissBox to capture swipe events
+            .edgeSwipeToDismiss(swipeToDismissBoxState)
+            .semantics {
+                // Use custom actions to make the primary and secondary actions accessible
+                customActions = listOf(
+                    CustomAccessibilityAction("Delete") {
+                        /* Add the primary action click handler here */
+                        true
+                    },
+                    CustomAccessibilityAction("More Options") {
+                        /* Add the secondary click handler here */
+                        true
+                    }
+                )
+            },
         primaryAction = SwipeToRevealDefaults.primaryAction(
             icon = { Icon(SwipeToRevealDefaults.Delete, "Delete") },
             label = { Text("Delete") },
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
index 6dba8e0..ef0184e 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
@@ -16,17 +16,20 @@
 
 package androidx.wear.compose.material
 
+import android.content.res.Configuration
 import android.os.Build
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxScope
 import androidx.compose.foundation.layout.size
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.remember
 import androidx.compose.testutils.assertAgainstGolden
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalConfiguration
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.ExperimentalTestApi
@@ -110,15 +113,27 @@
         isOnDismissOverload: Boolean = false,
         goldenIdentifier: String = testName.methodName
     ) {
+        val screenShotSizeDp = SCREENSHOT_SIZE.dp
         rule.setContentWithTheme {
-            CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {
+            val originalConfiguration = LocalConfiguration.current
+            val fixedScreenSizeConfiguration = remember(originalConfiguration) {
+                Configuration(originalConfiguration).apply {
+                    screenWidthDp = SCREENSHOT_SIZE
+                    screenHeightDp = SCREENSHOT_SIZE
+                }
+            }
+
+            CompositionLocalProvider(
+                LocalLayoutDirection provides layoutDirection,
+                LocalConfiguration provides fixedScreenSizeConfiguration
+            ) {
                 val state = rememberSwipeToDismissBoxState()
                 if (isOnDismissOverload) {
                     SwipeToDismissBox(
                         onDismissed = {},
                         modifier = Modifier
                             .testTag(TEST_TAG)
-                            .size(106.dp),
+                            .size(screenShotSizeDp),
                         state = state
                     ) { isBackground ->
                         boxContent(isBackground = isBackground)
@@ -127,7 +142,7 @@
                     SwipeToDismissBox(
                         modifier = Modifier
                             .testTag(TEST_TAG)
-                            .size(106.dp),
+                            .size(screenShotSizeDp),
                         state = state
                     ) { isBackground ->
                         boxContent(isBackground = isBackground)
@@ -157,4 +172,6 @@
             }
         }
     }
+
+    private val SCREENSHOT_SIZE = 106
 }
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
index da64262..7e6bfe2 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
@@ -47,6 +47,7 @@
 import androidx.compose.ui.test.swipe
 import androidx.compose.ui.test.swipeLeft
 import androidx.compose.ui.test.swipeRight
+import androidx.compose.ui.test.swipeWithVelocity
 import com.google.common.truth.Truth.assertThat
 import java.lang.Math.sin
 import org.junit.Assert.assertEquals
@@ -86,7 +87,11 @@
     // Execute a partial swipe over a longer-than-default duration so that there
         // is insufficient velocity to perform a 'fling'.
         verifySwipe(
-            gesture = { swipeRight(startX = 0f, endX = width / 4f, durationMillis = LONG_SWIPE) },
+            gesture = { swipeWithVelocity(
+                start = Offset(0f, centerY),
+                end = Offset(centerX / 2f, centerY),
+                endVelocity = 1.0f
+            ) },
             expectedToDismiss = false
         )
 
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
index 2b09353..81a53a4 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
@@ -19,15 +19,19 @@
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.interaction.Interaction
 import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.RowScope
 import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.Immutable
 import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
@@ -295,35 +299,38 @@
     timeColor: Color = contentColor,
     content: @Composable ColumnScope.() -> Unit,
 ) {
-    androidx.wear.compose.materialcore.TitleCard(
+    androidx.wear.compose.materialcore.Card(
         onClick = onClick,
         modifier = modifier,
         enabled = enabled,
+        containerPainter = backgroundPainter,
         border = null,
         contentPadding = CardDefaults.ContentPadding,
-        containerPainter = backgroundPainter,
         interactionSource = remember { MutableInteractionSource() },
-        shape = MaterialTheme.shapes.large,
-        title = {
-            CompositionLocalProvider(
-                LocalContentColor provides titleColor,
-                LocalTextStyle provides MaterialTheme.typography.title3,
+        role = null,
+        shape = MaterialTheme.shapes.large
+    ) {
+        Column {
+            Row(
+                modifier = Modifier.fillMaxWidth(),
+                verticalAlignment = Alignment.CenterVertically
             ) {
-                title()
-            }
-        },
-        time = {
-            time?.let {
-                Spacer(modifier = Modifier.weight(1.0f))
                 CompositionLocalProvider(
-                    LocalContentColor provides timeColor,
-                    LocalTextStyle provides MaterialTheme.typography.caption1,
+                    LocalContentColor provides titleColor,
+                    LocalTextStyle provides MaterialTheme.typography.title3,
                 ) {
-                    time()
+                    title()
+                }
+                time?.let {
+                    Spacer(modifier = Modifier.weight(1.0f))
+                    CompositionLocalProvider(
+                        LocalContentColor provides timeColor,
+                        LocalTextStyle provides MaterialTheme.typography.caption1,
+                    ) {
+                        time()
+                    }
                 }
             }
-        },
-        content = {
             Spacer(modifier = Modifier.height(2.dp))
             CompositionLocalProvider(
                 LocalContentColor provides contentColor,
@@ -332,7 +339,7 @@
                 content()
             }
         }
-    )
+    }
 }
 
 /**
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
index bb7b888..c08a619 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
@@ -19,12 +19,9 @@
 import androidx.annotation.FloatRange
 import androidx.compose.animation.core.Animatable
 import androidx.compose.animation.core.AnimationSpec
-import androidx.compose.animation.core.AnimationVector
-import androidx.compose.animation.core.AnimationVector2D
 import androidx.compose.animation.core.CubicBezierEasing
 import androidx.compose.animation.core.Spring
-import androidx.compose.animation.core.TwoWayConverter
-import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.animate
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.tween
 import androidx.compose.foundation.ScrollState
@@ -37,18 +34,15 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Immutable
 import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.SideEffect
 import androidx.compose.runtime.Stable
-import androidx.compose.runtime.State
-import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshotFlow
 import androidx.compose.ui.AbsoluteAlignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.draw.drawWithCache
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
@@ -57,7 +51,7 @@
 import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.graphics.drawscope.ContentDrawScope
 import androidx.compose.ui.graphics.drawscope.Stroke
-import androidx.compose.ui.graphics.lerp
+import androidx.compose.ui.graphics.graphicsLayer
 import androidx.compose.ui.layout.LayoutModifier
 import androidx.compose.ui.layout.Measurable
 import androidx.compose.ui.layout.MeasureResult
@@ -81,9 +75,8 @@
 import kotlin.math.max
 import kotlin.math.roundToInt
 import kotlin.math.sqrt
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.launch
 
 /**
@@ -409,59 +402,19 @@
     val isScreenRound = isRoundDevice()
     val layoutDirection = LocalLayoutDirection.current
     val leftyMode = isLeftyModeEnabled()
-    val actuallyVisible = remember { mutableStateOf(false) }
+
     var containerSize by remember { mutableStateOf(IntSize.Zero) }
 
-    val displayState by remember(state) {
-        derivedStateOf {
-            DisplayState(
-                state.positionFraction,
-                state.sizeFraction(containerSize.height.toFloat())
-            )
-        }
-    }
+    var positionIndicatorAlpha by remember { mutableFloatStateOf(0f) }
 
-    val highlightAlpha = remember { Animatable(0f) }
-    val animatedDisplayState = customAnimateValueAsState(
-        displayState,
-        DisplayStateTwoWayConverter,
-        animationSpec = tween(
+    val positionFractionAnimatable = remember { Animatable(0f) }
+    val sizeFractionAnimatable = remember { Animatable(0f) }
+
+    val indicatorChangeAnimationSpec: AnimationSpec<Float> = remember {
+        tween(
             durationMillis = 500,
             easing = CubicBezierEasing(0f, 0f, 0f, 1f)
         )
-    ) { _, _ ->
-        launch {
-            highlightAlpha.animateTo(
-                0.33f,
-                animationSpec = tween(
-                    durationMillis = 150,
-                    easing = CubicBezierEasing(0f, 0f, 0.2f, 1f) // Standard In
-                )
-            )
-            highlightAlpha.animateTo(
-                0f,
-                animationSpec = tween(
-                    durationMillis = 500,
-                    easing = CubicBezierEasing(0.25f, 0f, 0.75f, 1f)
-                )
-            )
-        }
-    }
-
-    val visibility by remember(state) {
-        derivedStateOf {
-            state.visibility(containerSize.height.toFloat())
-        }
-    }
-    when (visibility) {
-        PositionIndicatorVisibility.Show -> actuallyVisible.value = true
-        PositionIndicatorVisibility.Hide -> actuallyVisible.value = false
-        PositionIndicatorVisibility.AutoHide -> if (actuallyVisible.value) {
-            LaunchedEffect(true) {
-                delay(2000)
-                actuallyVisible.value = false
-            }
-        }
     }
 
     val indicatorOnTheRight = when (position) {
@@ -477,7 +430,7 @@
             ((if (isScreenRound) {
                 // r is the distance from the center of the container to the arc we draw the
                 // position indicator on (the center of the arc, which is indicatorWidth wide).
-                val r = containerSize.width / 2 - paddingHorizontal.toPx() -
+                val r = containerSize.width.toFloat() / 2 - paddingHorizontal.toPx() -
                     indicatorWidth.toPx() / 2
                 // The sqrt is the size of the projection on the x axis of line between center of
                 // the container and the point where we start the arc.
@@ -489,6 +442,7 @@
             (indicatorHeight.toPx() + indicatorWidth.toPx()).roundToInt()
         )
     }
+
     val boundsOffset: Density.() -> IntOffset = {
         // Note that indicators are on right or left, centered vertically.
         val indicatorSize = boundsSize()
@@ -498,20 +452,57 @@
         )
     }
 
-    // Using same animation spec as AnimatedVisibility's fadeIn and fadeOut
-    val positionIndicatorAlpha by animateFloatAsState(
-        targetValue = if (actuallyVisible.value) 1f else 0f,
-        spring(stiffness = Spring.StiffnessMediumLow)
-    )
+    LaunchedEffect(state) {
+        var beforeFirstAnimation = true
+        snapshotFlow {
+            DisplayState(
+                state.positionFraction,
+                state.sizeFraction(containerSize.height.toFloat()),
+                state.visibility(containerSize.height.toFloat())
+            )
+        }.collectLatest {
+            if (beforeFirstAnimation) {
+                sizeFractionAnimatable.snapTo(it.size)
+                positionFractionAnimatable.snapTo(it.position)
+                beforeFirstAnimation = false
+            } else {
+                launch {
+                    sizeFractionAnimatable
+                        .animateTo(it.size, animationSpec = indicatorChangeAnimationSpec)
+                }
+                launch {
+                    positionFractionAnimatable
+                        .animateTo(it.position, animationSpec = indicatorChangeAnimationSpec)
+                }
+            }
+
+            when (it.visibility) {
+                PositionIndicatorVisibility.Show -> positionIndicatorAlpha = 1f
+                PositionIndicatorVisibility.Hide -> positionIndicatorAlpha = 0f
+                else -> {
+                    // Waiting for 2000ms and animating alpha to 0f
+                    delay(2000)
+                    animate(
+                        initialValue = positionIndicatorAlpha,
+                        targetValue = 0f,
+                        animationSpec = spring(stiffness = Spring.StiffnessMediumLow)
+                    ) { value, _ ->
+                        positionIndicatorAlpha = value
+                    }
+                }
+            }
+        }
+    }
 
     BoundsLimiter(boundsOffset, boundsSize, modifier, onSizeChanged = {
         containerSize = it
-    }
-    ) {
+    }) {
         Box(
             modifier = Modifier
                 .fillMaxSize()
-                .alpha(positionIndicatorAlpha)
+                .graphicsLayer {
+                    alpha = positionIndicatorAlpha
+                }
                 .drawWithCache {
                     // We need to invert reverseDirection when the screen is round and we are on
                     // the left.
@@ -523,30 +514,26 @@
                         }
 
                     val indicatorPosition = if (actualReverseDirection) {
-                        1 - animatedDisplayState.value.position
+                        1 - positionFractionAnimatable.value
                     } else {
-                        animatedDisplayState.value.position
+                        positionFractionAnimatable.value
                     }
 
                     val indicatorWidthPx = indicatorWidth.toPx()
 
                     // We want position = 0 be the indicator aligned at the top of its area and
                     // position = 1 be aligned at the bottom of the area.
-                    val indicatorStart =
-                        indicatorPosition * (1 - animatedDisplayState.value.size)
+                    val indicatorStart = indicatorPosition * (1 - sizeFractionAnimatable.value)
 
-                    val diameter = max(containerSize.width, containerSize.height)
+                    val diameter =
+                        max(containerSize.width.toFloat(), containerSize.height.toFloat())
 
                     val paddingHorizontalPx = paddingHorizontal.toPx()
-
                     onDrawWithContent {
                         if (isScreenRound) {
                             val usableHalf = diameter / 2f - paddingHorizontalPx
                             val sweepDegrees =
-                                (2 * asin(
-                                    (indicatorHeight.toPx() / 2) /
-                                        usableHalf
-                                )).toDegrees()
+                                (2 * asin((indicatorHeight.toPx() / 2) / usableHalf)).toDegrees()
 
                             drawCurvedIndicator(
                                 color,
@@ -556,8 +543,7 @@
                                 sweepDegrees,
                                 indicatorWidthPx,
                                 indicatorStart,
-                                animatedDisplayState.value.size,
-                                highlightAlpha.value
+                                sizeFractionAnimatable.value,
                             )
                         } else {
                             drawStraightIndicator(
@@ -566,10 +552,9 @@
                                 paddingHorizontalPx,
                                 indicatorOnTheRight,
                                 indicatorWidthPx,
-                                indicatorHeightPx = indicatorHeight.toPx(),
+                                indicatorHeight.toPx(),
                                 indicatorStart,
-                                animatedDisplayState.value.size,
-                                highlightAlpha.value
+                                sizeFractionAnimatable.value,
                             )
                         }
                     }
@@ -578,49 +563,16 @@
     }
 }
 
-// Copy of animateValueAsState, changing the listener to be notified before the animation starts,
-// so we can link this animation with another one.
-@Composable
-internal fun <T, V : AnimationVector> customAnimateValueAsState(
-    targetValue: T,
-    typeConverter: TwoWayConverter<T, V>,
-    animationSpec: AnimationSpec<T>,
-    changeListener: (CoroutineScope.(T, T) -> Unit)? = null
-): State<T> {
-    val animatable = remember { Animatable(targetValue, typeConverter) }
-    val listener by rememberUpdatedState(changeListener)
-    val animSpec by rememberUpdatedState(animationSpec)
-    val channel = remember { Channel<T>(Channel.CONFLATED) }
-    SideEffect {
-        channel.trySend(targetValue)
-    }
-    LaunchedEffect(channel) {
-        for (target in channel) {
-            // This additional poll is needed because when the channel suspends on receive and
-            // two values are produced before consumers' dispatcher resumes, only the first value
-            // will be received.
-            // It may not be an issue elsewhere, but in animation we want to avoid being one
-            // frame late.
-            val newTarget = channel.tryReceive().getOrNull() ?: target
-            launch {
-                if (newTarget != animatable.targetValue) {
-                    listener?.invoke(this, animatable.value, newTarget)
-                    animatable.animateTo(newTarget, animSpec)
-                }
-            }
-        }
-    }
-    return animatable.asState()
-}
-
 @Immutable
 internal class DisplayState(
     val position: Float,
-    val size: Float
+    val size: Float,
+    val visibility: PositionIndicatorVisibility
 ) {
     override fun hashCode(): Int {
         var result = position.hashCode()
         result = 31 * result + size.hashCode()
+        result = 31 * result + visibility.hashCode()
         return result
     }
 
@@ -633,21 +585,12 @@
 
         if (position != other.position) return false
         if (size != other.size) return false
+        if (visibility != other.visibility) return false
 
         return true
     }
 }
 
-internal val DisplayStateTwoWayConverter: TwoWayConverter<DisplayState, AnimationVector2D> =
-    TwoWayConverter(
-        convertToVector = { ds ->
-            AnimationVector2D(ds.position, ds.size)
-        },
-        convertFromVector = { av ->
-            DisplayState(av.v1, av.v2)
-        }
-    )
-
 /**
  * An implementation of [PositionIndicatorState] to display a value that is being incremented or
  * decremented with a rolling side button, rotating bezel or a slider e.g. a volume control.
@@ -700,11 +643,10 @@
 
     override fun visibility(scrollableContainerSizePx: Float) = if (scrollState.maxValue == 0) {
         PositionIndicatorVisibility.Hide
-    } else if (scrollState.isScrollInProgress) {
+    } else if (scrollState.isScrollInProgress)
         PositionIndicatorVisibility.Show
-    } else {
+    else
         PositionIndicatorVisibility.AutoHide
-    }
 
     override fun equals(other: Any?): Boolean {
         return (other as? ScrollStateAdapter)?.scrollState == scrollState
@@ -918,11 +860,10 @@
             (decimalFirstItemIndex() > 0 ||
                 decimalLastItemIndex() < totalItemsCount())
         return if (canScroll) {
-            if (isScrollInProgress()) {
+            if (isScrollInProgress())
                 PositionIndicatorVisibility.Show
-            } else {
+            else
                 PositionIndicatorVisibility.AutoHide
-            }
         } else {
             PositionIndicatorVisibility.Hide
         }
@@ -983,11 +924,10 @@
 
     override fun visibility(scrollableContainerSizePx: Float): PositionIndicatorVisibility {
         return if (sizeFraction(scrollableContainerSizePx) < 0.999f) {
-            if (state.isScrollInProgress) {
+            if (state.isScrollInProgress)
                 PositionIndicatorVisibility.Show
-            } else {
+            else
                 PositionIndicatorVisibility.AutoHide
-            }
         } else {
             PositionIndicatorVisibility.Hide
         }
@@ -1032,8 +972,7 @@
     sweepDegrees: Float,
     indicatorWidthPx: Float,
     indicatorStart: Float,
-    indicatorSize: Float,
-    highlightAlpha: Float
+    indicatorSize: Float
 ) {
     val diameter = max(size.width, size.height)
     val arcSize = Size(
@@ -1055,7 +994,7 @@
         style = Stroke(width = indicatorWidthPx, cap = StrokeCap.Round)
     )
     drawArc(
-        lerp(color, Color.White, highlightAlpha),
+        color = color,
         startAngle = startAngleOffset + sweepDegrees * (-0.5f + indicatorStart),
         sweepAngle = sweepDegrees * indicatorSize,
         useCenter = false,
@@ -1073,8 +1012,7 @@
     indicatorWidthPx: Float,
     indicatorHeightPx: Float,
     indicatorStart: Float,
-    indicatorSize: Float,
-    highlightAlpha: Float
+    indicatorSize: Float
 ) {
     val x = if (indicatorOnTheRight) {
         size.width - paddingHorizontalPx - indicatorWidthPx / 2
@@ -1091,7 +1029,7 @@
         cap = StrokeCap.Round
     )
     drawLine(
-        lerp(color, Color.White, highlightAlpha),
+        color,
         lerp(lineTop, lineBottom, indicatorStart),
         lerp(lineTop, lineBottom, indicatorStart + indicatorSize),
         strokeWidth = indicatorWidthPx,
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt
index 56ede21..1a1b0e7 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt
@@ -16,6 +16,11 @@
 
 package androidx.wear.compose.material
 
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.ExitTransition
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.expandHorizontally
 import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -45,6 +50,7 @@
 import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.semantics.Role
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.util.lerp
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
 import androidx.wear.compose.foundation.RevealActionType
 import androidx.wear.compose.foundation.RevealScope
@@ -358,12 +364,13 @@
 /**
  * A class containing the details required for describing the content of an action composable.
  * Both composables, [icon] and [label] are optional, however it is expected that at least one is
- * provided.
+ * provided. See the parameters below on how these are used based on action.
  *
- * @param icon A slot for providing the icon for this [SwipeToReveal] action
+ * @param icon A slot for providing the icon for this [SwipeToReveal] action. This is mandatory for
+ * primary and secondary action. It is recommended to not use this for undo action.
  * @param label A slot for providing a text label for this [SwipeToRevealAction] action. The
  * content provided here will be used in different perspective based on the action type
- * (primary action, secondary action or undo action).
+ * (primary action or undo action). It is recommended to not use this for secondary action.
  * @param modifier The [Modifier] to be applied on the action.
  * @param actionType The [RevealActionType] that gets applied to [RevealState.lastActionType] when
  * this action is clicked.
@@ -527,9 +534,11 @@
                     content = action.icon
                 )
             }
-            if (abs(revealState.offset) > revealOffset && action.label != null) {
-                Spacer(Modifier.size(5.dp))
-                action.label.invoke()
+            if (action.label != null) {
+                ActionLabel(
+                    revealState = revealState,
+                    content = action.label
+                )
             }
         }
     }
@@ -537,7 +546,7 @@
 
 @OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
 @Composable
-private fun RevealScope.UndoAction(
+private fun UndoAction(
     revealState: RevealState,
     undoAction: SwipeToRevealAction,
     colors: SwipeToRevealActionColors
@@ -584,11 +593,14 @@
             ((-revealState.offset - revealOffset * 0.5f) / (revealOffset * 0.25f))
                 .coerceIn(0.0f, 1.0f)
         else 1f
-    // Scale icons from 50% to 100% between 50% and 100% of the progress
+    // Scale icons from 70% to 100% between 50% and 100% of the progress
     val iconScale =
         if (revealOffset > 0)
-            ((-revealState.offset - revealOffset * 0.5f) / revealOffset)
-                .coerceIn(0.0f, 0.5f) + 0.5f
+            lerp(
+                start = 0.7f,
+                stop = 1.0f,
+                fraction = (-revealState.offset - revealOffset * 0.5f) / revealOffset + 0.5f
+            )
         else 1f
     Box(
         modifier = Modifier.graphicsLayer {
@@ -600,3 +612,29 @@
         content()
     }
 }
+
+@OptIn(ExperimentalWearFoundationApi::class)
+@Composable
+private fun RevealScope.ActionLabel(
+    revealState: RevealState,
+    content: @Composable () -> Unit
+) {
+    val labelAlpha = animateFloatAsState(
+        targetValue = if (abs(revealState.offset) > revealOffset) 1f else 0f,
+        animationSpec = tween(
+            durationMillis = RAPID,
+            delayMillis = RAPID
+        ),
+        label = "ActionLabelAlpha"
+    )
+    AnimatedVisibility(
+        visible = abs(revealState.offset) > revealOffset,
+        enter = expandHorizontally(animationSpec = tween(durationMillis = RAPID)),
+        exit = ExitTransition.None
+    ) {
+        Box(modifier = Modifier.graphicsLayer { alpha = labelAlpha.value }) {
+            Spacer(Modifier.size(5.dp))
+            content.invoke()
+        }
+    }
+}
diff --git a/wear/compose/compose-material3/api/current.txt b/wear/compose/compose-material3/api/current.txt
index 9b379c2..e22ff32 100644
--- a/wear/compose/compose-material3/api/current.txt
+++ b/wear/compose/compose-material3/api/current.txt
@@ -57,27 +57,29 @@
   }
 
   @androidx.compose.runtime.Immutable public final class CardColors {
-    ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor);
+    ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor, long subtitleColor);
     method public long getAppNameColor();
     method public androidx.compose.ui.graphics.painter.Painter getContainerPainter();
     method public long getContentColor();
+    method public long getSubtitleColor();
     method public long getTimeColor();
     method public long getTitleColor();
     property public final long appNameColor;
     property public final androidx.compose.ui.graphics.painter.Painter containerPainter;
     property public final long contentColor;
+    property public final long subtitleColor;
     property public final long timeColor;
     property public final long titleColor;
   }
 
   public final class CardDefaults {
-    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
     method public float getAppImageSize();
     method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
-    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter imageWithScrimBackgroundPainter(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush);
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedCardBorder(optional long outlineColor, optional float borderWidth);
-    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
     property public final float AppImageSize;
     property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
     field public static final androidx.wear.compose.material3.CardDefaults INSTANCE;
@@ -87,7 +89,7 @@
     method @androidx.compose.runtime.Composable public static void AppCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> appName, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? appImage, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? time, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? subtitle, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function0<kotlin.Unit>? content);
   }
 
   @androidx.compose.runtime.Immutable public final class CheckboxColors {
diff --git a/wear/compose/compose-material3/api/restricted_current.txt b/wear/compose/compose-material3/api/restricted_current.txt
index 9b379c2..e22ff32 100644
--- a/wear/compose/compose-material3/api/restricted_current.txt
+++ b/wear/compose/compose-material3/api/restricted_current.txt
@@ -57,27 +57,29 @@
   }
 
   @androidx.compose.runtime.Immutable public final class CardColors {
-    ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor);
+    ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor, long subtitleColor);
     method public long getAppNameColor();
     method public androidx.compose.ui.graphics.painter.Painter getContainerPainter();
     method public long getContentColor();
+    method public long getSubtitleColor();
     method public long getTimeColor();
     method public long getTitleColor();
     property public final long appNameColor;
     property public final androidx.compose.ui.graphics.painter.Painter containerPainter;
     property public final long contentColor;
+    property public final long subtitleColor;
     property public final long timeColor;
     property public final long titleColor;
   }
 
   public final class CardDefaults {
-    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
     method public float getAppImageSize();
     method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
-    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter imageWithScrimBackgroundPainter(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush);
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedCardBorder(optional long outlineColor, optional float borderWidth);
-    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
     property public final float AppImageSize;
     property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
     field public static final androidx.wear.compose.material3.CardDefaults INSTANCE;
@@ -87,7 +89,7 @@
     method @androidx.compose.runtime.Composable public static void AppCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> appName, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? appImage, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? time, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? subtitle, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function0<kotlin.Unit>? content);
   }
 
   @androidx.compose.runtime.Immutable public final class CheckboxColors {
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
index e485230..9180758 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
@@ -35,6 +35,7 @@
 import androidx.wear.compose.material3.CardDefaults
 import androidx.wear.compose.material3.ListHeader
 import androidx.wear.compose.material3.Text
+import androidx.wear.compose.material3.TitleCard
 import androidx.wear.compose.material3.samples.AppCardSample
 import androidx.wear.compose.material3.samples.AppCardWithIconSample
 import androidx.wear.compose.material3.samples.CardSample
@@ -43,6 +44,7 @@
 import androidx.wear.compose.material3.samples.OutlinedTitleCardSample
 import androidx.wear.compose.material3.samples.TitleCardSample
 import androidx.wear.compose.material3.samples.TitleCardWithImageSample
+import androidx.wear.compose.material3.samples.TitleCardWithSubtitleAndTimeSample
 
 @Composable
 fun CardDemo() {
@@ -62,7 +64,12 @@
 
         item { ListHeader { Text("Title card") } }
         item { TitleCardSample() }
+        item { TitleCardWithSubtitleDemo() }
+        item { TitleCardWithSubtitleAndTimeSample() }
+        item { TitleCardWithContentSubtitleAndTimeDemo() }
         item { OutlinedTitleCardSample() }
+        item { OutlinedTitleCardWithSubtitleDemo() }
+        item { OutlinedTitleCardWithSubtitleAndTimeDemo() }
 
         item { ListHeader { Text("Image card") } }
         item { TitleCardWithImageSample() }
@@ -90,3 +97,47 @@
         )
     }
 }
+
+@Composable
+private fun OutlinedTitleCardWithSubtitleAndTimeDemo() {
+    TitleCard(
+        onClick = { /* Do something */ },
+        time = { Text("now") },
+        title = { Text("Title card") },
+        subtitle = { Text("Subtitle") },
+        colors = CardDefaults.outlinedCardColors(),
+        border = CardDefaults.outlinedCardBorder(),
+    )
+}
+
+@Composable
+fun TitleCardWithSubtitleDemo() {
+    TitleCard(
+        onClick = { /* Do something */ },
+        title = { Text("Title card") },
+        subtitle = { Text("Subtitle") }
+    )
+}
+
+@Composable
+fun TitleCardWithContentSubtitleAndTimeDemo() {
+    TitleCard(
+        onClick = { /* Do something */ },
+        time = { Text("now") },
+        title = { Text("Title card") },
+        subtitle = { Text("Subtitle") }
+    ) {
+        Text("Card content")
+    }
+}
+
+@Composable
+fun OutlinedTitleCardWithSubtitleDemo() {
+    TitleCard(
+        onClick = { /* Do something */ },
+        title = { Text("Title card") },
+        subtitle = { Text("Subtitle") },
+        colors = CardDefaults.outlinedCardColors(),
+        border = CardDefaults.outlinedCardBorder(),
+    )
+}
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
index 8e83f1e..3b4c458 100644
--- a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
@@ -95,6 +95,17 @@
 
 @Sampled
 @Composable
+fun TitleCardWithSubtitleAndTimeSample() {
+    TitleCard(
+        onClick = { /* Do something */ },
+        time = { Text("now") },
+        title = { Text("Title card") },
+        subtitle = { Text("Subtitle") }
+    )
+}
+
+@Sampled
+@Composable
 fun TitleCardWithImageSample() {
     TitleCard(
         onClick = { /* Do something */ },
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
index f9d3804..01cec23 100644
--- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
@@ -140,6 +140,42 @@
     }
 
     @Test
+    fun title_card_with_time_and_subtitle_ltr() =
+        verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+            sampleTitleCardWithTimeAndSubtitle()
+        }
+
+    @Test
+    fun title_card_with_time_and_subtitle_disabled() =
+        verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+            sampleTitleCardWithTimeAndSubtitle(enabled = false)
+        }
+
+    @Test
+    fun title_card_with_time_and_subtitle_rtl() =
+        verifyScreenshot(layoutDirection = LayoutDirection.Rtl) {
+            sampleTitleCardWithTimeAndSubtitle()
+        }
+
+    @Test
+    fun title_card_with_content_time_and_subtitle_ltr() =
+        verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+            sampleTitleCardWithContentTimeAndSubtitle()
+        }
+
+    @Test
+    fun title_card_with_content_time_and_subtitle_disabled() =
+        verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+            sampleTitleCardWithContentTimeAndSubtitle(enabled = false)
+        }
+
+    @Test
+    fun title_card_with_content_time_and_subtitle_rtl() =
+        verifyScreenshot(layoutDirection = LayoutDirection.Rtl) {
+            sampleTitleCardWithContentTimeAndSubtitle()
+        }
+
+    @Test
     fun title_card_image_background() = verifyScreenshot {
         sampleTitleCard(
             colors = CardDefaults.imageCardColors(
@@ -226,6 +262,36 @@
         }
     }
 
+    @Composable
+    private fun sampleTitleCardWithTimeAndSubtitle(
+        enabled: Boolean = true
+    ) {
+        TitleCard(
+            enabled = enabled,
+            onClick = {},
+            time = { Text("XXm") },
+            title = { Text("TitleCard") },
+            subtitle = { Text("Subtitle") },
+            modifier = Modifier.testTag(TEST_TAG),
+        )
+    }
+
+    @Composable
+    private fun sampleTitleCardWithContentTimeAndSubtitle(
+        enabled: Boolean = true
+    ) {
+        TitleCard(
+            enabled = enabled,
+            onClick = {},
+            time = { Text("XXm") },
+            title = { Text("TitleCard") },
+            subtitle = { Text("Subtitle") },
+            modifier = Modifier.testTag(TEST_TAG),
+        ) {
+            Text("Card content")
+        }
+    }
+
     private fun verifyScreenshot(
         layoutDirection: LayoutDirection = LayoutDirection.Ltr,
         content: @Composable () -> Unit
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
index 80719e0..55db445 100644
--- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
@@ -298,6 +298,40 @@
         assertEquals(expectedContentColor, actualContentColor)
     }
 
+    @Test
+    public fun title_card_with_time_and_subtitle_gives_default_colors() {
+        var expectedTimeColor = Color.Transparent
+        var expectedSubtitleColor = Color.Transparent
+        var expectedTitleColor = Color.Transparent
+        var actualTimeColor = Color.Transparent
+        var actualSubtitleColor = Color.Transparent
+        var actualTitleColor = Color.Transparent
+        val testBackground = Color.White
+
+        rule.setContentWithTheme {
+            expectedTimeColor = MaterialTheme.colorScheme.onSurfaceVariant
+            expectedSubtitleColor = MaterialTheme.colorScheme.tertiary
+            expectedTitleColor = MaterialTheme.colorScheme.onSurface
+            Box(
+                modifier = Modifier
+                    .fillMaxSize()
+                    .background(testBackground)
+            ) {
+                TitleCard(
+                    onClick = {},
+                    time = { actualTimeColor = LocalContentColor.current },
+                    subtitle = { actualSubtitleColor = LocalContentColor.current },
+                    title = { actualTitleColor = LocalContentColor.current },
+                    modifier = Modifier.testTag(TEST_TAG)
+                )
+            }
+        }
+
+        assertEquals(expectedTimeColor, actualTimeColor)
+        assertEquals(expectedSubtitleColor, actualSubtitleColor)
+        assertEquals(expectedTitleColor, actualTitleColor)
+    }
+
     @RequiresApi(Build.VERSION_CODES.O)
     @Test
     fun outlined_card_has_outlined_border_and_transparent() {
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
index 34b481c..b2d01a4 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
@@ -20,14 +20,19 @@
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.interaction.Interaction
 import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.RowScope
 import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.Immutable
 import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
@@ -233,33 +238,31 @@
 }
 
 /**
- * Opinionated Wear Material 3 [Card] that offers a specific 3 slot layout to show interactive
+ * Opinionated Wear Material 3 [Card] that offers a specific layout to show interactive
  * information about an application, e.g. a message. TitleCards are designed for use within an
  * application.
  *
- * The first row of the layout has two slots. 1. a start aligned title. The title text is
- * expected to be a maximum of 2 lines of text.
- * 2. An optional time that the application activity has occurred shown at the
- * end of the row, expected to be an end aligned [Text] composable showing a time relevant to the
- * contents of the [Card].
+ * The [time], [subtitle] and [content] fields are optional,
+ * but it is expected that at least one of these is provided.
+ * The layout will vary according to which fields are supplied - see samples.
  *
- * The rest of the [Card] contains the content which is expected to be [Text] or a contained
- * [Image].
+ * If the [content] is text it can be single or multiple line and is expected to be Top and Start
+ * aligned. When [subtitle] is used [content] shouldn't
+ * exceed 2 lines height. Overall the [title], [content] and [subtitle] text should be no more than
+ * 5 rows of text combined.
  *
- * If the content is text it can be single or multiple line and is expected to be Top and Start
- * aligned and of type of [Typography.bodyMedium].
- *
- * Overall the [title] and [content] text should be no more than 5 rows of text combined.
- *
- * If more than one composable is provided in the content slot it is the responsibility of the
+ * If more than one composable is provided in the [content] slot it is the responsibility of the
  * caller to determine how to layout the contents, e.g. provide either a row or a column.
  *
- * Example of a [TitleCard]:
+ * Example of a [TitleCard] with [time], [title] and [content]:
  * @sample androidx.wear.compose.material3.samples.TitleCardSample
  *
- * Example of a [TitleCard] with image:
+ * Example of a [TitleCard] with a background image:
  * @sample androidx.wear.compose.material3.samples.TitleCardWithImageSample
  *
+ * Example of a [TitleCard] with [time], [title] and [subtitle]:
+ * @sample androidx.wear.compose.material3.samples.TitleCardWithSubtitleAndTimeSample
+ *
  * Example of an outlined [TitleCard]:
  * @sample androidx.wear.compose.material3.samples.OutlinedTitleCardSample
  *
@@ -268,9 +271,14 @@
  * guide.
  *
  * @param onClick Will be called when the user clicks the card
- * @param title A slot for displaying the title of the card, expected to be one or two lines of text
- * of [Typography.titleMedium]
+ * @param title A slot for displaying the title of the card, expected to be one or
+ * two lines of text.
  * @param modifier Modifier to be applied to the card
+ * @param time An optional slot for displaying the time relevant to the contents of the card,
+ * expected to be a short piece of text. Depending on whether we have a [content]
+ * or not, can be placed at the end of the [title] line or above it.
+ * @param subtitle An optional slot for displaying the subtitle of the card, expected to be
+ * one line of text.
  * @param enabled Controls the enabled state of the card. When false, this card will not
  * be clickable and there will be no ripple effect on click. Wear cards do not have any specific
  * elevation or alpha differences when not enabled - they are simply not clickable.
@@ -285,62 +293,87 @@
  * [Interaction]s for this card. You can create and pass in your own remembered
  * [MutableInteractionSource] if you want to observe [Interaction]s and customize the
  * appearance / behavior of this card in different [Interaction]s.
- * @param time An optional slot for displaying the time relevant to the contents of the card,
- * expected to be a short piece of end aligned text.
- * @param content The main slot for a content of this card
+ * @param content The optional body content of the card. If not provided then title
+ * and subtitle are expected to be provided
  */
 @Composable
 fun TitleCard(
     onClick: () -> Unit,
     title: @Composable RowScope.() -> Unit,
     modifier: Modifier = Modifier,
+    time: @Composable (() -> Unit)? = null,
+    subtitle: @Composable (ColumnScope.() -> Unit)? = null,
     enabled: Boolean = true,
     shape: Shape = MaterialTheme.shapes.large,
     colors: CardColors = CardDefaults.cardColors(),
     border: BorderStroke? = null,
     contentPadding: PaddingValues = CardDefaults.ContentPadding,
     interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
-    time: @Composable (RowScope.() -> Unit)? = null,
-    content: @Composable () -> Unit,
+    content: @Composable (() -> Unit)? = null,
 ) {
-    androidx.wear.compose.materialcore.TitleCard(
+    val timeWithTextStyle: @Composable () -> Unit = {
+        time?.let {
+            CompositionLocalProvider(
+                values = arrayOf(
+                    LocalContentColor provides colors.timeColor,
+                    LocalTextStyle provides MaterialTheme.typography.labelSmall
+                ),
+                content = time
+            )
+        }
+    }
+
+    androidx.wear.compose.materialcore.Card(
         onClick = onClick,
         modifier = modifier,
         enabled = enabled,
-        shape = shape,
+        containerPainter = colors.containerPainter,
         border = border,
         contentPadding = contentPadding,
-        containerPainter = colors.containerPainter,
         interactionSource = interactionSource,
-        title = {
-            CompositionLocalProvider(
-                LocalContentColor provides colors.titleColor,
-                LocalTextStyle provides MaterialTheme.typography.titleMedium,
-            ) {
-                title()
+        role = null,
+        shape = shape
+    ) {
+        Column {
+            if (content == null) {
+                timeWithTextStyle()
+                Spacer(modifier = Modifier.height(4.dp))
             }
-        },
-        time = {
-            time?.let {
-                Spacer(modifier = Modifier.weight(1.0f))
+            Row(
+                modifier = Modifier.fillMaxWidth(),
+                verticalAlignment = Alignment.CenterVertically
+            ) {
                 CompositionLocalProvider(
-                    LocalContentColor provides colors.timeColor,
-                    LocalTextStyle provides MaterialTheme.typography.labelSmall,
+                    LocalContentColor provides colors.titleColor,
+                    LocalTextStyle provides MaterialTheme.typography.titleMedium,
                 ) {
-                    time()
+                    title()
+                }
+                if (content != null) {
+                    Spacer(modifier = Modifier.weight(1.0f))
+                    timeWithTextStyle()
                 }
             }
-        },
-        content = {
-            CompositionLocalProvider(
-                values = arrayOf(
-                    LocalContentColor provides colors.contentColor,
-                    LocalTextStyle provides MaterialTheme.typography.bodyLarge
-                ),
-                content = content
-            )
+            content?.let {
+                CompositionLocalProvider(
+                    values = arrayOf(
+                        LocalContentColor provides colors.contentColor,
+                        LocalTextStyle provides MaterialTheme.typography.bodyLarge
+                    ),
+                    content = content
+                )
+            }
+            subtitle?.let {
+                Spacer(modifier = Modifier.height(if (content != null) 2.dp else 4.dp))
+                CompositionLocalProvider(
+                    LocalContentColor provides colors.subtitleColor,
+                    LocalTextStyle provides MaterialTheme.typography.titleMedium
+                ) {
+                    subtitle()
+                }
+            }
         }
-    )
+    }
 }
 
 /**
@@ -418,6 +451,7 @@
      * @param appNameColor the color used for appName, only applies to [AppCard].
      * @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
      * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+     * @param subtitleColor the color used for subtitle, applies to [TitleCard].
      */
     @Composable
     fun cardColors(
@@ -426,12 +460,14 @@
         appNameColor: Color = contentColor,
         timeColor: Color = contentColor,
         titleColor: Color = MaterialTheme.colorScheme.onSurface,
+        subtitleColor: Color = MaterialTheme.colorScheme.tertiary,
     ): CardColors = CardColors(
         containerPainter = remember(containerColor) { ColorPainter(containerColor) },
         contentColor = contentColor,
         appNameColor = appNameColor,
         timeColor = timeColor,
-        titleColor = titleColor
+        titleColor = titleColor,
+        subtitleColor = subtitleColor
     )
 
     /**
@@ -442,6 +478,7 @@
      * @param appNameColor the color used for appName, only applies to [AppCard].
      * @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
      * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+     * @param subtitleColor the color used for subtitle, applies to [TitleCard].
      */
     @Composable
     fun outlinedCardColors(
@@ -449,12 +486,14 @@
         appNameColor: Color = contentColor,
         timeColor: Color = contentColor,
         titleColor: Color = MaterialTheme.colorScheme.onSurface,
+        subtitleColor: Color = MaterialTheme.colorScheme.tertiary
     ): CardColors = CardColors(
         containerPainter = remember { ColorPainter(Color.Transparent) },
         contentColor = contentColor,
         appNameColor = appNameColor,
         timeColor = timeColor,
-        titleColor = titleColor
+        titleColor = titleColor,
+        subtitleColor = subtitleColor
     )
 
     /**
@@ -466,6 +505,7 @@
      * @param appNameColor the color used for appName, only applies to [AppCard].
      * @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
      * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+     * @param subtitleColor the color used for subtitle, applies to [TitleCard].
      */
     @Composable
     fun imageCardColors(
@@ -474,12 +514,14 @@
         appNameColor: Color = contentColor,
         timeColor: Color = contentColor,
         titleColor: Color = contentColor,
+        subtitleColor: Color = MaterialTheme.colorScheme.tertiary
     ): CardColors = CardColors(
         containerPainter = containerPainter,
         contentColor = contentColor,
         appNameColor = appNameColor,
         timeColor = timeColor,
-        titleColor = titleColor
+        titleColor = titleColor,
+        subtitleColor = subtitleColor
     )
 
     /**
@@ -549,6 +591,7 @@
  * @param appNameColor the color used for appName, only applies to [AppCard].
  * @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
  * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+ * @param subtitleColor the color used for subtitle, applies to [TitleCard].
  */
 @Immutable
 class CardColors(
@@ -557,6 +600,7 @@
     val appNameColor: Color,
     val timeColor: Color,
     val titleColor: Color,
+    val subtitleColor: Color
 ) {
     override fun equals(other: Any?): Boolean {
         if (this === other) return true
@@ -567,6 +611,7 @@
         if (appNameColor != other.appNameColor) return false
         if (timeColor != other.timeColor) return false
         if (titleColor != other.titleColor) return false
+        if (subtitleColor != other.subtitleColor) return false
 
         return true
     }
@@ -577,6 +622,7 @@
         result = 31 * result + appNameColor.hashCode()
         result = 31 * result + timeColor.hashCode()
         result = 31 * result + titleColor.hashCode()
+        result = 31 * result + subtitleColor.hashCode()
         return result
     }
 }
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
index a13d6d5..fc9ebf7 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
@@ -38,7 +38,6 @@
 import androidx.wear.compose.foundation.samples.SimpleScalingLazyColumnWithSnap
 import androidx.wear.compose.foundation.samples.SimpleSwipeToDismissBox
 import androidx.wear.compose.foundation.samples.StatefulSwipeToDismissBox
-import androidx.wear.compose.foundation.samples.SwipeToRevealWithExpandables
 import androidx.wear.compose.integration.demos.common.ComposableDemo
 import androidx.wear.compose.integration.demos.common.DemoCategory
 import androidx.wear.compose.material.samples.SwipeToRevealCardSample
@@ -152,33 +151,28 @@
         DemoCategory(
             "Swipe To Reveal",
             listOf(
-                ComposableDemo("Swipe To Reveal Chip") {
-                    SwipeToRevealChips()
-                },
-                ComposableDemo("Swipe To Reveal Card") {
-                    SwipeToRevealCards()
-                },
-                ComposableDemo("Swipe To Reveal - Custom") {
-                    SwipeToRevealWithSingleAction()
-                },
-                ComposableDemo("Swipe To Reveal - RTL") {
-                    SwipeToRevealInRtl()
-                },
-                ComposableDemo("Swipe To Reveal - Expandable") {
-                    SwipeToRevealWithExpandables()
-                },
-                ComposableDemo("Swipe To Reveal - Undo") {
-                    SwipeToRevealWithDifferentUndo()
-                },
-                ComposableDemo("S2R + EdgeSwipeToDismiss") { params ->
-                    SwipeToRevealWithEdgeSwipeToDismiss(params.navigateBack)
-                },
-                ComposableDemo("Material S2R Chip") {
-                    SwipeToRevealChipSample()
-                },
-                ComposableDemo("Material S2R Card") {
-                    SwipeToRevealCardSample()
-                }
+                DemoCategory(
+                    "Samples",
+                    listOf(
+                        ComposableDemo("Material S2R Chip") { params ->
+                            SwipeToRevealChipSample(params.swipeToDismissBoxState)
+                        },
+                        ComposableDemo("Material S2R Card") { params ->
+                            SwipeToRevealCardSample(params.swipeToDismissBoxState)
+                        },
+                    )
+                ),
+                DemoCategory(
+                    "Demos",
+                    listOf(
+                        ComposableDemo("S2R Chip") { params ->
+                            SwipeToRevealChips(params.swipeToDismissBoxState)
+                        },
+                        ComposableDemo("S2R Card") { params ->
+                            SwipeToRevealCards(params.swipeToDismissBoxState)
+                        },
+                    )
+                )
             )
         )
     ),
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt
index 43c5978..d740704 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt
@@ -113,6 +113,7 @@
 fun ControllablePositionIndicator() {
     val position = remember { mutableFloatStateOf(0.2f) }
     val size = remember { mutableFloatStateOf(0.5f) }
+    val visibility = remember { mutableStateOf(PositionIndicatorVisibility.Show) }
     var alignment by remember { mutableIntStateOf(0) }
     var reverseDirection by remember { mutableStateOf(false) }
     var layoutDirection by remember { mutableStateOf(false) }
@@ -130,7 +131,7 @@
         Scaffold(
             positionIndicator = {
                 PositionIndicator(
-                    state = CustomPositionIndicatorState(position, size),
+                    state = CustomPositionIndicatorState(position, size, visibility),
                     indicatorHeight = 76.dp,
                     indicatorWidth = 6.dp,
                     paddingHorizontal = 5.dp,
@@ -146,7 +147,7 @@
                     .padding(horizontal = 20.dp),
                 contentAlignment = Alignment.Center
             ) {
-                Column {
+                Column(horizontalAlignment = Alignment.CenterHorizontally) {
                     Text("Position")
                     DefaultInlineSlider(
                         modifier = Modifier.height(40.dp),
@@ -179,6 +180,24 @@
                             )
                         }
                     }
+                    Button(onClick = {
+                        visibility.value = when (visibility.value) {
+                            PositionIndicatorVisibility.Show ->
+                                PositionIndicatorVisibility.AutoHide
+                            PositionIndicatorVisibility.AutoHide ->
+                                PositionIndicatorVisibility.Hide
+                            else ->
+                                PositionIndicatorVisibility.Show
+                        }
+                    }) {
+                        Text(
+                            when (visibility.value) {
+                                PositionIndicatorVisibility.AutoHide -> "AutoHide"
+                                PositionIndicatorVisibility.Show -> "Show"
+                                else -> "Hide"
+                            }
+                        )
+                    }
                 }
             }
         }
@@ -217,16 +236,20 @@
 
 internal class CustomPositionIndicatorState(
     private val position: State<Float>,
-    private val size: State<Float>
+    private val size: State<Float>,
+    private val visibility: State<PositionIndicatorVisibility>
 ) : PositionIndicatorState {
     override val positionFraction get() = position.value
     override fun sizeFraction(scrollableContainerSizePx: Float) = size.value
-    override fun visibility(scrollableContainerSizePx: Float) = PositionIndicatorVisibility.Show
+    override fun visibility(scrollableContainerSizePx: Float) = visibility.value
 
     override fun equals(other: Any?) =
         other is CustomPositionIndicatorState &&
             position == other.position &&
-            size == other.size
+            size == other.size &&
+            visibility == other.visibility
 
-    override fun hashCode(): Int = position.hashCode() + 31 * size.hashCode()
+    override fun hashCode(): Int = position.hashCode() +
+        31 * size.hashCode() +
+        31 * visibility.hashCode()
 }
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
index e37c1fc..5a6ec03 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.compose.integration.demos
 
-import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
@@ -26,7 +25,6 @@
 import androidx.compose.material.icons.filled.Email
 import androidx.compose.material.icons.outlined.Add
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableIntStateOf
@@ -35,24 +33,23 @@
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
+import androidx.compose.ui.semantics.CustomAccessibilityAction
+import androidx.compose.ui.semantics.customActions
+import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.dp
 import androidx.wear.compose.foundation.ExpandableState
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
 import androidx.wear.compose.foundation.RevealActionType
 import androidx.wear.compose.foundation.RevealValue
-import androidx.wear.compose.foundation.SwipeToDismissBox
-import androidx.wear.compose.foundation.createAnchors
+import androidx.wear.compose.foundation.SwipeToDismissBoxState
 import androidx.wear.compose.foundation.edgeSwipeToDismiss
 import androidx.wear.compose.foundation.expandableItem
 import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
 import androidx.wear.compose.foundation.rememberExpandableState
 import androidx.wear.compose.foundation.rememberExpandableStateMapping
 import androidx.wear.compose.foundation.rememberRevealState
-import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
 import androidx.wear.compose.material.AppCard
 import androidx.wear.compose.material.Chip
 import androidx.wear.compose.material.ChipDefaults
@@ -67,92 +64,14 @@
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 
-@Composable
-fun SwipeToRevealChips() {
-    val expandableStates = List(3) { rememberExpandableState(initiallyExpanded = true) }
-    ScalingLazyColumn(
-        modifier = Modifier.fillMaxSize()
-    ) {
-        item {
-            Text(text = "Swipe To Reveal Chips")
-            Spacer(Modifier.size(15.dp))
-        }
-        repeat(3) {
-            val currentState = expandableStates[it]
-            expandableItem(
-                state = currentState
-            ) { expanded ->
-                if (expanded) {
-                    SwipeToRevealChipExpandable(
-                        expandableState = currentState
-                    )
-                } else {
-                    Spacer(modifier = Modifier.width(200.dp))
-                }
-            }
-        }
-    }
-}
-
-@Composable
-fun SwipeToRevealCards() {
-    val emailMap = mutableMapOf(
-        "Android In" to
-            "Please add Swipe to dismiss to the demo.",
-        "Google Bangalore" to
-            "Hey everyone, We are pleased to inform that we are starting a new batch.",
-        "Google India" to
-            "Hi Googlers, Please be prepared for the new changes."
-    )
-    val expandableStates = List(emailMap.size) { rememberExpandableState(initiallyExpanded = true) }
-    ScalingLazyColumn(
-        modifier = Modifier.fillMaxSize()
-    ) {
-        item {
-            Text(text = "Swipe To Reveal Cards")
-            Spacer(Modifier.size(10.dp))
-        }
-        repeat(emailMap.size) {
-            val currentState = expandableStates[it]
-            val currentFrom = emailMap.keys.elementAt(it)
-            val currentEmail = emailMap.values.elementAt(it)
-            expandableItem(
-                state = currentState
-            ) { expanded ->
-                if (expanded) {
-                    SwipeToRevealCardExpandable(
-                        expandableState = currentState,
-                        from = currentFrom,
-                        email = currentEmail
-                    )
-                } else {
-                    Spacer(modifier = Modifier.width(200.dp))
-                }
-            }
-        }
-    }
-}
-
-@Composable
-fun SwipeToRevealWithSingleAction() {
-    SwipeToRevealSingleAction()
-}
-
-/**
- * Swipe to reveal in RTL. This is should be identical to LTR.
- */
-@Composable
-fun SwipeToRevealInRtl() {
-    SwipeToRevealSingleAction(LayoutDirection.Rtl)
-}
-
 @OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
 @Composable
-fun SwipeToRevealWithDifferentUndo() {
+fun SwipeToRevealChips(swipeToDismissBoxState: SwipeToDismissBoxState) {
     val expandableStateMapping = rememberExpandableStateMapping<Int>(
         initiallyExpanded = { true }
     )
     var itemCount by remember { mutableIntStateOf(3) }
+
     ScalingLazyColumn(
         modifier = Modifier.fillMaxSize()
     ) {
@@ -166,9 +85,47 @@
                 state = currentState
             ) { expanded ->
                 val revealState = rememberRevealState()
+                val coroutineScope = rememberCoroutineScope()
+                val deleteItem = {
+                    coroutineScope.launch {
+                        revealState.animateTo(RevealValue.Revealed)
+
+                        // hide the content after some time if the state is still revealed
+                        delay(1500)
+                        if (revealState.currentValue == RevealValue.Revealed) {
+                            currentState.expanded = false
+                        }
+                    }
+                }
+                val addItem = {
+                    coroutineScope.launch {
+                        revealState.animateTo(RevealValue.Revealed)
+                        itemCount++
+
+                        // reset the state after some delay if the state is still revealed
+                        delay(2000)
+                        if (revealState.currentValue == RevealValue.Revealed) {
+                            revealState.animateTo(RevealValue.Covered)
+                            revealState.lastActionType = RevealActionType.None
+                        }
+                    }
+                }
                 if (expanded) {
-                    val coroutineScope = rememberCoroutineScope()
                     SwipeToRevealChip(
+                        modifier = Modifier
+                            .edgeSwipeToDismiss(swipeToDismissBoxState)
+                            .semantics {
+                                customActions = listOf(
+                                    CustomAccessibilityAction("Delete") {
+                                        deleteItem()
+                                        true
+                                    },
+                                    CustomAccessibilityAction("Duplicate") {
+                                        addItem()
+                                        true
+                                    }
+                                )
+                            },
                         revealState = revealState,
                         primaryAction = SwipeToRevealDefaults.primaryAction(
                             icon = {
@@ -180,41 +137,23 @@
                             label = { Text(text = "Delete") }
                         ) {
                             // Remove the item
-                            coroutineScope.launch {
-                                revealState.animateTo(RevealValue.Revealed)
-
-                                // hide the content after some time if the state is still revealed
-                                delay(1500)
-                                if (revealState.currentValue == RevealValue.Revealed) {
-                                    currentState.expanded = false
-                                }
-                            }
+                            deleteItem()
                         },
                         secondaryAction = SwipeToRevealDefaults.secondaryAction(
                             icon = {
                                 Icon(Icons.Outlined.Add, contentDescription = "Duplicate")
                             },
                         ) {
-                            coroutineScope.launch {
-                                revealState.animateTo(RevealValue.Revealed)
-                                itemCount++
-
-                                // reset the state after some delay if the state is still revealed
-                                delay(2000)
-                                if (revealState.currentValue == RevealValue.Revealed) {
-                                    revealState.animateTo(RevealValue.Covered)
-                                    revealState.lastActionType = RevealActionType.None
-                                }
-                            }
+                            addItem()
                         },
                         undoPrimaryAction = SwipeToRevealDefaults.undoAction(
                             label = { Text("Undo Primary Action") }
                         ) {
-                          coroutineScope.launch {
-                              // reset the state when undo is clicked
-                              revealState.animateTo(RevealValue.Covered)
-                              revealState.lastActionType = RevealActionType.None
-                          }
+                            coroutineScope.launch {
+                                // reset the state when undo is clicked
+                                revealState.animateTo(RevealValue.Covered)
+                                revealState.lastActionType = RevealActionType.None
+                            }
                         },
                         undoSecondaryAction = SwipeToRevealDefaults.undoAction(
                             label = { Text("Undo Secondary Action") }
@@ -244,107 +183,43 @@
     }
 }
 
-@OptIn(ExperimentalWearMaterialApi::class, ExperimentalWearFoundationApi::class)
 @Composable
-fun SwipeToRevealWithEdgeSwipeToDismiss(
-    navigateBack: () -> Unit
-) {
-    val swipeToDismissBoxState = rememberSwipeToDismissBoxState()
-    SwipeToDismissBox(
-        state = swipeToDismissBoxState,
-        onDismissed = navigateBack
-    ) {
-        ScalingLazyColumn(
-            contentPadding = PaddingValues(0.dp)
-        ) {
-            repeat(5) {
-                item {
-                    SwipeToRevealChip(
-                        modifier = Modifier
-                            .fillMaxWidth()
-                            .edgeSwipeToDismiss(swipeToDismissBoxState),
-                        primaryAction = SwipeToRevealDefaults.primaryAction(
-                            icon = { Icon(SwipeToRevealDefaults.Delete, "Delete") },
-                            label = { Text("Delete") }),
-                        revealState = rememberRevealState()
-                    ) {
-                        Chip(
-                            onClick = { /*TODO*/ },
-                            colors = ChipDefaults.secondaryChipColors(),
-                            modifier = Modifier.fillMaxWidth(),
-                            label = {
-                                Text("S2R Chip with defaults")
-                            }
-                        )
-                    }
-                }
-            }
-        }
-    }
-}
-
-@OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
-@Composable
-private fun SwipeToRevealChipExpandable(
-    expandableState: ExpandableState
-) {
-    val state = rememberRevealState()
-    val coroutineScope = rememberCoroutineScope()
-    var showDialog by remember { mutableStateOf(false) }
-    LaunchedEffect(state.currentValue) {
-        if (state.currentValue == RevealValue.Revealed) {
-            delay(2000)
-            expandableState.expanded = false
-        }
-    }
-    LaunchedEffect(showDialog) {
-        if (!showDialog) {
-            delay(500)
-            state.animateTo(RevealValue.Covered)
-        }
-    }
-    ShowDialog(
-        showDialog = showDialog,
-        onClick = { showDialog = false },
-        onDismiss = {
-            coroutineScope.launch { state.animateTo(RevealValue.Covered) }
-        },
+fun SwipeToRevealCards(swipeToDismissBoxState: SwipeToDismissBoxState) {
+    val emailMap = mutableMapOf(
+        "Android In" to
+            "Please add Swipe to dismiss to the demo.",
+        "Google Bangalore" to
+            "Hey everyone, We are pleased to inform that we are starting a new batch.",
+        "Google India" to
+            "Hi Googlers, Please be prepared for the new changes."
     )
-    SwipeToRevealChip(
-        revealState = state,
-        primaryAction = SwipeToRevealDefaults.primaryAction(
-            icon = { Icon(SwipeToRevealDefaults.Delete, contentDescription = "Delete") },
-            label = { Text(text = "Delete") },
-            onClick = {
-                coroutineScope.launch {
-                    state.animateTo(RevealValue.Revealed)
-                }
-            }
-        ),
-        secondaryAction = SwipeToRevealDefaults.secondaryAction(
-            icon = { Icon(SwipeToRevealDefaults.MoreOptions, contentDescription = "More Options") },
-            actionType = RevealActionType.None, // reset click type since there is no undo for this
-            onClick = { showDialog = true }
-        ),
-        undoPrimaryAction = SwipeToRevealDefaults.undoAction(
-            label = { Text(text = "Undo") },
-            onClick = {
-                coroutineScope.launch {
-                    // reset the state when undo is clicked
-                    state.animateTo(RevealValue.Covered)
-                    state.lastActionType = RevealActionType.None
-                }
-            }
-        ),
+    val expandableStates = List(emailMap.size) { rememberExpandableState(initiallyExpanded = true) }
+    ScalingLazyColumn(
+        modifier = Modifier.fillMaxSize()
     ) {
-        Chip(
-            onClick = { /*TODO*/ },
-            colors = ChipDefaults.secondaryChipColors(),
-            modifier = Modifier.fillMaxWidth(),
-            label = {
-                Text("S2R Chip with defaults")
+        item {
+            Text(text = "Swipe To Reveal Cards")
+            Spacer(Modifier.size(10.dp))
+        }
+        repeat(emailMap.size) {
+            val currentState = expandableStates[it]
+            val currentFrom = emailMap.keys.elementAt(it)
+            val currentEmail = emailMap.values.elementAt(it)
+            expandableItem(
+                state = currentState
+            ) { expanded ->
+                if (expanded) {
+                    SwipeToRevealCardExpandable(
+                        expandableState = currentState,
+                        from = currentFrom,
+                        email = currentEmail,
+                        modifier = Modifier.edgeSwipeToDismiss(swipeToDismissBoxState)
+                    )
+                } else {
+                    Spacer(modifier = Modifier.width(200.dp))
+                }
             }
-        )
+        }
     }
 }
 
@@ -353,7 +228,8 @@
 private fun SwipeToRevealCardExpandable(
     expandableState: ExpandableState,
     from: String,
-    email: String
+    email: String,
+    modifier: Modifier = Modifier
 ) {
     val state = rememberRevealState()
     val coroutineScope = rememberCoroutineScope()
@@ -376,6 +252,20 @@
         onDismiss = { showDialog = false },
     )
     SwipeToRevealCard(
+        modifier = modifier.semantics {
+            customActions = listOf(
+                CustomAccessibilityAction("Delete") {
+                    coroutineScope.launch {
+                        state.animateTo(RevealValue.Revealed)
+                    }
+                    true
+                },
+                CustomAccessibilityAction("More Options") {
+                    showDialog = true
+                    true
+                }
+            )
+        },
         revealState = state,
         primaryAction = SwipeToRevealDefaults.primaryAction(
             icon = { Icon(SwipeToRevealDefaults.Delete, contentDescription = "Delete") },
@@ -424,72 +314,6 @@
     }
 }
 
-@OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
-@Composable
-private fun SwipeToRevealSingleAction(
-    layoutDirection: LayoutDirection = LayoutDirection.Ltr
-) {
-    val itemCount = 2
-    val expandableState = List(itemCount) {
-        rememberExpandableState(initiallyExpanded = true)
-    }
-    val coroutineScope = rememberCoroutineScope()
-    ScalingLazyColumn {
-        item {
-            Text("Swipe to reveal One-Action")
-            Spacer(Modifier.size(10.dp))
-        }
-        repeat(itemCount) { curr ->
-            expandableItem(
-                state = expandableState[curr]
-            ) { expanded ->
-                val state = rememberRevealState(
-                    // Setting anchor to 0.4 since there is only one action.
-                    anchors = createAnchors(revealingAnchor = 0.4f),
-                )
-                if (expanded) {
-                    CompositionLocalProvider(
-                        LocalLayoutDirection provides layoutDirection
-                    ) {
-                        SwipeToRevealChip(
-                            revealState = state,
-                            primaryAction = SwipeToRevealDefaults.primaryAction(
-                                icon = {
-                                    Icon(
-                                        SwipeToRevealDefaults.Delete,
-                                        contentDescription = "Delete"
-                                    )
-                                },
-                                label = { Text(text = "Delete") },
-                                onClick = {
-                                    coroutineScope.launch {
-                                        state.animateTo(RevealValue.Revealed)
-                                    }
-                                }
-                            ),
-                        ) {
-                            Chip(
-                                onClick = { /*TODO*/ },
-                                colors = ChipDefaults.secondaryChipColors(),
-                                modifier = Modifier.fillMaxWidth(),
-                                label = { Text("Try this") }
-                            )
-                        }
-                    }
-                } else {
-                    Spacer(modifier = Modifier.width(200.dp))
-                }
-                LaunchedEffect(state.currentValue) {
-                    if (state.currentValue == RevealValue.Revealed) {
-                        delay(2000)
-                        expandableState[curr].expanded = false
-                    }
-                }
-            }
-        }
-    }
-}
-
 @Composable
 private fun ShowDialog(
     showDialog: Boolean,
diff --git a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt
index 5f979de..53658b0 100644
--- a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt
+++ b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt
@@ -19,27 +19,25 @@
 import android.os.Bundle
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.runtime.getValue
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.State
 import androidx.compose.runtime.mutableFloatStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.semantics.contentDescription
 import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.dp
-import androidx.wear.compose.material.Button
 import androidx.wear.compose.material.PositionIndicator
 import androidx.wear.compose.material.PositionIndicatorState
 import androidx.wear.compose.material.PositionIndicatorVisibility
 import androidx.wear.compose.material.Scaffold
-import androidx.wear.compose.material.Text
 
 class PositionIndicatorActivity : ComponentActivity() {
 
@@ -47,18 +45,18 @@
         super.onCreate(savedInstanceState)
 
         setContent {
-            var fraction by remember {
+            val fraction = remember {
                 mutableFloatStateOf(0f)
             }
-            var sizeFraction by remember {
+            val sizeFraction = remember {
                 mutableFloatStateOf(.25f)
             }
 
-            var visibility by remember {
+            val visibility = remember {
                 mutableStateOf(PositionIndicatorVisibility.Show)
             }
 
-            val pIState = CustomState(fraction, sizeFraction, visibility)
+            val pIState = remember { CustomState(fraction, sizeFraction, visibility) }
 
             Scaffold(modifier = Modifier.fillMaxSize(), positionIndicator = {
                 PositionIndicator(
@@ -69,68 +67,66 @@
                 )
             }) {
                 Column(
-                    modifier = Modifier
-                        .fillMaxHeight()
-                        .fillMaxWidth(.8f),
                     verticalArrangement = Arrangement.Center,
                     horizontalAlignment = Alignment.CenterHorizontally
                 ) {
-                    Button(
-                        modifier = Modifier.semantics {
-                            contentDescription = CHANGE_VISIBILITY
-                        }, onClick = {
-                            visibility = when (visibility) {
-                                PositionIndicatorVisibility.AutoHide ->
-                                    PositionIndicatorVisibility.Hide
-                                PositionIndicatorVisibility.Hide ->
-                                    PositionIndicatorVisibility.Show
+                    Box(modifier = Modifier
+                        .size(30.dp)
+                        .clickable {
+                            visibility.value = when (visibility.value) {
                                 PositionIndicatorVisibility.Show ->
                                     PositionIndicatorVisibility.AutoHide
+
+                                PositionIndicatorVisibility.AutoHide ->
+                                    PositionIndicatorVisibility.Hide
+
+                                PositionIndicatorVisibility.Hide ->
+                                    PositionIndicatorVisibility.Show
+
                                 else -> throw IllegalArgumentException("Invalid visibility type")
                             }
-                        }) {
-                        val text = when (visibility) {
-                            PositionIndicatorVisibility.Show -> "Show"
-                            PositionIndicatorVisibility.AutoHide -> "Auto Hide"
-                            else -> "Hide"
                         }
-                        Text(text = text)
-                    }
+                        .semantics {
+                            contentDescription = CHANGE_VISIBILITY
+                        }
+                    )
 
-                    Button(
-                        modifier = Modifier.semantics {
+                    Box(modifier = Modifier
+                        .size(30.dp)
+                        .clickable {
+                            fraction.floatValue += 0.05f
+                        }
+                        .semantics {
                             contentDescription = INCREASE_POSITION
-                        }, onClick = {
-                            fraction += 0.05f
-                        }) {
-                        Text(text = "Increase position fraction")
-                    }
+                        }
+                    )
 
-                    Button(
-                        modifier = Modifier.semantics {
+                    Box(modifier = Modifier
+                        .size(30.dp)
+                        .clickable {
+                            fraction.floatValue -= 0.05f
+                        }
+                        .semantics {
                             contentDescription = DECREASE_POSITION
-                        }, onClick = {
-                            fraction -= 0.05f
-                        }) {
-                        Text(text = "Decrease position fraction")
-                    }
+                        }
+                    )
                 }
             }
         }
     }
 
     private class CustomState(
-        private val fraction: Float,
-        private val sizeFraction: Float,
-        private val visibility: PositionIndicatorVisibility
+        private val fraction: State<Float>,
+        private val sizeFraction: State<Float>,
+        private val visibility: State<PositionIndicatorVisibility>
     ) : PositionIndicatorState {
         override val positionFraction: Float
-            get() = fraction
+            get() = fraction.value
 
-        override fun sizeFraction(scrollableContainerSizePx: Float): Float = sizeFraction
+        override fun sizeFraction(scrollableContainerSizePx: Float): Float = sizeFraction.value
 
         override fun visibility(scrollableContainerSizePx: Float): PositionIndicatorVisibility =
-            visibility
+            visibility.value
     }
 }
 
diff --git a/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt b/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt
index 70e4175..1f10fd5 100644
--- a/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt
+++ b/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt
@@ -63,27 +63,47 @@
                 startActivityAndWait(intent)
             }
         ) {
-            val buttonShow = device.findObject(By.desc(CHANGE_VISIBILITY))
-            val buttonIncrease = device.findObject(By.desc(INCREASE_POSITION))
-            val buttonDecrease = device.findObject(By.desc(DECREASE_POSITION))
+            val buttonChangeVisibility = device.findObject(By.desc(CHANGE_VISIBILITY))
 
-            // Setting a gesture margin is important otherwise gesture nav is triggered.
-            repeat(10) {
-                buttonIncrease?.let { it.click() }
-                device.waitForIdle()
-                sleep(500)
-            }
+            // By default indicator visibility is Show
+            // Increase and decrease indicator 10 times 1 direction and 10 times another
+            repeatIncrementAndDecrement(10, 200)
 
-            repeat(10) {
-                buttonDecrease?.let { it.click() }
-                device.waitForIdle()
-                sleep(500)
-            }
+            // Switch from Show to AutoHide
+            buttonChangeVisibility?.click()
 
-            repeat(4) {
-                buttonShow?.let { it.click() }
-                sleep(3000)
-            }
+            // Increase and decrease indicator with delay shorter than hiding delay
+            repeatIncrementAndDecrement(10, 200)
+
+            // Increase and decrease indicator with delay longer than hiding delay
+            repeatIncrementAndDecrement(3, 2500)
+
+            // Switch from Autohide to Hide
+            buttonChangeVisibility?.click()
+
+            // Increase and decrease indicator 10 times 1 direction and 10 times another
+            repeatIncrementAndDecrement(10, 200)
+
+            // Switch from Hide to Show
+            buttonChangeVisibility?.click()
+            sleep(100)
+        }
+    }
+
+    private fun repeatIncrementAndDecrement(times: Int, delayBetweenClicks: Long) {
+        val buttonIncrease = device.findObject(By.desc(INCREASE_POSITION))
+        val buttonDecrease = device.findObject(By.desc(DECREASE_POSITION))
+
+        repeat(times) {
+            buttonIncrease?.click()
+            device.waitForIdle()
+            sleep(delayBetweenClicks)
+        }
+
+        repeat(times) {
+            buttonDecrease?.click()
+            device.waitForIdle()
+            sleep(delayBetweenClicks)
         }
     }
 
diff --git a/wear/compose/integration-tests/navigation/build.gradle b/wear/compose/integration-tests/navigation/build.gradle
index 6d3c77c..0398bc3 100644
--- a/wear/compose/integration-tests/navigation/build.gradle
+++ b/wear/compose/integration-tests/navigation/build.gradle
@@ -58,5 +58,6 @@
     // but it doesn't work in androidx.
     // See aosp/1804059
     androidTestImplementation "androidx.lifecycle:lifecycle-common-java8:2.4.0"
-    androidTestImplementation libs.androidx.annotation
+    // Uses project dependency to match collections/compose-runtime
+    androidTestImplementation project(":annotation:annotation")
 }
\ No newline at end of file
diff --git a/wear/protolayout/protolayout-expression/api/current.txt b/wear/protolayout/protolayout-expression/api/current.txt
index c43dbbb..365dd9b0 100644
--- a/wear/protolayout/protolayout-expression/api/current.txt
+++ b/wear/protolayout/protolayout-expression/api/current.txt
@@ -296,6 +296,16 @@
     method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> fromFloat(float);
     method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> fromInt(int);
     method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!> fromString(String);
+    method public default boolean getBoolValue();
+    method @ColorInt public default int getColorValue();
+    method public default float getFloatValue();
+    method public default int getIntValue();
+    method public default String getStringValue();
+    method public default boolean hasBoolValue();
+    method public default boolean hasColorValue();
+    method public default boolean hasFloatValue();
+    method public default boolean hasIntValue();
+    method public default boolean hasStringValue();
     method public default byte[] toDynamicDataValueByteArray();
     method public default int toDynamicDataValueByteArray(byte[]);
     method public default int toDynamicDataValueByteArray(byte[], int, int);
diff --git a/wear/protolayout/protolayout-expression/api/restricted_current.txt b/wear/protolayout/protolayout-expression/api/restricted_current.txt
index c43dbbb..365dd9b0 100644
--- a/wear/protolayout/protolayout-expression/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression/api/restricted_current.txt
@@ -296,6 +296,16 @@
     method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> fromFloat(float);
     method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> fromInt(int);
     method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!> fromString(String);
+    method public default boolean getBoolValue();
+    method @ColorInt public default int getColorValue();
+    method public default float getFloatValue();
+    method public default int getIntValue();
+    method public default String getStringValue();
+    method public default boolean hasBoolValue();
+    method public default boolean hasColorValue();
+    method public default boolean hasFloatValue();
+    method public default boolean hasIntValue();
+    method public default boolean hasStringValue();
     method public default byte[] toDynamicDataValueByteArray();
     method public default int toDynamicDataValueByteArray(byte[]);
     method public default int toDynamicDataValueByteArray(byte[], int, int);
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
index b864d37..c464a78 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
@@ -155,6 +155,96 @@
             return new FixedString.Builder().setValue(constant).build();
         }
 
+        /**
+         * Returns true if the {@link DynamicDataValue} contains an int value. Otherwise returns
+         * false.
+         */
+        default boolean hasIntValue(){
+            return false;
+        }
+
+        /**
+         * Returns the int value stored in this {@link DynamicDataValue}.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain an int
+         *     value.
+         */
+        default int getIntValue() {
+            throw new IllegalStateException("Type mismatch.");
+        }
+
+        /**
+         * Returns true if the {@link DynamicDataValue} contains a color value. Otherwise returns
+         * false.
+         */
+        default boolean hasColorValue(){
+            return false;
+        }
+
+        /**
+         * Returns the color value stored in this {@link DynamicDataValue}.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a color
+         *     value.
+         */
+        default @ColorInt int getColorValue() {
+            throw new IllegalStateException("Type mismatch.");
+        }
+
+        /**
+         * Returns true if the {@link DynamicDataValue} contains a boolean value. Otherwise returns
+         * false.
+         */
+        default boolean hasBoolValue(){
+            return false;
+        }
+
+        /**
+         * Returns the boolean value stored in this {@link DynamicDataValue}.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a boolean
+         *     value.
+         */
+        default boolean getBoolValue() {
+            throw new IllegalStateException("Type mismatch.");
+        }
+
+        /**
+         * Returns true if the {@link DynamicDataValue} contains a float value. Otherwise returns
+         * false.
+         */
+        default boolean hasFloatValue(){
+            return false;
+        }
+
+        /**
+         * Returns the float value stored in this {@link DynamicDataValue}.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a float
+         *     value.
+         */
+        default float getFloatValue() {
+            throw new IllegalStateException("Type mismatch.");
+        }
+
+        /**
+         * Returns true if the {@link DynamicDataValue} contains a String value. Otherwise returns
+         * false.
+         */
+        default boolean hasStringValue(){
+            return false;
+        }
+
+        /**
+         * Returns the String value stored in this {@link DynamicDataValue}.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a String
+         *     value.
+         */
+        default @NonNull String getStringValue() {
+            throw new IllegalStateException("Type mismatch.");
+        }
+
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
         @Nullable
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
index b490276..054c542 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
@@ -106,6 +106,26 @@
             return "FixedInt32{" + "value=" + getValue() + "}";
         }
 
+        /**
+         * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains an int
+         * value. Otherwise returns false.
+         */
+        @Override
+        public boolean hasIntValue(){
+            return true;
+        }
+
+        /**
+         * Returns the int value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+         *     doesn't contain an int value.
+         */
+        @Override
+        public int getIntValue() {
+            return mImpl.getValue();
+        }
+
         /** Builder for {@link FixedInt32}. */
         public static final class Builder
                 implements DynamicBuilders.DynamicInt32.Builder,
@@ -208,6 +228,26 @@
             return "FixedString{" + "value=" + getValue() + "}";
         }
 
+        /**
+         * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a String
+         * value. Otherwise returns false.
+         */
+        @Override
+        public boolean hasStringValue(){
+            return true;
+        }
+
+        /**
+         * Returns the String value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+         *     doesn't contain a String value.
+         */
+        @Override
+        public @NonNull String getStringValue() {
+            return mImpl.getValue();
+        }
+
         /** Builder for {@link FixedString}. */
         public static final class Builder
                 implements DynamicBuilders.DynamicString.Builder,
@@ -313,6 +353,26 @@
             return "FixedFloat{" + "value=" + getValue() + "}";
         }
 
+        /**
+         * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a float
+         * value. Otherwise returns false.
+         */
+        @Override
+        public boolean hasFloatValue(){
+            return true;
+        }
+
+        /**
+         * Returns the float value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+         *     doesn't contain a float value.
+         */
+        @Override
+        public float getFloatValue() {
+            return mImpl.getValue();
+        }
+
         /** Builder for {@link FixedFloat}. */
         public static final class Builder
                 implements DynamicBuilders.DynamicFloat.Builder,
@@ -416,6 +476,26 @@
             return "FixedBool{" + "value=" + getValue() + "}";
         }
 
+        /**
+         * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a boolean
+         * value. Otherwise returns false.
+         */
+        @Override
+        public boolean hasBoolValue(){
+            return true;
+        }
+
+        /**
+         * Returns the boolean value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+         *     doesn't contain a boolean value.
+         */
+        @Override
+        public boolean getBoolValue() {
+            return mImpl.getValue();
+        }
+
         /** Builder for {@link FixedBool}. */
         public static final class Builder
                 implements DynamicBuilders.DynamicBool.Builder,
@@ -519,6 +599,26 @@
             return "FixedColor{" + "argb=" + getArgb() + "}";
         }
 
+        /**
+         * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a color
+         * value. Otherwise returns false.
+         */
+        @Override
+        public  boolean hasColorValue(){
+            return true;
+        }
+
+        /**
+         * Returns the color value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+         *
+         * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+         *     doesn't contain a color value.
+         */
+        @Override
+        public @ColorInt int getColorValue() {
+            return mImpl.getArgb();
+        }
+
         /** Builder for {@link FixedColor}. */
         public static final class Builder
                 implements DynamicBuilders.DynamicColor.Builder,
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
index a05bb10..5347d81 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
@@ -18,6 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assert.assertThrows;
+
 import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
 import androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor;
 import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
@@ -35,41 +37,68 @@
     public void boolDynamicDataValue() {
         DynamicDataValue<DynamicBool> boolDynamicDataValue = DynamicDataValue.fromBool(true);
 
+        assertThat(boolDynamicDataValue.hasBoolValue()).isTrue();
+        assertThat(boolDynamicDataValue.getBoolValue()).isTrue();
         assertThat(boolDynamicDataValue.toDynamicDataValueProto().getBoolVal().getValue()).isTrue();
+
+        assertThat(boolDynamicDataValue.hasColorValue()).isFalse();
+        assertThrows(IllegalStateException.class, boolDynamicDataValue::getColorValue);
     }
 
     @Test
     public void colorDynamicDataValue() {
-        DynamicDataValue<DynamicColor> colorDynamicDataValue =
-                DynamicDataValue.fromColor(0xff00ff00);
+        int c = 0xff00ff00;
+        DynamicDataValue<DynamicColor> colorDynamicDataValue = DynamicDataValue.fromColor(c);
 
+        assertThat(colorDynamicDataValue.hasColorValue()).isTrue();
+        assertThat(colorDynamicDataValue.getColorValue()).isEqualTo(c);
         assertThat(colorDynamicDataValue.toDynamicDataValueProto().getColorVal().getArgb())
-                .isEqualTo(0xff00ff00);
+                .isEqualTo(c);
+
+        assertThat(colorDynamicDataValue.hasFloatValue()).isFalse();
+        assertThrows(IllegalStateException.class, colorDynamicDataValue::getFloatValue);
     }
 
     @Test
     public void floatDynamicDataValue() {
-        DynamicDataValue<DynamicFloat> floatDynamicDataValue = DynamicDataValue.fromFloat(42.42f);
+        float f = 42.42f;
+        DynamicDataValue<DynamicFloat> floatDynamicDataValue = DynamicDataValue.fromFloat(f);
 
+        assertThat(floatDynamicDataValue.hasFloatValue()).isTrue();
+        assertThat(floatDynamicDataValue.getFloatValue()).isEqualTo(f);
         assertThat(floatDynamicDataValue.toDynamicDataValueProto().getFloatVal().getValue())
                 .isWithin(0.0001f)
-                .of(42.42f);
+                .of(f);
+
+        assertThat(floatDynamicDataValue.hasIntValue()).isFalse();
+        assertThrows(IllegalStateException.class, floatDynamicDataValue::getIntValue);
     }
 
     @Test
     public void intDynamicDataValue() {
-        DynamicDataValue<DynamicInt32> intDynamicDataValue = DynamicDataValue.fromInt(42);
+        int i = 42;
+        DynamicDataValue<DynamicInt32> intDynamicDataValue = DynamicDataValue.fromInt(i);
 
+        assertThat(intDynamicDataValue.hasIntValue()).isTrue();
+        assertThat(intDynamicDataValue.getIntValue()).isEqualTo(i);
         assertThat(intDynamicDataValue.toDynamicDataValueProto().getInt32Val().getValue())
-                .isEqualTo(42);
+                .isEqualTo(i);
+
+        assertThat(intDynamicDataValue.hasStringValue()).isFalse();
+        assertThrows(IllegalStateException.class, intDynamicDataValue::getStringValue);
     }
 
     @Test
     public void stringDynamicDataValue() {
-        DynamicDataValue<DynamicString> stringDynamicDataValue =
-                DynamicDataValue.fromString("constant-value");
+        String s = "constant-value";
+        DynamicDataValue<DynamicString> stringDynamicDataValue = DynamicDataValue.fromString(s);
 
+        assertThat(stringDynamicDataValue.hasStringValue()).isTrue();
+        assertThat(stringDynamicDataValue.getStringValue()).isEqualTo(s);
         assertThat(stringDynamicDataValue.toDynamicDataValueProto().getStringVal().getValue())
-                .isEqualTo("constant-value");
+                .isEqualTo(s);
+
+        assertThat(stringDynamicDataValue.hasBoolValue()).isFalse();
+        assertThrows(IllegalStateException.class, stringDynamicDataValue::getBoolValue);
     }
 }
diff --git a/wear/protolayout/protolayout-renderer/lint-baseline.xml b/wear/protolayout/protolayout-renderer/lint-baseline.xml
index d8b34d6..e489a77 100644
--- a/wear/protolayout/protolayout-renderer/lint-baseline.xml
+++ b/wear/protolayout/protolayout-renderer/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+<issues format="6" by="lint 8.3.0-alpha02" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0-alpha02)" variant="all" version="8.3.0-alpha02">
 
     <issue
         id="RestrictedApiAndroidX"
@@ -769,8 +769,8 @@
     <issue
         id="RestrictedApiAndroidX"
         message="AnimatedVisibility.hasEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
-        errorLine1="                                            &amp;&amp; animatedVisibility.hasEnterTransition();"
-        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        errorLine1="                                                &amp;&amp; animatedVisibility.hasEnterTransition();"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
     </issue>
@@ -778,8 +778,17 @@
     <issue
         id="RestrictedApiAndroidX"
         message="AnimatedVisibility.getEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
-        errorLine1="                                    .getEnterTransition());"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        errorLine1="                                        .getEnterTransition();"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="EnterTransition.hasSlideIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        hasSlideInAnimation |= enterTransition.hasSlideIn();"
+        errorLine2="                                                               ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
     </issue>
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
index 0fdf391..7f0c9a9 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
@@ -26,7 +26,10 @@
 import android.icu.util.ULocale;
 import android.util.Log;
 import android.view.View;
+import android.view.View.MeasureSpec;
 import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.animation.AnimationSet;
 
 import androidx.annotation.NonNull;
@@ -369,6 +372,7 @@
          */
         @UiThread
         @RestrictTo(Scope.LIBRARY_GROUP)
+        @SuppressWarnings("RestrictTo")
         public void commit(@NonNull ViewGroup parentView, boolean isReattaching) {
             for (String nodePosId : mNodesPendingChildrenRemoval) {
                 mPipeline.removeChildNodesFor(nodePosId);
@@ -389,20 +393,68 @@
                 mChangedNodes.clear();
             }
 
-            Runnable runnable =
+            // Capture nodes with EnterTransition animation.
+            Map<String, EnterTransition> enterTransitionNodes = new ArrayMap<>();
+            boolean hasSlideInAnimation = false;
+            if (mPipeline.mEnableAnimations) {
+                for (String changedNode : mChangedNodes) {
+                    List<NodeInfo> nodesAffectedBy =
+                            mPipeline.getNodesAffectedBy(
+                                    changedNode,
+                                    node -> {
+                                        AnimatedVisibility animatedVisibility =
+                                                node.getAnimatedVisibility();
+                                        return animatedVisibility != null
+                                                && animatedVisibility.hasEnterTransition();
+                                    });
+                    for (NodeInfo affectedNode : nodesAffectedBy) {
+                        EnterTransition enterTransition =
+                                checkNotNull(affectedNode.getAnimatedVisibility())
+                                        .getEnterTransition();
+                        enterTransitionNodes.putIfAbsent(affectedNode.getPosId(), enterTransition);
+                        hasSlideInAnimation |= enterTransition.hasSlideIn();
+                    }
+                }
+            }
+
+            Runnable initLayoutRunnable =
                     () -> {
                         mPipeline.initNewLayout();
-                        playEnterAnimations(parentView, isReattaching);
+                        playEnterAnimations(parentView, isReattaching, enterTransitionNodes);
                     };
-            if (parentView.isInEditMode()) {
-                runnable.run();
+
+            // Slide animations need to know the new measurements of the view in order to calculate
+            // start and end positions, so we force a measure pass.
+            if (hasSlideInAnimation) {
+                // The GlobalLayoutListener ensures that initLayoutRunnable will run after the
+                // measure
+                // pass has finished.
+                ViewTreeObserver viewTreeObserver = parentView.getViewTreeObserver();
+                viewTreeObserver.addOnGlobalLayoutListener(
+                        new OnGlobalLayoutListener() {
+                            @Override
+                            public void onGlobalLayout() {
+                                if (viewTreeObserver.isAlive()) {
+                                    viewTreeObserver.removeOnGlobalLayoutListener(this);
+                                    initLayoutRunnable.run();
+                                }
+                            }
+                        });
+                parentView.measure(
+                        MeasureSpec.makeMeasureSpec(
+                                parentView.getMeasuredWidth(), MeasureSpec.EXACTLY),
+                        MeasureSpec.makeMeasureSpec(
+                                parentView.getMeasuredHeight(), MeasureSpec.EXACTLY));
             } else {
-                parentView.post(runnable);
+                initLayoutRunnable.run();
             }
         }
 
         @UiThread
-        private void playEnterAnimations(@NonNull ViewGroup parentView, boolean isReattaching) {
+        private void playEnterAnimations(
+                @NonNull ViewGroup parentView,
+                boolean isReattaching,
+                Map<String, EnterTransition> animatingNodes) {
             // Cancel any already running Enter animation.
             mPipeline.mEnterAnimations.forEach(QuotaAwareAnimationSet::cancelAnimations);
             mPipeline.mEnterAnimations.clear();
@@ -410,24 +462,6 @@
             if (isReattaching || !mPipeline.mFullyVisible || !mPipeline.mEnableAnimations) {
                 return;
             }
-            Map<String, EnterTransition> animatingNodes = new ArrayMap<>();
-            for (String changedNode : mChangedNodes) {
-                List<NodeInfo> nodesAffectedBy =
-                        mPipeline.getNodesAffectedBy(
-                                changedNode,
-                                node -> {
-                                    AnimatedVisibility animatedVisibility =
-                                            node.getAnimatedVisibility();
-                                    return animatedVisibility != null
-                                            && animatedVisibility.hasEnterTransition();
-                                });
-                for (NodeInfo affectedNode : nodesAffectedBy) {
-                    animatingNodes.putIfAbsent(
-                            affectedNode.getPosId(),
-                            checkNotNull(affectedNode.getAnimatedVisibility())
-                                    .getEnterTransition());
-                }
-            }
             for (Map.Entry<String, EnterTransition> animatingNode : animatingNodes.entrySet()) {
                 View associatedView = parentView.findViewWithTag(animatingNode.getKey());
                 if (associatedView != null) {
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java
index 1762d0b..798f1ad 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java
@@ -16,6 +16,9 @@
 
 package androidx.wear.protolayout.renderer.impl;
 
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.widget.FrameLayout.LayoutParams.UNSPECIFIED_GRAVITY;
+
 import static androidx.core.util.Preconditions.checkNotNull;
 
 import android.content.Context;
@@ -56,6 +59,8 @@
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.ViewMutationException;
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutThemeImpl;
 import androidx.wear.protolayout.renderer.inflater.RenderedMetadata;
+import androidx.wear.protolayout.renderer.inflater.RenderedMetadata.PendingFrameLayoutParams;
+import androidx.wear.protolayout.renderer.inflater.RenderedMetadata.ViewProperties;
 import androidx.wear.protolayout.renderer.inflater.ResourceResolvers;
 import androidx.wear.protolayout.renderer.inflater.StandardResourceResolvers;
 
@@ -114,6 +119,7 @@
 
     private final boolean mAdaptiveUpdateRatesEnabled;
     private boolean mWasFullyVisibleBefore;
+    private final boolean mAllowLayoutChangingBindsWithoutDefault;
 
     /** This keeps track of the current inflated parent for the layout. */
     @Nullable private ViewGroup mInflateParent = null;
@@ -268,11 +274,10 @@
                             TAG
                                     + " - inflated result was null, but inflating into new parent"
                                     + " requested.");
-            inflateResult.updateDynamicDataPipeline(isReattaching);
             parent.removeAllViews();
             parent.addView(
-                    inflateResult.inflateParent,
-                    new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
+                    inflateResult.inflateParent, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+            inflateResult.updateDynamicDataPipeline(isReattaching);
             return Futures.immediateVoidFuture();
         }
     }
@@ -330,6 +335,7 @@
         private final boolean mUpdatesEnabled;
         private final boolean mAdaptiveUpdateRatesEnabled;
         private final boolean mIsViewFullyVisible;
+        private final boolean mAllowLayoutChangingBindsWithoutDefault;
 
         Config(
                 @NonNull Context uiContext,
@@ -347,7 +353,8 @@
                 int runningAnimationsLimit,
                 boolean updatesEnabled,
                 boolean adaptiveUpdateRatesEnabled,
-                boolean isViewFullyVisible) {
+                boolean isViewFullyVisible,
+                boolean allowLayoutChangingBindsWithoutDefault) {
             this.mUiContext = uiContext;
             this.mRendererResources = rendererResources;
             this.mResourceResolversProvider = resourceResolversProvider;
@@ -364,6 +371,7 @@
             this.mUpdatesEnabled = updatesEnabled;
             this.mAdaptiveUpdateRatesEnabled = adaptiveUpdateRatesEnabled;
             this.mIsViewFullyVisible = isViewFullyVisible;
+            this.mAllowLayoutChangingBindsWithoutDefault = allowLayoutChangingBindsWithoutDefault;
         }
 
         /** Returns UI Context used for interacting with the UI. */
@@ -466,6 +474,18 @@
             return mIsViewFullyVisible;
         }
 
+        /**
+         * Sets whether a "layout changing" data bind can be applied without the "value_for_layout"
+         * field being filled in, or being set to zero / empty. Defaults to false.
+         *
+         * <p>This is to support legacy apps which use layout-changing data bind before the full
+         * support was built.
+         */
+        @RestrictTo(Scope.LIBRARY)
+        public boolean getAllowLayoutChangingBindsWithoutDefault() {
+            return mAllowLayoutChangingBindsWithoutDefault;
+        }
+
         /** Builder for {@link Config}. */
         @RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
         public static final class Builder {
@@ -490,6 +510,7 @@
             private boolean mUpdatesEnabled = true;
             private boolean mAdaptiveUpdateRatesEnabled = true;
             private boolean mIsViewFullyVisible = true;
+            private boolean mAllowLayoutChangingBindsWithoutDefault = false;
 
             /**
              * Builder for the {@link Config} class.
@@ -621,6 +642,23 @@
                 return this;
             }
 
+            /**
+             * Sets whether a "layout changing" data bind can be applied without the
+             * "value_for_layout" field being filled in, or being set to zero / empty. Defaults to
+             * false.
+             *
+             * <p>This is to support legacy apps which use layout-changing data bind before the full
+             * support was built.
+             */
+            @RestrictTo(Scope.LIBRARY)
+            @NonNull
+            public Builder setAllowLayoutChangingBindsWithoutDefault(
+                    boolean allowLayoutChangingBindsWithoutDefault) {
+                this.mAllowLayoutChangingBindsWithoutDefault =
+                        allowLayoutChangingBindsWithoutDefault;
+                return this;
+            }
+
             /** Builds {@link Config} object. */
             @NonNull
             public Config build() {
@@ -660,7 +698,8 @@
                         mRunningAnimationsLimit,
                         mUpdatesEnabled,
                         mAdaptiveUpdateRatesEnabled,
-                        mIsViewFullyVisible);
+                        mIsViewFullyVisible,
+                        mAllowLayoutChangingBindsWithoutDefault);
             }
         }
     }
@@ -678,6 +717,8 @@
         this.mClickableIdExtra = config.getClickableIdExtra();
         this.mAdaptiveUpdateRatesEnabled = config.getAdaptiveUpdateRatesEnabled();
         this.mWasFullyVisibleBefore = false;
+        this.mAllowLayoutChangingBindsWithoutDefault =
+                config.getAllowLayoutChangingBindsWithoutDefault();
 
         StateStore stateStore = config.getStateStore();
         if (stateStore != null) {
@@ -704,8 +745,8 @@
     private RenderResult renderOrComputeMutations(
             @NonNull Layout layout,
             @NonNull ResourceProto.Resources resources,
-            @Nullable RenderedMetadata prevRenderedMetadata) {
-
+            @Nullable RenderedMetadata prevRenderedMetadata,
+            @NonNull ViewProperties parentViewProp) {
         ResourceResolvers resolvers =
                 mResourceResolversProvider.getResourceResolvers(
                         mUiContext, resources, mUiExecutorService, mAnimationEnabled);
@@ -738,7 +779,8 @@
                         .setProtoLayoutTheme(mProtoLayoutTheme)
                         .setAnimationEnabled(mAnimationEnabled)
                         .setClickableIdExtra(mClickableIdExtra)
-                        .setAllowLayoutChangingBindsWithoutDefault(true);
+                        .setAllowLayoutChangingBindsWithoutDefault(
+                                mAllowLayoutChangingBindsWithoutDefault);
         if (mDataPipeline != null) {
             inflaterConfigBuilder.setDynamicDataPipeline(mDataPipeline);
         }
@@ -754,7 +796,7 @@
         if (mAdaptiveUpdateRatesEnabled && prevRenderedMetadata != null) {
             // Compute the mutation here, but if there is a change, apply it in the UI thread.
             try {
-                mutation = inflater.computeMutation(prevRenderedMetadata, layout);
+                mutation = inflater.computeMutation(prevRenderedMetadata, layout, parentViewProp);
             } catch (UnsupportedOperationException ex) {
                 Log.w(TAG, "Error computing mutation.", ex);
             }
@@ -824,7 +866,7 @@
     @UiThread
     @SuppressWarnings({
         "ReferenceEquality",
-        "ExecutorTaskName"
+        "ExecutorTaskName",
     }) // layout == prevLayout is intentional (and enough in this case)
     @NonNull
     public ListenableFuture<Void> renderAndAttach(
@@ -870,11 +912,33 @@
 
         if (mRenderFuture == null) {
             mPrevLayout = layout;
+
+            int gravity = UNSPECIFIED_GRAVITY;
+            LayoutParams layoutParams = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
+
+            if (prevInflateParent != null && prevInflateParent.getChildCount() > 0) {
+                View firstChild = prevInflateParent.getChildAt(0);
+                if (firstChild != null) {
+                    FrameLayout.LayoutParams childLp =
+                            (FrameLayout.LayoutParams) firstChild.getLayoutParams();
+                    if (childLp != null) {
+                        gravity = childLp.gravity;
+                    }
+                }
+            }
+
+            ViewProperties parentViewProp =
+                    ViewProperties.fromViewGroup(
+                            parent,
+                            layoutParams,
+                            // We need this specific ones as otherwise gravity gets lost for
+                            // attachParent node.
+                            new PendingFrameLayoutParams(gravity));
+
             mRenderFuture =
                     mBgExecutorService.submit(
-                            () ->
-                                    renderOrComputeMutations(
-                                            layout, resources, prevRenderedMetadata));
+                            () -> renderOrComputeMutations(
+                                layout, resources, prevRenderedMetadata, parentViewProp));
             mCanReattachWithoutRendering = false;
         }
         SettableFuture<Void> result = SettableFuture.create();
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
index 97c1f9a..03f8d50 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
@@ -1915,27 +1915,33 @@
         // Initialize the size wrapper here, if needed. This simplifies the logic below when
         // creating the actual Spacer and adding it to its parent...
         FrameLayout sizeWrapper = null;
-        if (needsSizeWrapper(spacer.getWidth()) || needsSizeWrapper(spacer.getHeight())) {
+        @Nullable Float widthForLayoutDp = resolveSizeForLayoutIfNeeded(spacer.getWidth());
+        @Nullable Float heightForLayoutDp = resolveSizeForLayoutIfNeeded(spacer.getHeight());
+
+        if (widthForLayoutDp != null || heightForLayoutDp != null) {
             sizeWrapper = new FrameLayout(mUiContext);
             LayoutParams spaceWrapperLayoutParams = generateDefaultLayoutParams();
             spaceWrapperLayoutParams.width = LayoutParams.WRAP_CONTENT;
             spaceWrapperLayoutParams.height = LayoutParams.WRAP_CONTENT;
 
-            // Technically speaking, this logic isn't 100% accurate. In legacy size-changing mode
-            // (before
-            // value_for_layout was introduced), apps may not set value_for_layout. That's fine; the
-            // needsSizeWrapper checks will catch that. It's possible that one dimension has
-            // value_for_layout set though, and the other relies on legacy size changing mode. We
-            // don't deal with that case; if value_for_layout is present on one dimension, and both
-            // are dynamic, then it must be set on both dimensions.
-            if (spacer.getWidth().getLinearDimension().hasDynamicValue()) {
-                float widthForLayout = spacer.getWidth().getLinearDimension().getValueForLayout();
-                spaceWrapperLayoutParams.width = safeDpToPx(widthForLayout);
+            if (widthForLayoutDp != null) {
+                if (widthForLayoutDp <= 0f) {
+                    Log.w(
+                            TAG,
+                            "Spacer width's value_for_layout is not a positive value. Element won't"
+                                + " be visible.");
+                }
+                spaceWrapperLayoutParams.width = safeDpToPx(widthForLayoutDp);
             }
 
-            if (spacer.getHeight().getLinearDimension().hasDynamicValue()) {
-                float heightForLayout = spacer.getHeight().getLinearDimension().getValueForLayout();
-                spaceWrapperLayoutParams.height = safeDpToPx(heightForLayout);
+            if (heightForLayoutDp != null) {
+                if (heightForLayoutDp <= 0f) {
+                    Log.w(
+                            TAG,
+                            "Spacer height's value_for_layout is not a positive value. Element"
+                                + " won't be visible.");
+                }
+                spaceWrapperLayoutParams.height = safeDpToPx(heightForLayoutDp);
             }
 
             int gravity =
@@ -2136,8 +2142,6 @@
 
         LayoutParams layoutParams = generateDefaultLayoutParams();
 
-        boolean needsSizeWrapper = needsSizeWrapper(text.getText());
-
         handleProp(
                 text.getText(),
                 t -> {
@@ -2163,9 +2167,11 @@
 
         textView.setGravity(textAlignToAndroidGravity(text.getMultilineAlignment().getValue()));
 
-        // Use needsSizeWrapper as a proxy for "has a dynamic size". If there's a dynamic binding
+        @Nullable String valueForLayout = resolveValueForLayoutIfNeeded(text.getText());
+
+        // Use valueForLayout as a proxy for "has a dynamic size". If there's a dynamic binding
         // for the text element, then it can only have a single line of text.
-        if (text.hasMaxLines() && !needsSizeWrapper) {
+        if (text.hasMaxLines() && valueForLayout == null) {
             textView.setMaxLines(max(TEXT_MIN_LINES, text.getMaxLines().getValue()));
         } else {
             textView.setMaxLines(TEXT_MAX_LINES_DEFAULT);
@@ -2204,9 +2210,10 @@
 
         View wrappedView = applyModifiers(textView, text.getModifiers(), posId, pipelineMaker);
 
-        if (needsSizeWrapper) {
-            // If we're here, then it's safe to unconditionally read size_for_layout.
-            String valueForLayout = text.getText().getValueForLayout();
+        if (valueForLayout != null) {
+            if (valueForLayout.isEmpty()) {
+                Log.w(TAG, "Text's value_for_layout is empty. Element won't be visible.");
+            }
 
             // Now create a "container" element, with that size, to hold the text.
             FrameLayout sizeChangingTextWrapper = new FrameLayout(mUiContext);
@@ -2652,15 +2659,19 @@
             handleProp(length, lineView::setLineSweepAngleDegrees, posId, pipelineMaker);
         }
 
-        float sizeForLayout =
-                getSizeForLayout(line.getLength(), WearCurvedLineView.SWEEP_ANGLE_WRAP_LENGTH);
-
         SizedArcContainer sizeWrapper = null;
         SizedArcContainer.LayoutParams sizedLp =
                 new SizedArcContainer.LayoutParams(
                         LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-        if (needsSizeWrapper(length)) {
+        @Nullable Float sizeForLayout = resolveSizeForLayoutIfNeeded(length);
+        if (sizeForLayout != null) {
             sizeWrapper = new SizedArcContainer(mUiContext);
+            if (sizeForLayout <= 0f) {
+                Log.w(
+                        TAG,
+                        "ArcLine length's value_for_layout is not a positive value. Element won't"
+                            + " be visible.");
+            }
             sizeWrapper.setSweepAngleDegrees(sizeForLayout);
             sizedLp.setAngularAlignment(
                     angularAlignmentProtoToAngularAlignment(length.getAngularAlignmentForLayout()));
@@ -3347,64 +3358,58 @@
         }
     }
 
-    private boolean needsSizeWrapper(StringProp stringProp) {
-        if (stringProp.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (!stringProp.getValueForLayout().isEmpty()) {
-                // If value_for_layout is set, then a size wrapper is needed. This covers the case
-                // where mAllowLayoutChangingBindsWithoutDefault, but a size has been provided
-                // anyway.
-                return true;
-            } else {
-                return !mAllowLayoutChangingBindsWithoutDefault;
-            }
-        } else {
-            // Dynamic data disabled; we won't be using the dynamic value regardless...
-            return false;
+    /**
+     * Resolves the value for layout to be used in a Size Wrapper for elements containing dynamic
+     * values. Returns null if no size wrapper is needed.
+     */
+    @Nullable
+    private String resolveValueForLayoutIfNeeded(StringProp stringProp) {
+        if (!stringProp.hasDynamicValue() || !mDataPipeline.isPresent()) {
+            return null;
         }
+
+        // If value_for_layout is set to non-zero, always use it.
+        if (!stringProp.getValueForLayout().isEmpty()) {
+            return stringProp.getValueForLayout();
+        }
+
+        return mAllowLayoutChangingBindsWithoutDefault ? null : "";
     }
 
-    private boolean needsSizeWrapper(SpacerDimension spacerDimension) {
+    /**
+     * Resolves the value for layout to be used in a Size Wrapper for elements containing dynamic
+     * values. Returns null if no size wrapper is needed.
+     */
+    @Nullable
+    private Float resolveSizeForLayoutIfNeeded(SpacerDimension spacerDimension) {
         DpProp dimension = spacerDimension.getLinearDimension();
-        if (dimension.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (dimension.getValueForLayout() > 0f) {
-                return true;
-            } else {
-                return !mAllowLayoutChangingBindsWithoutDefault;
-            }
-        } else {
-            return false;
+        if (!dimension.hasDynamicValue() || !mDataPipeline.isPresent()) {
+            return null;
         }
+
+        if (dimension.getValueForLayout() > 0f) {
+            return dimension.getValueForLayout();
+        }
+
+        return mAllowLayoutChangingBindsWithoutDefault ? null : 0f;
     }
 
-    private boolean needsSizeWrapper(DegreesProp degreesProp) {
-        if (degreesProp.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (degreesProp.getValueForLayout() > 0f) {
-                return true;
-            } else {
-                return !mAllowLayoutChangingBindsWithoutDefault;
-            }
-        } else {
-            return false;
+    /**
+     * Resolves the value for layout to be used in a Size Wrapper for elements containing dynamic
+     * values. Returns null if no size wrapper is needed.
+     */
+    @Nullable
+    private Float resolveSizeForLayoutIfNeeded(DegreesProp degreesProp) {
+        if (!degreesProp.hasDynamicValue() || !mDataPipeline.isPresent()) {
+            return null;
         }
-    }
 
-    private float getSizeForLayout(DegreesProp degreesProp, float otherwise) {
-        if (degreesProp.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (degreesProp.getValueForLayout() > 0f) {
-                // If value_for_layout is set, always use it
-                return degreesProp.getValueForLayout();
-            } else if (mAllowLayoutChangingBindsWithoutDefault) {
-                // We're in "legacy binds" mode. Allow usage of the bind without needing
-                // value_for_layout
-                return otherwise;
-            } else {
-                // Neither set. Error condition (that should not happen without the developer
-                // manually building the proto).
-                return 0f;
-            }
-        } else {
-            return otherwise;
+        // If value_for_layout is set to non-zero, always use it
+        if (degreesProp.getValueForLayout() > 0f) {
+            return degreesProp.getValueForLayout();
         }
+
+        return mAllowLayoutChangingBindsWithoutDefault ? null : 0f;
     }
 
     private boolean canMeasureContainer(
@@ -3627,7 +3632,9 @@
      */
     @Nullable
     public ViewGroupMutation computeMutation(
-            @NonNull RenderedMetadata prevRenderedMetadata, @NonNull Layout targetLayout) {
+            @NonNull RenderedMetadata prevRenderedMetadata,
+            @NonNull Layout targetLayout,
+            @NonNull ViewProperties parentViewProp) {
         if (prevRenderedMetadata.getTreeFingerprint() == null) {
             Log.w(TAG, "No previous fingerprint available.");
             return null;
@@ -3659,7 +3666,7 @@
             }
             ViewProperties parentInfo;
             if (nodePosId.equals(ROOT_NODE_ID)) {
-                parentInfo = ViewProperties.EMPTY;
+                parentInfo = parentViewProp;
             } else {
                 String parentNodePosId = getParentNodePosId(nodePosId);
                 if (parentNodePosId == null || !prevLayoutInfo.contains(parentNodePosId)) {
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java
index 5b6bdc5..0ea9eff 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java
@@ -128,10 +128,10 @@
     }
 
     /** Additional pending layout params for layout elements inside a {@link FrameLayout}. */
-    static final class PendingFrameLayoutParams implements PendingLayoutParams {
+    public static final class PendingFrameLayoutParams implements PendingLayoutParams {
         private final int mGravity;
 
-        PendingFrameLayoutParams(int gravity) {
+        public PendingFrameLayoutParams(int gravity) {
             this.mGravity = gravity;
         }
 
@@ -154,15 +154,16 @@
     }
 
     /** Holds properties of any container that are needed for background rendering. */
-    static class ViewProperties {
-        @NonNull static final ViewProperties EMPTY = new ViewProperties();
+    public static class ViewProperties {
+        @NonNull public static final ViewProperties EMPTY = new ViewProperties();
+
         /**
          * Creates a {@link ViewProperties} from any {@link ViewGroup} container. Note that {@code
          * rawLayoutParams} doesn't need to be a container-specific variant. But the {@code
          * childLayoutParams} should be of a container specific instance (if provided).
          */
         @NonNull
-        static ViewProperties fromViewGroup(
+        public static ViewProperties fromViewGroup(
                 @NonNull ViewGroup viewGroup,
                 @NonNull LayoutParams rawLayoutParams,
                 @NonNull PendingLayoutParams childLayoutParams) {
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
index f4a1cfa..9bb0cbb 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
@@ -686,6 +686,8 @@
                 .addResolvedAnimatedImage(drawableAvd, triggerTileVisibleOnce, TEST_POS_ID)
                 .commit(mRootContainer, /* isReattaching= */ false);
 
+        // OnVisible animations haven't started yet, so we should be able to trigger them manually.
+
         pipeline.playAvdAnimations(InnerCase.ON_LOAD_TRIGGER);
         expect.that(drawableAvd.started).isFalse();
 
@@ -715,10 +717,8 @@
                 .addResolvedAnimatedImage(drawableAvd, triggerTileLoad, TEST_POS_ID)
                 .commit(mRootContainer, /* isReattaching= */ false);
 
-        pipeline.playAvdAnimations(InnerCase.ON_VISIBLE_TRIGGER);
-        expect.that(drawableAvd.started).isFalse();
+        // In commit(), OnLoad animations are started.
 
-        pipeline.playAvdAnimations(InnerCase.ON_LOAD_TRIGGER);
         expect.that(drawableAvd.started).isTrue();
 
         pipeline.resetAvdAnimations(InnerCase.ON_LOAD_TRIGGER);
@@ -1827,7 +1827,6 @@
         pipeline.newPipelineMaker()
                 .addPipelineFor(proto, TEST_POS_ID, receiver)
                 .commit(mRootContainer, /* isReattaching= */ false);
-        shadowOf(getMainLooper()).runOneTask();
         if (enableAnimations) {
             assertThat(pipeline.getRunningAnimationsCount()).isEqualTo(animationsNum);
         }
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java
index 9f7018ae..a291354 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java
@@ -348,11 +348,20 @@
     }
 
     public static LayoutNode dynamicFixedText(String fixedText) {
-        return dynamicFixedText(/* propsConsumer= */ null, fixedText);
+        return dynamicFixedText(/* propsConsumer= */ null, fixedText, /* valueForLayout= */ null);
+    }
+
+    public static LayoutNode dynamicFixedText(String fixedText, @Nullable String valueForLayout) {
+        return dynamicFixedText(/* propsConsumer= */ null, fixedText, valueForLayout);
     }
 
     public static LayoutNode dynamicFixedText(Consumer<TextProps> propsConsumer, String fixedText) {
-        return textInternal(propsConsumer, dynamicStr(fixedText));
+        return textInternal(propsConsumer, dynamicStr(fixedText, /* valueForLayout= */ null));
+    }
+
+    public static LayoutNode dynamicFixedText(
+            Consumer<TextProps> propsConsumer, String fixedText, @Nullable String valueForLayout) {
+        return textInternal(propsConsumer, dynamicStr(fixedText, valueForLayout));
     }
 
     public static LayoutNode text(String text) {
@@ -578,11 +587,15 @@
         return StringProp.newBuilder().setValue(value).build();
     }
 
-    private static StringProp dynamicStr(String fixedValue) {
-        return StringProp.newBuilder()
-                .setDynamicValue(
-                        DynamicString.newBuilder()
-                                .setFixed(FixedString.newBuilder().setValue(fixedValue)))
-                .build();
+    private static StringProp dynamicStr(String fixedValue, @Nullable String valueForLayout) {
+        StringProp.Builder builder =
+                StringProp.newBuilder()
+                        .setDynamicValue(
+                                DynamicString.newBuilder()
+                                        .setFixed(FixedString.newBuilder().setValue(fixedValue)));
+        if (valueForLayout != null) {
+            builder.setValueForLayout(valueForLayout);
+        }
+        return builder.build();
     }
 }
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java
index 3ad5656..2f8401c 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java
@@ -16,7 +16,10 @@
 
 package androidx.wear.protolayout.renderer.impl;
 
+import static android.widget.FrameLayout.LayoutParams.UNSPECIFIED_GRAVITY;
+
 import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+import static androidx.wear.protolayout.renderer.common.ProtoLayoutDiffer.ROOT_NODE_ID;
 import static androidx.wear.protolayout.renderer.helper.TestDsl.arc;
 import static androidx.wear.protolayout.renderer.helper.TestDsl.arcAdapter;
 import static androidx.wear.protolayout.renderer.helper.TestDsl.box;
@@ -37,10 +40,14 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
+import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
 import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 
+import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.wear.protolayout.expression.pipeline.StateStore;
 import androidx.wear.protolayout.proto.LayoutElementProto.Layout;
@@ -383,6 +390,60 @@
         assertThat(mRootContainer.getChildCount()).isEqualTo(0);
     }
 
+
+    @Test
+    public void adaptiveUpdateRatesEnabled_rootElementdiff_keepsElementCentered() throws Exception {
+        int dimension = 50;
+        setupInstance(/* adaptiveUpdateRatesEnabled= */ true);
+
+        // Full inflation.
+        ListenableFuture<Void> result =
+                mInstanceUnderTest.renderAndAttach(
+                        layout(
+                                column(
+                                        props -> {
+                                            props.heightDp = dimension;
+                                            props.widthDp = dimension;
+                                        })),
+                        RESOURCES,
+                        mRootContainer);
+        shadowOf(Looper.getMainLooper()).idle();
+
+        assertNoException(result);
+
+        View root = mRootContainer.findViewWithTag(ROOT_NODE_ID);
+
+        assertThat(root).isInstanceOf(ViewGroup.class);
+        ViewGroup columnBeforeMutation = (ViewGroup) root;
+        assertThat(columnBeforeMutation.getChildCount()).isEqualTo(0);
+        assertThat(getGravity(columnBeforeMutation.getLayoutParams())).isEqualTo(Gravity.CENTER);
+
+        // Diff update only for the root element.
+        result =
+                mInstanceUnderTest.renderAndAttach(
+                        layout(
+                                column(
+                                        props -> {
+                                            props.heightDp = dimension + 10;
+                                            props.widthDp = dimension + 10;
+                                        })),
+                        RESOURCES,
+                        mRootContainer);
+
+        shadowOf(Looper.getMainLooper()).idle();
+
+        assertNoException(result);
+
+        root = mRootContainer.findViewWithTag(ROOT_NODE_ID);
+
+        assertThat(root).isInstanceOf(ViewGroup.class);
+        ViewGroup columnAfterMutation = (ViewGroup) root;
+        assertThat(columnAfterMutation.getChildCount()).isEqualTo(0);
+
+        // Make sure that the root has stayed centered within the container.
+        assertThat(getGravity(columnAfterMutation.getLayoutParams())).isEqualTo(Gravity.CENTER);
+    }
+
     @Test
     public void close_clearsHostView() throws Exception {
         Layout layout = layout(text(TEXT1));
@@ -500,26 +561,29 @@
     }
 
     private void setupInstance(boolean adaptiveUpdateRatesEnabled) {
+        Config config = createInstanceConfig(adaptiveUpdateRatesEnabled).build();
+        mInstanceUnderTest = new ProtoLayoutViewInstance(config);
+    }
+
+    @NonNull
+    private Config.Builder createInstanceConfig(boolean adaptiveUpdateRatesEnabled) {
         FakeExecutorService uiThreadExecutor =
                 new FakeExecutorService(new Handler(Looper.getMainLooper()));
         ListeningExecutorService listeningExecutorService =
                 MoreExecutors.listeningDecorator(uiThreadExecutor);
 
-        ProtoLayoutViewInstance.Config config =
-                new Config.Builder(
-                                mApplicationContext,
-                                listeningExecutorService,
-                                listeningExecutorService,
-                                /* clickableIdExtra= */ "CLICKABLE_ID_EXTRA")
-                        .setStateStore(new StateStore(ImmutableMap.of()))
-                        .setLoadActionListener(nextState -> {})
-                        .setAnimationEnabled(true)
-                        .setRunningAnimationsLimit(Integer.MAX_VALUE)
-                        .setUpdatesEnabled(true)
-                        .setAdaptiveUpdateRatesEnabled(adaptiveUpdateRatesEnabled)
-                        .setIsViewFullyVisible(false)
-                        .build();
-        mInstanceUnderTest = new ProtoLayoutViewInstance(config);
+        return new Config.Builder(
+                        mApplicationContext,
+                        listeningExecutorService,
+                        listeningExecutorService,
+                        /* clickableIdExtra= */ "CLICKABLE_ID_EXTRA")
+                .setStateStore(new StateStore(ImmutableMap.of()))
+                .setLoadActionListener(nextState -> {})
+                .setAnimationEnabled(true)
+                .setRunningAnimationsLimit(Integer.MAX_VALUE)
+                .setUpdatesEnabled(true)
+                .setAdaptiveUpdateRatesEnabled(adaptiveUpdateRatesEnabled)
+                .setIsViewFullyVisible(false);
     }
 
     private List<View> findViewsWithText(ViewGroup root, String text) {
@@ -533,6 +597,18 @@
         result.get();
     }
 
+    private static int getGravity(LayoutParams params) {
+        if (params instanceof FrameLayout.LayoutParams) {
+            return ((FrameLayout.LayoutParams) params).gravity;
+        }
+
+        if (params instanceof LinearLayout.LayoutParams) {
+            return ((LinearLayout.LayoutParams) params).gravity;
+        }
+
+        return UNSPECIFIED_GRAVITY;
+    }
+
     static class FakeExecutorService extends AbstractExecutorService {
 
         private final Handler mHandler;
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
index 5ed004c..b8d4ad3 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
@@ -187,6 +187,7 @@
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.InflateResult;
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.ViewGroupMutation;
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.ViewMutationException;
+import androidx.wear.protolayout.renderer.inflater.RenderedMetadata.ViewProperties;
 import androidx.wear.protolayout.renderer.test.R;
 import androidx.wear.widget.ArcLayout;
 import androidx.wear.widget.CurvedTextView;
@@ -280,6 +281,29 @@
         expect.that(tv.getText().toString()).isEmpty();
     }
 
+    @Test
+    public void inflate_textView_withEmptyValueForLayout() {
+        LayoutElement root =
+            LayoutElement.newBuilder()
+                .setText(
+                    Text.newBuilder()
+                        .setText(
+                            StringProp.newBuilder()
+                                .setValue("abcde")
+                                .setDynamicValue(
+                                    DynamicString.newBuilder()
+                                        .setFixed(
+                                            FixedString.newBuilder()
+                                                .setValue("Dynamic Fixed Text")))
+                                        .setValueForLayout("")))
+                .build();
+
+        FrameLayout rootLayout = renderer(fingerprintedLayout(root)).inflate();
+
+        FrameLayout sizedContainer = (FrameLayout) rootLayout.getChildAt(0);
+        expect.that(sizedContainer.getWidth()).isEqualTo(0);
+    }
+
     // obsoleteContentDescription is tested for backward compatibility
     @SuppressWarnings("deprecation")
     @Test
@@ -2153,6 +2177,38 @@
     }
 
     @Test
+    public void inflate_arcLine_usesZeroValueForLayout() {
+        DynamicFloat arcLength =
+                DynamicFloat.newBuilder().setFixed(FixedFloat.newBuilder().setValue(45f)).build();
+
+        LayoutElement root =
+                LayoutElement.newBuilder()
+                        .setArc(
+                                Arc.newBuilder()
+                                        .setAnchorAngle(degrees(0).build())
+                                        .addContents(
+                                                ArcLayoutElement.newBuilder()
+                                                        .setLine(
+                                                                ArcLine.newBuilder()
+                                                                        .setLength(
+                                                                                degreesDynamic(
+                                                                                        arcLength,
+                                                                                        0f))
+                                                                        .setThickness(dp(12)))))
+                        .build();
+
+        FrameLayout rootLayout = renderer(fingerprintedLayout(root)).inflate();
+
+        shadowOf(Looper.getMainLooper()).idle();
+
+        ArcLayout arcLayout = (ArcLayout) rootLayout.getChildAt(0);
+        SizedArcContainer sizedContainer = (SizedArcContainer) arcLayout.getChildAt(0);
+        expect.that(sizedContainer.getSweepAngleDegrees()).isEqualTo(0f);
+        WearCurvedLineView line = (WearCurvedLineView) sizedContainer.getChildAt(0);
+        expect.that(line.getMaxSweepAngleDegrees()).isEqualTo(0f);
+    }
+
+    @Test
     public void inflate_arcLine_dynamicData_updatesArcLength() {
         AppDataKey<DynamicBuilders.DynamicInt32> keyFoo = new AppDataKey<>("foo");
         mStateStore.setAppStateEntryValuesProto(
@@ -2262,7 +2318,7 @@
     }
 
     @Test
-    public void inflate_arcLine_withoutValueForLayout_noLegacyMode_usesArcLength() {
+    public void inflate_arcLine_withoutValueForLayout_legacyMode_usesArcLength() {
         DynamicFloat arcLength =
                 DynamicFloat.newBuilder().setFixed(FixedFloat.newBuilder().setValue(45f)).build();
 
@@ -3028,7 +3084,7 @@
         // Compute the mutation
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         assertThat(mutation).isNotNull();
         assertThat(mutation.isNoOp()).isFalse();
 
@@ -3074,10 +3130,10 @@
         // Compute the mutation
         ViewGroupMutation mutation2 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent1), layout2);
+                        getRenderedMetadata(inflatedViewParent1), layout2, ViewProperties.EMPTY);
         ViewGroupMutation mutation3 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent1), layout3);
+                        getRenderedMetadata(inflatedViewParent1), layout3, ViewProperties.EMPTY);
 
         renderer.mRenderer.applyMutation(inflatedViewParent1, mutation3).get();
         assertThrows(
@@ -3165,7 +3221,7 @@
         // Apply first mutation
         ViewGroupMutation mutation1 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         assertThat(mutation1).isNotNull();
         assertThat(mutation1.isNoOp()).isFalse();
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation1).get();
@@ -3186,7 +3242,7 @@
         // Apply second mutation
         ViewGroupMutation mutation2 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout3);
+                        getRenderedMetadata(inflatedViewParent), layout3, ViewProperties.EMPTY);
         assertThat(mutation2).isNotNull();
         assertThat(mutation2.isNoOp()).isFalse();
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation2).get();
@@ -3259,7 +3315,7 @@
 
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation).get();
 
         ViewGroup boxAfterMutation = (ViewGroup) inflatedViewParent.getChildAt(0);
@@ -3302,7 +3358,7 @@
 
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation).get();
 
         ViewGroup boxAfterMutation = (ViewGroup) inflatedViewParent.getChildAt(0);
@@ -3346,7 +3402,7 @@
 
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation).get();
 
         ViewGroup boxAfterMutation = (ViewGroup) inflatedViewParent.getChildAt(0);
@@ -3444,7 +3500,7 @@
         }
 
         ViewGroupMutation computeMutation(RenderedMetadata renderedMetadata, Layout targetLayout) {
-            return mRenderer.computeMutation(renderedMetadata, targetLayout);
+            return mRenderer.computeMutation(renderedMetadata, targetLayout, ViewProperties.EMPTY);
         }
 
         boolean applyMutation(ViewGroup parent, ViewGroupMutation mutation) {
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
index 44f60d4..138bcd1 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
@@ -38,7 +38,6 @@
 import androidx.wear.watchface.WatchFace
 import androidx.wear.watchface.WatchFaceColors
 import androidx.wear.watchface.WatchFaceExperimental
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -74,7 +73,7 @@
 import kotlinx.coroutines.launch
 
 /** A simple example canvas based analog watch face. NB this is open for testing. */
-open class ExampleCanvasAnalogWatchFaceService : WatchFaceService() {
+open class ExampleCanvasAnalogWatchFaceService : SampleWatchFaceService() {
 
     // Lazy because the context isn't initialized til later.
     private val watchFaceStyle by lazy { WatchFaceColorStyle.create(this, RED_STYLE) }
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
index ddfed4c..96757db 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
@@ -48,7 +48,6 @@
 import androidx.wear.watchface.WatchFace
 import androidx.wear.watchface.WatchFaceColors
 import androidx.wear.watchface.WatchFaceExperimental
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -73,7 +72,7 @@
 import kotlinx.coroutines.launch
 
 /** A simple example canvas based digital watch face. */
-class ExampleCanvasDigitalWatchFaceService : WatchFaceService() {
+class ExampleCanvasDigitalWatchFaceService : SampleWatchFaceService() {
     // Lazy because the context isn't initialized til later.
     private val watchFaceStyle by lazy { WatchFaceColorStyle.create(this, RED_STYLE) }
 
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt
index 8820469..205e03f 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt
@@ -33,7 +33,6 @@
 import androidx.wear.watchface.RenderParameters
 import androidx.wear.watchface.Renderer
 import androidx.wear.watchface.WatchFace
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -56,7 +55,7 @@
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 
-open class ExampleHierarchicalStyleWatchFaceService : WatchFaceService() {
+open class ExampleHierarchicalStyleWatchFaceService : SampleWatchFaceService() {
 
     internal val twelveHourClockOption by lazy {
         ListOption(
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt
index 4c887ab..f61f2b5 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt
@@ -28,7 +28,6 @@
 import androidx.wear.watchface.ComplicationSlotsManager
 import androidx.wear.watchface.Renderer
 import androidx.wear.watchface.WatchFace
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.permission.dialogs.sample.ComplicationDeniedActivity
@@ -43,7 +42,7 @@
  * Sample watch face using OpenGL with textures loaded on a background thread by [createWatchFace]
  * which are used for rendering on the main thread.
  */
-open class ExampleOpenGLBackgroundInitWatchFaceService() : WatchFaceService() {
+open class ExampleOpenGLBackgroundInitWatchFaceService() : SampleWatchFaceService() {
     private val colorStyleSetting by lazy {
         UserStyleSetting.ListUserStyleSetting(
             UserStyleSetting.Id("color_style_setting"),
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
index 14a0b40..c42dc9a6 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
@@ -32,7 +32,6 @@
 import androidx.wear.watchface.WatchFace
 import androidx.wear.watchface.WatchFaceColors
 import androidx.wear.watchface.WatchFaceExperimental
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -63,7 +62,7 @@
  *
  * NB this is open for testing.
  */
-open class ExampleOpenGLWatchFaceService : WatchFaceService() {
+open class ExampleOpenGLWatchFaceService : SampleWatchFaceService() {
     // Lazy because the context isn't initialized till later.
     private val watchFaceStyle by lazy { WatchFaceColorStyle.create(this, "white_style") }
 
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/SampleWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/SampleWatchFaceService.kt
new file mode 100644
index 0000000..71127d9
--- /dev/null
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/SampleWatchFaceService.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2023 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 androidx.wear.watchface.samples
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.util.Log
+import androidx.wear.watchface.WatchFaceService
+
+/**
+ * Common base class for the androidx sample watch faces.
+ *
+ * You can trigger these to quit with:
+ * `adb shell am broadcast -a androidx.wear.watchface.samples.QUIT`
+ */
+abstract class SampleWatchFaceService : WatchFaceService() {
+    override fun onCreate() {
+        super.onCreate()
+
+        registerReceiver(
+            object : BroadcastReceiver() {
+                override fun onReceive(context: Context, intent: Intent) {
+                    Log.d(TAG, "androidx.wear.watchface.samples.QUIT received, quitting.")
+                    System.exit(0)
+                }
+            },
+            IntentFilter("androidx.wear.watchface.samples.QUIT"),
+            Context.RECEIVER_EXPORTED
+        )
+    }
+
+    private companion object {
+        const val TAG = "SampleWatchFaceService"
+    }
+}
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index 7ff9161..8190059 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -1416,6 +1416,7 @@
                                             "${it.params.instanceId} and constructed instance id " +
                                             params.instanceId
                                     }
+                                    Log.d(TAG, "onInteractiveWatchFaceCreated: $instance")
                                     it.callback.onInteractiveWatchFaceCreated(instance)
                                 }
                         } catch (e: Exception) {
@@ -1462,6 +1463,7 @@
                                     pendingWallpaperInstance.params,
                                     "Boot with pendingWallpaperInstance"
                                 )
+                            Log.d(TAG, "onInteractiveWatchFaceCreated: $instance")
                             pendingWallpaperInstance.callback.onInteractiveWatchFaceCreated(
                                 instance
                             )
@@ -1507,6 +1509,7 @@
         ) {
             uiThreadCoroutineScope.launch {
                 try {
+                    Log.d(TAG, "attachToParameterlessEngine onInteractiveWatchFaceCreated")
                     pendingWallpaperInstance.callback.onInteractiveWatchFaceCreated(
                         createInteractiveInstance(
                             pendingWallpaperInstance.params,
@@ -2110,6 +2113,7 @@
             _createdBy: String
         ): InteractiveWatchFaceImpl =
             TraceEvent("EngineWrapper.createInteractiveInstance").use {
+                Log.d(TAG, "createInteractiveInstance: " + _createdBy)
                 mainThreadPriorityDelegate.setInteractivePriority()
 
                 require(!watchFaceCreatedOrPending()) {
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java
new file mode 100644
index 0000000..8ce6e03
--- /dev/null
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+
+import android.os.Build;
+import android.webkit.WebSettings;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
+import androidx.test.filters.SmallTest;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * TODO(b/294183509): Add user-agent client hints HTTP header verification tests when unhide the
+ * override user-agent metadata APIs.
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
+public class WebSettingsCompatUserAgentMetadataTest {
+    private WebViewOnUiThread mWebViewOnUiThread;
+
+    @Before
+    public void setUp() throws Exception {
+        mWebViewOnUiThread = new androidx.webkit.WebViewOnUiThread();
+    }
+
+    @After
+    public void tearDown() {
+        if (mWebViewOnUiThread != null) {
+            mWebViewOnUiThread.cleanUp();
+        }
+    }
+
+    @Test
+    public void testSetUserAgentMetadataDefault() throws Throwable {
+        WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+        WebSettings settings = mWebViewOnUiThread.getSettings();
+        UserAgentMetadata defaultSetting = WebSettingsCompat.getUserAgentMetadata(
+                settings);
+        // Check brand version list.
+        List<String> brands = new ArrayList<>();
+        Assert.assertNotNull(defaultSetting.getBrandVersionList());
+        for (UserAgentMetadata.BrandVersion bv : defaultSetting.getBrandVersionList()) {
+            brands.add(bv.getBrand());
+        }
+        Assert.assertTrue("The default brand should contains Android WebView.",
+                brands.contains("Android WebView"));
+        // Check platform, bitness and wow64.
+        assertEquals("The default platform is Android.", "Android",
+                defaultSetting.getPlatform());
+        assertEquals("The default bitness is 0.", UserAgentMetadata.BITNESS_DEFAULT,
+                defaultSetting.getBitness());
+        assertFalse("The default wow64 is false.", defaultSetting.isWow64());
+    }
+
+    @Test
+    public void testSetUserAgentMetadataFullOverrides() throws Throwable {
+        WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+        WebSettings settings = mWebViewOnUiThread.getSettings();
+        // Overrides user-agent metadata.
+        UserAgentMetadata overrideSetting = new UserAgentMetadata.Builder()
+                .setBrandVersionList(Collections.singletonList(
+                        new UserAgentMetadata.BrandVersion(
+                                "myBrand", "1", "1.1.1.1")))
+                .setFullVersion("1.1.1.1")
+                .setPlatform("myPlatform").setPlatformVersion("2.2.2.2").setArchitecture("myArch")
+                .setMobile(true).setModel("myModel").setBitness(32)
+                .setWow64(false).setFormFactor("myFormFactor").build();
+
+        WebSettingsCompat.setUserAgentMetadata(settings, overrideSetting);
+        assertEquals(
+                "After override set the user-agent metadata, it should be returned",
+                overrideSetting, WebSettingsCompat.getUserAgentMetadata(
+                        settings));
+    }
+
+    @Test
+    public void testSetUserAgentMetadataPartialOverride() throws Throwable {
+        WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+        WebSettings settings = mWebViewOnUiThread.getSettings();
+        // Overrides without setting user-agent metadata platform and bitness.
+        UserAgentMetadata overrideSetting = new UserAgentMetadata.Builder()
+                .setBrandVersionList(Collections.singletonList(
+                        new UserAgentMetadata.BrandVersion(
+                                "myBrand", "1", "1.1.1.1")))
+                .setFullVersion("1.1.1.1")
+                .setPlatformVersion("2.2.2.2").setArchitecture("myArch").setMobile(true)
+                .setModel("myModel").setWow64(false).setFormFactor("myFormFactor").build();
+
+        WebSettingsCompat.setUserAgentMetadata(settings, overrideSetting);
+        UserAgentMetadata actualSetting = WebSettingsCompat.getUserAgentMetadata(
+                settings);
+        assertEquals("Platform should reset to system default if no overrides.",
+                "Android", actualSetting.getPlatform());
+        assertEquals("Bitness should reset to system default if no overrides.",
+                UserAgentMetadata.BITNESS_DEFAULT, actualSetting.getBitness());
+        assertEquals("FormFactor should be overridden value.",
+                "myFormFactor", WebSettingsCompat.getUserAgentMetadata(
+                        settings).getFormFactor());
+    }
+
+    @Test
+    public void testSetUserAgentMetadataBlankBrandVersion() throws Throwable {
+        WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+        try {
+            WebSettings settings = mWebViewOnUiThread.getSettings();
+            UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+                    .setBrandVersionList(Collections.singletonList(
+                            new UserAgentMetadata.BrandVersion(
+                                    "", "", ""))).build();
+            WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+            Assert.fail("Should have thrown exception.");
+        } catch (IllegalArgumentException e) {
+            Assert.assertEquals("Brand name, major version and full version should not "
+                    + "be blank.", e.getMessage());
+        }
+    }
+
+    @Test
+    public void testSetUserAgentMetadataEmptyBrandVersionList() throws Throwable {
+        WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+        try {
+            WebSettings settings = mWebViewOnUiThread.getSettings();
+            UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+                    .setBrandVersionList(new ArrayList<>()).build();
+            WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+            Assert.fail("Should have thrown exception.");
+        } catch (IllegalArgumentException e) {
+            Assert.assertEquals("Brand version list should not be empty.", e.getMessage());
+        }
+    }
+
+    @Test
+    public void testSetUserAgentMetadataBlankFullVersion() throws Throwable {
+        WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+        try {
+            WebSettings settings = mWebViewOnUiThread.getSettings();
+            UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+                    .setFullVersion("  ").build();
+            WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+            Assert.fail("Should have thrown exception.");
+        } catch (IllegalArgumentException e) {
+            Assert.assertEquals("Full version should not be blank.", e.getMessage());
+        }
+    }
+
+    @Test
+    public void testSetUserAgentMetadataBlankPlatform() throws Throwable {
+        WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+        try {
+            WebSettings settings = mWebViewOnUiThread.getSettings();
+            UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+                    .setPlatform("  ").build();
+            WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+            Assert.fail("Should have thrown exception.");
+        } catch (IllegalArgumentException e) {
+            Assert.assertEquals("Platform should not be blank.", e.getMessage());
+        }
+    }
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/Profile.java b/webkit/webkit/src/main/java/androidx/webkit/Profile.java
new file mode 100644
index 0000000..a0aed90
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/Profile.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import android.webkit.CookieManager;
+import android.webkit.GeolocationPermissions;
+import android.webkit.ServiceWorkerController;
+import android.webkit.WebStorage;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresFeature;
+import androidx.annotation.RestrictTo;
+
+/**
+ * A Profile represents one browsing session for WebView.
+ * <p> You can have multiple profiles and each profile holds its own set of data. The creation
+ * and deletion of the Profile is being managed by {@link ProfileStore}.
+ *
+ * @hide
+ *
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface Profile {
+
+    /**
+     * Represents the name of the default profile which can't be deleted.
+     */
+    String DEFAULT_PROFILE_NAME = "Default";
+
+    /**
+     * @return the name of this Profile which was used to create the Profile from
+     * ProfileStore create methods.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    String getName();
+
+    /**
+     * Returns the profile's cookie manager.
+     * <p>
+     * Can be called from any thread. It is recommended to not hold onto references of this.
+     *
+     * @throws IllegalStateException if the profile has been deleted by
+     * {@link ProfileStore#deleteProfile(String)}}.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    CookieManager getCookieManager() throws IllegalStateException;
+
+    /**
+     * Returns the profile's web storage.
+     * <p>
+     * Can be called from any thread. It is recommended to not hold onto references of this.
+     *
+     * @throws IllegalStateException if the profile has been deleted by
+     * {@link ProfileStore#deleteProfile(String)}}.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    WebStorage getWebStorage() throws IllegalStateException;
+
+    /**
+     * Returns the geolocation permissions of the profile.
+     * <p>
+     * Can be called from any thread. It is recommended to not hold onto references of this.
+     *
+     * @throws IllegalStateException if the profile has been deleted by
+     * {@link ProfileStore#deleteProfile(String)}}.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    GeolocationPermissions getGeolocationPermissions() throws IllegalStateException;
+
+    /**
+     * Returns the service worker controller of the profile.
+     * <p>
+     * Can be called from any thread. It is recommended to not hold onto references of this.
+     *
+     * @throws IllegalStateException if the profile has been deleted by
+     * {@link ProfileStore#deleteProfile(String)}}.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    ServiceWorkerController getServiceWorkerController() throws IllegalStateException;
+
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/ProfileStore.java b/webkit/webkit/src/main/java/androidx/webkit/ProfileStore.java
new file mode 100644
index 0000000..731d83a
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/ProfileStore.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresFeature;
+import androidx.annotation.RestrictTo;
+import androidx.webkit.internal.ApiFeature;
+import androidx.webkit.internal.ProfileStoreImpl;
+import androidx.webkit.internal.WebViewFeatureInternal;
+
+import java.util.List;
+
+/**
+ * Manages any creation, deletion for {@link Profile}. All calls on the this class
+ * <b>must</b> be called on the apps UI thread.
+ *
+ * <p>Example usage:
+ * <pre class="prettyprint">
+ *    ProfileStore profileStore = ProfileStore.getInstance();
+ *
+ *    // Use this store instance to manage Profiles.
+ *    Profile createdProfile = profileStore.getOrCreateProfile("test_profile");
+ *    createdProfile.getGeolocationPermissions().clear("example");
+ *    //...
+ *    profileStore.deleteProfile("profile_test");
+ *
+ * </pre>
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface ProfileStore {
+
+    /**
+     * Returns the production instance of ProfileStore. This method must be called on
+     * the UI thread.
+     *
+     * @return ProfileStore instance to use for managing profiles.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    static ProfileStore getInstance() {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return ProfileStoreImpl.getInstance();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    /**
+     * Returns a profile with the given name, creating if needed.
+     * <p>
+     * Returns the associated Profile with this name, if there's no match with this name it
+     * will create a new Profile instance. This method must be called on
+     * the UI thread.
+     *
+     * @param name name of the profile to retrieve.
+     * @return instance of {@link Profile} matching this name.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    Profile getOrCreateProfile(@NonNull String name);
+
+    /**
+     * Returns a profile with the given name, if it exists.
+     * <p>
+     * Returns the associated Profile with this name, if there's no Profile with this name or the
+     * Profile was deleted by {@link ProfileStore#deleteProfile(String)} it will return null.
+     * This method must be called on the UI thread.
+     *
+     * @param name the name of the profile to retrieve.
+     * @return instance of {@link Profile} matching this name, null otherwise if there's no match.
+     */
+    @Nullable
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    Profile getProfile(@NonNull String name);
+
+    /**
+     * Returns the names of all available profiles.
+     * <p>
+     * Default profile name will be included in this list. This method must be called on the UI
+     * thread.
+     *
+     * @return profile names as a list.
+     */
+    @NonNull
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    List<String> getAllProfileNames();
+
+    /**
+     * Deletes the profile data associated with the name.
+     * <p>
+     * If this method returns true, the {@link Profile} object associated with the name will no
+     * longer be usable by the application. Returning false means that this profile doesn't exist.
+     * <p>
+     * Some data may be deleted async and is not guaranteed to be cleared from disk by the time
+     * this method returns. This method must be called on the UI thread.
+     *
+     * @param name the profile name to be deleted.
+     * @return {@code true} if profile exists and its data is to be deleted, otherwise {@code
+     * false}.
+     * @throws IllegalStateException if there are living WebViews associated with that profile.
+     * @throws IllegalArgumentException if you are trying to delete the default Profile.
+     *
+     */
+    @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    boolean deleteProfile(@NonNull String name) throws IllegalStateException,
+            IllegalArgumentException;
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/UserAgentMetadata.java b/webkit/webkit/src/main/java/androidx/webkit/UserAgentMetadata.java
new file mode 100644
index 0000000..cbcc3d3
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/UserAgentMetadata.java
@@ -0,0 +1,511 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Holds user-agent metadata information and uses to generate user-agent client
+ * hints.
+ * <p>
+ * This class is functionally equivalent to
+ * <a href="https://wicg.github.io/ua-client-hints/#interface">UADataValues</a>.
+ * <p>
+ * TODO(b/294183509): unhide
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class UserAgentMetadata {
+    /**
+     * Use this value for bitness to use the platform's default bitness value, which is an empty
+     * string for Android WebView.
+     */
+    public static final int BITNESS_DEFAULT = 0;
+
+    private final List<BrandVersion> mBrandVersionList;
+
+    private final String mFullVersion;
+    private final String mPlatform;
+    private final String mPlatformVersion;
+    private final String mArchitecture;
+    private final String mModel;
+    private boolean mMobile = true;
+    private int mBitness = BITNESS_DEFAULT;
+    private boolean mWow64 = false;
+    private final String mFormFactor;
+
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    private UserAgentMetadata(@Nullable List<BrandVersion> brandVersionList,
+            @Nullable String fullVersion, @Nullable String platform,
+            @Nullable String platformVersion, @Nullable String architecture,
+            @Nullable String model,
+            boolean mobile,
+            int bitness, boolean wow64, @Nullable String formFactor) {
+        mBrandVersionList = brandVersionList;
+        mFullVersion = fullVersion;
+        mPlatform = platform;
+        mPlatformVersion = platformVersion;
+        mArchitecture = architecture;
+        mModel = model;
+        mMobile = mobile;
+        mBitness = bitness;
+        mWow64 = wow64;
+        mFormFactor = formFactor;
+    }
+
+    /**
+     * Returns the current list of user-agent brand versions which are used to populate
+     * user-agent client hints {@code sec-ch-ua} and {@code sec-ch-ua-full-version-list}. Each
+     * {@link BrandVersion} object holds the brand name, brand major version and brand
+     * full version.
+     * <p>
+     * @see Builder#setBrandVersionList
+     *
+     */
+    @Nullable
+    public List<BrandVersion> getBrandVersionList() {
+        return mBrandVersionList;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-full-version} client hint.
+     * <p>
+     * @see Builder#setFullVersion
+     *
+     */
+    @Nullable
+    public String getFullVersion() {
+        return mFullVersion;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-platform} client hint.
+     * <p>
+     * @see Builder#setPlatform
+     *
+     */
+    @Nullable
+    public String getPlatform() {
+        return mPlatform;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-platform-version} client hint.
+     * <p>
+     * @see Builder#setPlatformVersion
+     *
+     * @return Platform version string.
+     */
+    @Nullable
+    public String getPlatformVersion() {
+        return mPlatformVersion;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-arch} client hint.
+     * <p>
+     * @see Builder#setArchitecture
+     *
+     */
+    @Nullable
+    public String getArchitecture() {
+        return mArchitecture;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-model} client hint.
+     * <p>
+     * @see Builder#setModel
+     *
+     */
+    @Nullable
+    public String getModel() {
+        return mModel;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-mobile} client hint.
+     * <p>
+     * @see Builder#setMobile
+     *
+     * @return A boolean indicates user-agent's device mobileness.
+     */
+    public boolean isMobile() {
+        return mMobile;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-bitness} client hint.
+     * <p>
+     * @see Builder#setBitness
+     *
+     * @return An integer indicates the CPU bitness, the integer value will convert to string
+     * when generating the user-agent client hint, and {@link UserAgentMetadata#BITNESS_DEFAULT}
+     * means an empty string.
+     */
+    public int getBitness() {
+        return mBitness;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-wow64} client hint.
+     * <p>
+     * @see Builder#setWow64
+     *
+     * @return A boolean to indicate whether user-agent's binary is running in 64-bit Windows.
+     */
+    public boolean isWow64() {
+        return mWow64;
+    }
+
+    /**
+     * Returns the value for the {@code sec-ch-ua-form-factor} client hint.
+     * <p>
+     * @see Builder#setFormFactor
+     *
+     */
+    @Nullable
+    public String getFormFactor() {
+        return mFormFactor;
+    }
+
+    /**
+     * Two UserAgentMetadata objects are equal only if all the metadata values are equal.
+     */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof UserAgentMetadata)) return false;
+        UserAgentMetadata that = (UserAgentMetadata) o;
+        return mMobile == that.mMobile && mBitness == that.mBitness && mWow64 == that.mWow64
+                && Objects.equals(mBrandVersionList, that.mBrandVersionList)
+                && Objects.equals(mFullVersion, that.mFullVersion)
+                && Objects.equals(mPlatform, that.mPlatform) && Objects.equals(
+                mPlatformVersion, that.mPlatformVersion) && Objects.equals(mArchitecture,
+                that.mArchitecture) && Objects.equals(mModel, that.mModel)
+                && Objects.equals(mFormFactor, that.mFormFactor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mBrandVersionList, mFullVersion, mPlatform, mPlatformVersion,
+                mArchitecture, mModel, mMobile, mBitness, mWow64, mFormFactor);
+    }
+
+    /**
+     * Class that holds brand name, major version and full version. Brand name and major version
+     * used to generated user-agent client hint {@code sec-cu-ua}. Brand name and full version
+     * used to generated user-agent client hint {@code sec-ch-ua-full-version-list}.
+     * <p>
+     * This class is functionally equivalent to
+     * <a href="https://wicg.github.io/ua-client-hints/#interface">NavigatorUABrandVersion</a>.
+     *
+     */
+    public static class BrandVersion {
+        private final String mBrand;
+        private final String mMajorVersion;
+        private final String mFullVersion;
+
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        public BrandVersion(@NonNull String brand, @NonNull String majorVersion,
+                @NonNull String fullVersion) {
+            if (brand.trim().isEmpty() || majorVersion.trim().isEmpty()
+                    || fullVersion.trim().isEmpty()) {
+                throw new IllegalArgumentException("Brand name, major version and full version "
+                        + "should not be blank.");
+            }
+            mBrand = brand;
+            mMajorVersion = majorVersion;
+            mFullVersion = fullVersion;
+        }
+
+        /**
+         * Returns the brand of user-agent brand version tuple.
+         *
+         */
+        @NonNull
+        public String getBrand() {
+            return mBrand;
+        }
+
+        /**
+         * Returns the major version of user-agent brand version tuple.
+         *
+         */
+        @NonNull
+        public String getMajorVersion() {
+            return mMajorVersion;
+        }
+
+        /**
+         * Returns the full version of user-agent brand version tuple.
+         *
+         */
+        @NonNull
+        public String getFullVersion() {
+            return mFullVersion;
+        }
+
+        @NonNull
+        @Override
+        public String toString() {
+            return mBrand + "," + mMajorVersion + "," + mFullVersion;
+        }
+
+        /**
+         * Two BrandVersion objects are equal only if brand name, major version and full version
+         * are equal.
+         */
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (!(o instanceof BrandVersion)) return false;
+            BrandVersion that = (BrandVersion) o;
+            return Objects.equals(mBrand, that.mBrand) && Objects.equals(mMajorVersion,
+                    that.mMajorVersion) && Objects.equals(mFullVersion, that.mFullVersion);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mBrand, mMajorVersion, mFullVersion);
+        }
+    }
+
+    /**
+     * Builder used to create {@link UserAgentMetadata} objects.
+     * <p>
+     * Examples:
+     * <pre class="prettyprint">
+     *   // Create a setting with default options.
+     *   new UserAgentMetadata.Builder().build();
+     *
+     *   // Create a setting with a brand version contains brand name: myBrand, major version: 100,
+     *   // full version: 100.1.1.1.
+     *   new UserAgentMetadata.Builder().setBrandVersionList(
+     *   Collections.singletonList(new BrandVersion("myBrand", "100", "100.1.1.1"))).build();
+     *
+     *   // Create a setting brand version, platform, platform version and bitness.
+     *   new UserAgentMetadata.Builder().setBrandVersionList(
+     *   Collections.singletonList(new BrandVersion("myBrand", "100", "100.1.1.1")))
+     *                                        .setPlatform("myPlatform")
+     *                                        .setPlatform("1.1.1.1")
+     *                                        .setBitness(BITNESS_64)
+     *                                        .build();
+     * </pre>
+     */
+    public static final class Builder {
+        private List<BrandVersion> mBrandVersionList;
+        private String mFullVersion;
+        private String mPlatform;
+        private String mPlatformVersion;
+        private String mArchitecture;
+        private String mModel;
+        private boolean mMobile = true;
+        private int mBitness = BITNESS_DEFAULT;
+        private boolean mWow64 = false;
+        private String mFormFactor;
+
+        /**
+         * Create an empty UserAgentMetadata Builder.
+         */
+        public Builder() {
+        }
+
+        /**
+         * Create a UserAgentMetadata Builder from an existing UserAgentMetadata object.
+         */
+        public Builder(@NonNull UserAgentMetadata uaMetadata) {
+            mBrandVersionList = uaMetadata.getBrandVersionList();
+            mFullVersion = uaMetadata.getFullVersion();
+            mPlatform = uaMetadata.getPlatform();
+            mPlatformVersion = uaMetadata.getPlatformVersion();
+            mArchitecture = uaMetadata.getArchitecture();
+            mModel = uaMetadata.getModel();
+            mMobile = uaMetadata.isMobile();
+            mBitness = uaMetadata.getBitness();
+            mWow64 = uaMetadata.isWow64();
+            mFormFactor = uaMetadata.getFormFactor();
+        }
+
+        /**
+         * Builds the current settings into a UserAgentMetadata object.
+         *
+         * @return The UserAgentMetadata object represented by this Builder
+         */
+        @NonNull
+        public UserAgentMetadata build() {
+            return new UserAgentMetadata(mBrandVersionList, mFullVersion, mPlatform,
+                    mPlatformVersion, mArchitecture, mModel, mMobile, mBitness, mWow64,
+                    mFormFactor);
+        }
+
+        /**
+         * Sets user-agent metadata brands and their versions. The brand name, major version and
+         * full version should not be blank.
+         *
+         * @param brandVersions a list of {@link BrandVersion} used to generated user-agent client
+         *                     hints {@code sec-cu-ua} and {@code sec-ch-ua-full-version-list}.
+         *
+         */
+        @NonNull
+        public Builder setBrandVersionList(@NonNull List<BrandVersion> brandVersions) {
+            if (brandVersions.isEmpty()) {
+                throw new IllegalArgumentException("Brand version list should not be empty.");
+            }
+            mBrandVersionList = brandVersions;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata full version. The full version should not be blank, even
+         * though the <a href="https://wicg.github.io/ua-client-hints">spec<a/> about brand full
+         * version could be empty. The blank full version could cause inconsistent brands when
+         * generating brand version related user-agent client hints. It also gives bad experience
+         * for developers when processing the brand full version.
+         *
+         * @param fullVersion The full version is used to generate user-agent client hint
+         *                    {@code sec-ch-ua-full-version}.
+         *
+         */
+        @NonNull
+        public Builder setFullVersion(@NonNull String fullVersion) {
+            if (fullVersion.trim().isEmpty()) {
+                throw new IllegalArgumentException("Full version should not be blank.");
+            }
+            mFullVersion = fullVersion;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata platform. The platform should not be blank.
+         *
+         * @param platform The platform is used to generate user-agent client hint
+         *                 {@code sec-ch-ua-platform}.
+         *
+         */
+        @NonNull
+        public Builder setPlatform(@NonNull String platform) {
+            if (platform.trim().isEmpty()) {
+                throw new IllegalArgumentException("Platform should not be blank.");
+            }
+            mPlatform = platform;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata platform version. The value should not be null but can be
+         * empty string.
+         *
+         * @param platformVersion The platform version is used to generate user-agent client
+         *                        hint {@code sec-ch-ua-platform-version}.
+         *
+         */
+        @NonNull
+        public Builder setPlatformVersion(@NonNull String platformVersion) {
+            mPlatformVersion = platformVersion;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata architecture. The value should not be null but can be
+         * empty string.
+         *
+         * @param architecture The architecture is used to generate user-agent client hint
+         *                     {@code sec-ch-ua-arch}.
+         *
+         */
+        @NonNull
+        public Builder setArchitecture(@NonNull String architecture) {
+            mArchitecture = architecture;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata model. The value should not be null but can be empty string.
+         *
+         * @param model The model is used to generate user-agent client hint
+         *              {@code sec-ch-ua-model}.
+         *
+         */
+        @NonNull
+        public Builder setModel(@NonNull String model) {
+            mModel = model;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata mobile, the default value is true.
+         *
+         * @param mobile The mobile is used to generate user-agent client hint
+         *               {@code sec-ch-ua-mobile}.
+         *
+         */
+        @NonNull
+        public Builder setMobile(boolean mobile) {
+            mMobile = mobile;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata bitness, the default value is
+         * {@link UserAgentMetadata#BITNESS_DEFAULT}, which indicates an empty string for
+         * {@code sec-ch-ua-bitness}.
+         *
+         * @param bitness The bitness is used to generate user-agent client hint
+         *                {@code sec-ch-ua-bitness}.
+         *
+         */
+        @NonNull
+        public Builder setBitness(int bitness) {
+            mBitness = bitness;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata wow64, the default is false.
+         *
+         * @param wow64 The wow64 is used to generate user-agent client hint
+         *              {@code sec-ch-ua-wow64}.
+         *
+         */
+        @NonNull
+        public Builder setWow64(boolean wow64) {
+            mWow64 = wow64;
+            return this;
+        }
+
+        /**
+         * Sets the user-agent metadata form factor. The value should not be null but can be
+         * empty string.
+         *
+         * @param formFactor The form factor is used to generate user-agent client hint
+         *                   {@code sec-ch-ua-form-factor}.
+         *
+         */
+        @NonNull
+        public Builder setFormFactor(@NonNull String formFactor) {
+            mFormFactor = formFactor;
+            return this;
+        }
+    }
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java b/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
index f50fb6a..b447b9d 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
@@ -697,6 +697,78 @@
         }
     }
 
+    /**
+     * Sets the WebView's user-agent metadata to generate user-agent client hints.
+     * <p>
+     * UserAgentMetadata in WebView is used to populate user-agent client hints, they can provide
+     * the client’s branding and version information, the underlying operating system’s branding
+     * and major version, as well as details about the underlying device.
+     * <p>
+     * The user-agent string can be set with {@link WebSettings#setUserAgentString(String)}, here
+     * are the details on how this API interacts it to generate user-agent client hints.
+     * <p>
+     * If the UserAgentMetadata is null and the overridden user-agent contains the system default
+     * user-agent, the system default value will be used.
+     * <p>
+     * If the UserAgentMetadata is null but the overridden user-agent doesn't contain the system
+     * default user-agent, only the
+     * <a href="https://wicg.github.io/client-hints-infrastructure/#low-entropy-hint-table">low-entry user-agent client hints</a> will be generated.
+     *
+     * <p> See <a href="https://wicg.github.io/ua-client-hints/">
+     * this</a> for more information about User-Agent Client Hints.
+     *
+     * <p>
+     * This method should only be called if
+     * {@link WebViewFeature#isFeatureSupported(String)}
+     * returns true for {@link WebViewFeature#USER_AGENT_METADATA}.
+     *
+     * @param metadata the WebView's user-agent metadata.
+     *
+     * TODO(b/294183509): unhide
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @RequiresFeature(name = WebViewFeature.USER_AGENT_METADATA,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    public static void setUserAgentMetadata(@NonNull WebSettings settings,
+            @NonNull UserAgentMetadata metadata) {
+        final ApiFeature.NoFramework feature =
+                WebViewFeatureInternal.USER_AGENT_METADATA;
+        if (feature.isSupportedByWebView()) {
+            getAdapter(settings).setUserAgentMetadata(metadata);
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    /**
+     * Get the WebView's user-agent metadata which used to generate user-agent client hints.
+     *
+     * <p> See <a href="https://wicg.github.io/ua-client-hints/"> this</a> for more information
+     * about User-Agent Client Hints.
+     *
+     * <p>
+     * This method should only be called if
+     * {@link WebViewFeature#isFeatureSupported(String)}
+     * returns true for {@link WebViewFeature#USER_AGENT_METADATA}.
+     *
+     * TODO(b/294183509): unhide
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @RequiresFeature(name = WebViewFeature.USER_AGENT_METADATA,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    @NonNull
+    public static UserAgentMetadata getUserAgentMetadata(@NonNull WebSettings settings) {
+        final ApiFeature.NoFramework feature =
+                WebViewFeatureInternal.USER_AGENT_METADATA;
+        if (feature.isSupportedByWebView()) {
+            return getAdapter(settings).getUserAgentMetadata();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
     private static WebSettingsAdapter getAdapter(WebSettings settings) {
         return WebViewGlueCommunicator.getCompatConverter().convertSettings(settings);
     }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java b/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
index 34472aa..8deb404 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
@@ -1072,6 +1072,66 @@
         }
     }
 
+    /**
+     * Sets the Profile with its name as the current Profile for this WebView.
+     * <ul>
+     * <li> This should be called before doing anything else with WebView other than attaching it to
+     * the view hierarchy.
+     * <li> This should be only called if WebView is to use a Profile other than the default.
+     * <li> This method will create the profile if it doesn't exist.
+     * </ul>
+     * This method must be called on the UI thread.
+     *
+     * @param webView the WebView to modify.
+     * @param profileName the name of the profile to use in the passed {@code webView}.
+     * @throws IllegalStateException if the WebView has been destroyed.
+     * @throws IllegalStateException if the previous profile has been accessed via a call to
+     * {@link WebViewCompat#getProfile(WebView)}.
+     * @throws IllegalStateException if the profile has already been set previously via this method.
+     * @throws IllegalStateException if {@link WebView#evaluateJavascript(String, ValueCallback)} is
+     * called on the WebView before this method.
+     * @throws IllegalStateException if the WebView has previously navigated to a web page.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @RequiresFeature(
+            name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    public static void setProfile(@NonNull WebView webView,
+            @NonNull String profileName) throws IllegalStateException {
+        final ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            getProvider(webView).setProfileWithName(profileName);
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    /**
+     * Gets the Profile associated with this WebView.
+     * <p>
+     * Gets the profile object set on this WebView using
+     * {@link WebViewCompat#setProfile(WebView, String)}, or the default profile if it has not
+     * been changed.
+     * <p> This method must be called on the UI thread.
+     *
+     * @param webView the WebView to get the profile object associated with.
+     * @return the profile object set to this WebView.
+     * @throws IllegalStateException if the WebView has been destroyed.
+     */
+    @NonNull
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @RequiresFeature(
+            name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    public static Profile getProfile(@NonNull WebView webView) throws IllegalStateException {
+        final ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return getProvider(webView).getProfile();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
     private static WebViewProviderFactory getFactory() {
         return WebViewGlueCommunicator.getFactory();
     }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
index 87f4b9e..628cb88 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
@@ -102,6 +102,8 @@
             ENTERPRISE_AUTHENTICATION_APP_LINK_POLICY,
             GET_COOKIE_INFO,
             REQUESTED_WITH_HEADER_ALLOW_LIST,
+            USER_AGENT_METADATA,
+            MULTI_PROFILE,
     })
     @Retention(RetentionPolicy.SOURCE)
     @Target({ElementType.PARAMETER, ElementType.METHOD})
@@ -534,6 +536,35 @@
             "REQUESTED_WITH_HEADER_ALLOW_LIST";
 
     /**
+     * Feature for {@link #isFeatureSupported(String)}.
+     * This feature covers
+     * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#getUserAgentMetadata(WebSettings)}, and
+     * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#setUserAgentMetadata(WebSettings, UserAgentMetadata)}.
+     *
+     * TODO(b/294183509): unhide
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static final String USER_AGENT_METADATA = "USER_AGENT_METADATA";
+
+    /**
+     * Feature for {@link #isFeatureSupported(String)}.
+     * This feature covers
+     * {@link Profile#getName()}.
+     * {@link Profile#getWebStorage()}.
+     * {@link Profile#getCookieManager()}.
+     * {@link Profile#getGeolocationPermissions()}.
+     * {@link Profile#getServiceWorkerController()}.
+     * {@link ProfileStore#getProfile(String)}.
+     * {@link ProfileStore#getOrCreateProfile(String)}.
+     * {@link ProfileStore#getAllProfileNames()}.
+     * {@link ProfileStore#deleteProfile(String)}.
+     * {@link ProfileStore#getInstance()}.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static final String MULTI_PROFILE = "MULTI_PROFILE";
+
+    /**
      * Return whether a feature is supported at run-time. On devices running Android version {@link
      * android.os.Build.VERSION_CODES#LOLLIPOP} and higher, this will check whether a feature is
      * supported, depending on the combination of the desired feature, the Android version of
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java b/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java
index 508ff54..62285cf 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java
@@ -21,6 +21,7 @@
 import androidx.annotation.NonNull;
 
 import org.chromium.support_lib_boundary.DropDataContentProviderBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
 import org.chromium.support_lib_boundary.ProxyControllerBoundaryInterface;
 import org.chromium.support_lib_boundary.ServiceWorkerControllerBoundaryInterface;
 import org.chromium.support_lib_boundary.StaticsBoundaryInterface;
@@ -87,4 +88,10 @@
     public DropDataContentProviderBoundaryInterface getDropDataProvider() {
         throw new UnsupportedOperationException(UNSUPPORTED_EXCEPTION_EXPLANATION);
     }
+
+    @NonNull
+    @Override
+    public ProfileStoreBoundaryInterface getProfileStore() {
+        throw new UnsupportedOperationException(UNSUPPORTED_EXCEPTION_EXPLANATION);
+    }
 }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileImpl.java b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileImpl.java
new file mode 100644
index 0000000..77a124a
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileImpl.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2023 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 androidx.webkit.internal;
+
+import android.webkit.CookieManager;
+import android.webkit.GeolocationPermissions;
+import android.webkit.ServiceWorkerController;
+import android.webkit.WebStorage;
+
+import androidx.annotation.NonNull;
+import androidx.webkit.Profile;
+
+import org.chromium.support_lib_boundary.ProfileBoundaryInterface;
+
+/**
+ * Internal implementation of Profile.
+ */
+public class ProfileImpl implements Profile {
+
+    private final ProfileBoundaryInterface mProfileImpl;
+
+    ProfileImpl(ProfileBoundaryInterface profileImpl) {
+        mProfileImpl = profileImpl;
+    }
+
+    // Use ProfileStore to create a Profile instance.
+    private ProfileImpl() {
+        mProfileImpl = null;
+    }
+
+    @Override
+    @NonNull
+    public String getName() {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return mProfileImpl.getName();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    @Override
+    @NonNull
+    public CookieManager getCookieManager() throws IllegalStateException {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return mProfileImpl.getCookieManager();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    @Override
+    @NonNull
+    public WebStorage getWebStorage() throws IllegalStateException {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return mProfileImpl.getWebStorage();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    @NonNull
+    @Override
+    public GeolocationPermissions getGeolocationPermissions() throws IllegalStateException {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return mProfileImpl.getGeoLocationPermissions();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    @NonNull
+    @Override
+    public ServiceWorkerController getServiceWorkerController() throws IllegalStateException {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return mProfileImpl.getServiceWorkerController();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileStoreImpl.java b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileStoreImpl.java
new file mode 100644
index 0000000..b237096
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileStoreImpl.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2023 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 androidx.webkit.internal;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.webkit.Profile;
+import androidx.webkit.ProfileStore;
+
+import org.chromium.support_lib_boundary.ProfileBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
+import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;
+
+import java.lang.reflect.InvocationHandler;
+import java.util.List;
+
+/**
+ * Internal implementation of ProfileStore.
+ */
+public class ProfileStoreImpl implements ProfileStore {
+
+    private final ProfileStoreBoundaryInterface mProfileStoreImpl;
+    private static ProfileStore sInstance;
+
+    private ProfileStoreImpl(ProfileStoreBoundaryInterface profileStoreImpl) {
+        mProfileStoreImpl = profileStoreImpl;
+    }
+
+    private ProfileStoreImpl() {
+        mProfileStoreImpl = null;
+    }
+
+    /**
+     * Returns the production instance of ProfileStore.
+     *
+     * @return ProfileStore instance to use for managing profiles.
+     */
+    @NonNull
+    public static ProfileStore getInstance() {
+        if (sInstance == null) {
+            sInstance = new ProfileStoreImpl(
+                    WebViewGlueCommunicator.getFactory().getProfileStore());
+        }
+        return sInstance;
+    }
+
+    @Override
+    @NonNull
+    public Profile getOrCreateProfile(@NonNull String name) {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return new ProfileImpl(BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+                    ProfileBoundaryInterface.class, mProfileStoreImpl.getOrCreateProfile(name)));
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    @Override
+    @Nullable
+    public Profile getProfile(@NonNull String name) {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            InvocationHandler profileBoundaryInterface = mProfileStoreImpl.getProfile(name);
+            if (profileBoundaryInterface != null) {
+                return new ProfileImpl(BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+                        ProfileBoundaryInterface.class, profileBoundaryInterface));
+            } else {
+                return null;
+            }
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    @Override
+    @NonNull
+    public List<String> getAllProfileNames() {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return mProfileStoreImpl.getAllProfileNames();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    @Override
+    public boolean deleteProfile(@NonNull String name) throws IllegalStateException {
+        ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return mProfileStoreImpl.deleteProfile(name);
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/UserAgentMetadataInternal.java b/webkit/webkit/src/main/java/androidx/webkit/internal/UserAgentMetadataInternal.java
new file mode 100644
index 0000000..96beee3
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/UserAgentMetadataInternal.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright 2023 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 androidx.webkit.internal;
+
+import androidx.annotation.NonNull;
+import androidx.webkit.UserAgentMetadata;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Internal implementation of translation between {@code Map<String, Object>} and
+ * {@link androidx.webkit.UserAgentMetadata}.
+ */
+public class UserAgentMetadataInternal {
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata mobile,
+     * used to generate user-agent client hint {@code sec-ch-ua-mobile}.
+     */
+    private static final String MOBILE = "MOBILE";
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata brand version list,
+     * used to generate user-agent client hints {@code sec-ch-ua}, and
+     * {@code sec-ch-ua-full-version-list}.
+     */
+    private static final String BRAND_VERSION_LIST = "BRAND_VERSION_LIST";
+
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata full version,
+     * used to generate user-agent client hint {@code sec-ch-ua-full-version}.
+     */
+    private static final String FULL_VERSION = "FULL_VERSION";
+
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata platform,
+     * used to generate user-agent client hint {@code sec-ch-ua-platform}.
+     */
+    private static final String PLATFORM = "PLATFORM";
+
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata platform version,
+     * used to generate user-agent client hint {@code sec-ch-ua-platform-version}.
+     */
+    private static final String PLATFORM_VERSION = "PLATFORM_VERSION";
+
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata architecture,
+     * used to generate user-agent client hint {@code sec-ch-ua-arch}.
+     */
+    private static final String ARCHITECTURE = "ARCHITECTURE";
+
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata model,
+     * used to generate user-agent client hint {@code sec-ch-ua-model}.
+     */
+    private static final String MODEL = "MODEL";
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata bitness,
+     * used to generate user-agent client hint {@code sec-ch-ua-bitness}.
+     */
+    private static final String BITNESS = "BITNESS";
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata wow64,
+     * used to generate user-agent client hint {@code sec-ch-ua-wow64}.
+     */
+    private static final String WOW64 = "WOW64";
+    /**
+     * Predefined set of name for user-agent metadata key.
+     * Key name for user-agent metadata form_factor,
+     * used to generate user-agent client hint {@code sec-ch-ua-form-factor}.
+     */
+    private static final String FORM_FACTOR = "FORM_FACTOR";
+    /**
+     * each brand should contains brand, major version and full version.
+     */
+    private static final int BRAND_VERSION_LENGTH = 3;
+
+    /**
+     * Convert the UserAgentMetadata setting to a map of object and pass down to chromium.
+     *
+     * @return A hashmap contains user-agent metadata key name, and corresponding objects.
+     */
+    @NonNull
+    static Map<String, Object> convertUserAgentMetadataToMap(
+            @NonNull UserAgentMetadata uaMetadata) {
+        Map<String, Object> item = new HashMap<>();
+        item.put(BRAND_VERSION_LIST, getBrandVersionArray(uaMetadata.getBrandVersionList()));
+        item.put(FULL_VERSION, uaMetadata.getFullVersion());
+        item.put(PLATFORM, uaMetadata.getPlatform());
+        item.put(PLATFORM_VERSION, uaMetadata.getPlatformVersion());
+        item.put(ARCHITECTURE, uaMetadata.getArchitecture());
+        item.put(MODEL, uaMetadata.getModel());
+        item.put(MOBILE, uaMetadata.isMobile());
+        item.put(BITNESS, uaMetadata.getBitness());
+        item.put(WOW64, uaMetadata.isWow64());
+        item.put(FORM_FACTOR, uaMetadata.getFormFactor());
+        return item;
+    }
+
+    private static String[][] getBrandVersionArray(
+            List<UserAgentMetadata.BrandVersion> brandVersionList) {
+        if (brandVersionList == null) {
+            return null;
+        }
+
+        String[][] brandVersionArray = new String[brandVersionList.size()][BRAND_VERSION_LENGTH];
+        for (int i = 0; i < brandVersionList.size(); i++) {
+            brandVersionArray[i][0] = brandVersionList.get(i).getBrand();
+            brandVersionArray[i][1] = brandVersionList.get(i).getMajorVersion();
+            brandVersionArray[i][2] = brandVersionList.get(i).getFullVersion();
+        }
+        return brandVersionArray;
+    }
+
+    /**
+     * Convert a map of object to an instance of UserAgentMetadata.
+     *
+     * @param uaMetadataMap A hashmap contains user-agent metadata key name, and corresponding
+     *                      objects.
+     * @return This UserAgentMetadata object
+     */
+    @NonNull
+    static UserAgentMetadata getUserAgentMetadataFromMap(
+            @NonNull Map<String, Object> uaMetadataMap) {
+        UserAgentMetadata.Builder builder = new UserAgentMetadata.Builder();
+
+        Object brandVersionValue = uaMetadataMap.get(BRAND_VERSION_LIST);
+        if (brandVersionValue != null) {
+            String[][] overrideBrandVersionList = (String[][]) brandVersionValue;
+            List<UserAgentMetadata.BrandVersion> branVersionList = new ArrayList<>();
+            for (String[] brandVersionInfo : overrideBrandVersionList) {
+                branVersionList.add(new UserAgentMetadata.BrandVersion(brandVersionInfo[0],
+                        brandVersionInfo[1], brandVersionInfo[2]));
+            }
+            builder.setBrandVersionList(branVersionList);
+        }
+
+        String fullVersion = (String) uaMetadataMap.get(FULL_VERSION);
+        if (fullVersion != null) {
+            builder.setFullVersion(fullVersion);
+        }
+
+        String platform = (String) uaMetadataMap.get(PLATFORM);
+        if (platform != null) {
+            builder.setPlatform(platform);
+        }
+
+        String platformVersion = (String) uaMetadataMap.get(PLATFORM_VERSION);
+        if (platformVersion != null) {
+            builder.setPlatformVersion(platformVersion);
+        }
+
+        String architecture = (String) uaMetadataMap.get(ARCHITECTURE);
+        if (architecture != null) {
+            builder.setArchitecture(architecture);
+        }
+
+        String model = (String) uaMetadataMap.get(MODEL);
+        if (model != null) {
+            builder.setModel(model);
+        }
+
+        Boolean isMobile = (Boolean) uaMetadataMap.get(MOBILE);
+        if (isMobile != null) {
+            builder.setMobile(isMobile);
+        }
+
+        Integer bitness = (Integer) uaMetadataMap.get(BITNESS);
+        if (bitness != null) {
+            builder.setBitness(bitness);
+        }
+
+        Boolean isWow64 = (Boolean) uaMetadataMap.get(WOW64);
+        if (isWow64 != null) {
+            builder.setWow64(isWow64);
+        }
+
+        String formFactor = (String) uaMetadataMap.get(FORM_FACTOR);
+        if (formFactor != null) {
+            builder.setFormFactor(formFactor);
+        }
+        return builder.build();
+    }
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
index 041647d..6fb6231 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
@@ -19,6 +19,7 @@
 import android.webkit.WebSettings;
 
 import androidx.annotation.NonNull;
+import androidx.webkit.UserAgentMetadata;
 
 import org.chromium.support_lib_boundary.WebSettingsBoundaryInterface;
 
@@ -153,4 +154,24 @@
     public void setRequestedWithHeaderOriginAllowList(@NonNull Set<String> allowList) {
         mBoundaryInterface.setRequestedWithHeaderOriginAllowList(allowList);
     }
+
+    /**
+     * Adapter method for
+     * {@link androidx.webkit.WebSettingsCompat#getUserAgentMetadata(WebSettings)}.
+     */
+    @NonNull
+    public UserAgentMetadata getUserAgentMetadata() {
+        return UserAgentMetadataInternal.getUserAgentMetadataFromMap(
+                mBoundaryInterface.getUserAgentMetadataMap());
+    }
+
+    /**
+     * Adapter method for
+     * {@link androidx.webkit.WebSettingsCompat#setUserAgentMetadata(
+     * WebSettings, UserAgentMetadata)}.
+     */
+    public void setUserAgentMetadata(@NonNull UserAgentMetadata uaMetadata) {
+        mBoundaryInterface.setUserAgentMetadataFromMap(
+                UserAgentMetadataInternal.convertUserAgentMetadataToMap(uaMetadata));
+    }
 }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
index 668dac6..4dd4ed6 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
@@ -30,6 +30,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
+import androidx.webkit.Profile;
+import androidx.webkit.ProfileStore;
 import androidx.webkit.ProxyConfig;
 import androidx.webkit.ProxyController;
 import androidx.webkit.SafeBrowsingResponseCompat;
@@ -530,6 +532,46 @@
     public static final ApiFeature.NoFramework REQUESTED_WITH_HEADER_ALLOW_LIST =
             new ApiFeature.NoFramework(WebViewFeature.REQUESTED_WITH_HEADER_ALLOW_LIST,
                     Features.REQUESTED_WITH_HEADER_ALLOW_LIST);
+
+    /**
+     * This feature covers
+     * {@link androidx.webkit.WebSettingsCompat#setUserAgentMetadata(WebSettings, UserAgentMetadata)} and
+     * {@link androidx.webkit.WebSettingsCompat#getUserAgentMetadata(WebSettings)}.
+     *
+     */
+    public static final ApiFeature.NoFramework USER_AGENT_METADATA =
+            new ApiFeature.NoFramework(WebViewFeature.USER_AGENT_METADATA,
+                    Features.USER_AGENT_METADATA);
+
+    /**
+     * Feature for {@link #isFeatureSupported(String)}.
+     * This feature covers
+     * {@link Profile#getName()}.
+     * {@link Profile#getWebStorage()}.
+     * {@link Profile#getCookieManager()}.
+     * {@link Profile#getGeolocationPermissions()}.
+     * {@link Profile#getServiceWorkerController()}.
+     * {@link ProfileStore#getProfile(String)}.
+     * {@link ProfileStore#getOrCreateProfile(String)}.
+     * {@link ProfileStore#getAllProfileNames()}.
+     * {@link ProfileStore#deleteProfile(String)}.
+     * {@link ProfileStore#getInstance()}.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static final ApiFeature.NoFramework MULTI_PROFILE =
+            new ApiFeature.NoFramework(WebViewFeature.MULTI_PROFILE, Features.MULTI_PROFILE) {
+                @Override
+                public boolean isSupportedByWebView() {
+                    // Multi-process mode is a requirement for Multi-Profile feature.
+                    if (!super.isSupportedByWebView()) {
+                        return false;
+                    }
+                    if (WebViewFeature.isFeatureSupported(WebViewFeature.MULTI_PROCESS)) {
+                        return WebViewCompat.isMultiProcessEnabled();
+                    }
+                    return false;
+                }
+            };
     // --- Add new feature constants above this line ---
 
     private WebViewFeatureInternal() {
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
index 919c549..68c1056 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
@@ -26,12 +26,14 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.webkit.Profile;
 import androidx.webkit.WebMessageCompat;
 import androidx.webkit.WebMessagePortCompat;
 import androidx.webkit.WebViewCompat;
 import androidx.webkit.WebViewRenderProcess;
 import androidx.webkit.WebViewRenderProcessClient;
 
+import org.chromium.support_lib_boundary.ProfileBoundaryInterface;
 import org.chromium.support_lib_boundary.WebViewProviderBoundaryInterface;
 import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;
 
@@ -167,4 +169,22 @@
                 : null;
         mImpl.setWebViewRendererClient(handler);
     }
+
+    /**
+     * Adapter method for {@link WebViewCompat#setProfile(WebView, String)}.
+     */
+    public void setProfileWithName(@NonNull String profileName) {
+        mImpl.setProfile(profileName);
+    }
+
+    /**
+     * Adapter method for {@link WebViewCompat#getProfile(WebView)}.
+     */
+    @NonNull
+    public Profile getProfile() {
+        ProfileBoundaryInterface profile = BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+                ProfileBoundaryInterface.class, mImpl.getProfile());
+
+        return new ProfileImpl(profile);
+    }
 }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
index 4c85e7d..a8ff33f 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
@@ -22,6 +22,7 @@
 import androidx.annotation.NonNull;
 
 import org.chromium.support_lib_boundary.DropDataContentProviderBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
 import org.chromium.support_lib_boundary.ProxyControllerBoundaryInterface;
 import org.chromium.support_lib_boundary.ServiceWorkerControllerBoundaryInterface;
 import org.chromium.support_lib_boundary.StaticsBoundaryInterface;
@@ -87,4 +88,12 @@
      */
     @NonNull
     DropDataContentProviderBoundaryInterface getDropDataProvider();
+
+    /**
+     * Fetch the boundary interface representing profile store for Multi-Profile.
+     */
+    @NonNull
+    ProfileStoreBoundaryInterface getProfileStore();
+
+
 }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
index 3843c26..0c62bf1 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
@@ -21,6 +21,7 @@
 import androidx.annotation.NonNull;
 
 import org.chromium.support_lib_boundary.DropDataContentProviderBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
 import org.chromium.support_lib_boundary.ProxyControllerBoundaryInterface;
 import org.chromium.support_lib_boundary.ServiceWorkerControllerBoundaryInterface;
 import org.chromium.support_lib_boundary.StaticsBoundaryInterface;
@@ -129,4 +130,11 @@
         return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
                 DropDataContentProviderBoundaryInterface.class, mImpl.getDropDataProvider());
     }
+
+    @NonNull
+    @Override
+    public ProfileStoreBoundaryInterface getProfileStore() {
+        return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+                ProfileStoreBoundaryInterface.class, mImpl.getProfileStore());
+    }
 }
diff --git a/window/window-demos/demo/src/main/AndroidManifest.xml b/window/window-demos/demo/src/main/AndroidManifest.xml
index 597cb51..5b81535 100644
--- a/window/window-demos/demo/src/main/AndroidManifest.xml
+++ b/window/window-demos/demo/src/main/AndroidManifest.xml
@@ -51,6 +51,22 @@
             android:supportsPictureInPicture="true"
             android:label="@string/display_features_no_config_change" />
         <activity
+            android:name=".DisplayFeaturesLetterboxPortraitSlimActivity"
+            android:exported="false"
+            android:resizeableActivity="false"
+            android:screenOrientation="portrait"
+            android:minAspectRatio="2"
+            android:maxAspectRatio="3"
+            android:label="@string/display_features_slim_portrait" />
+        <activity
+            android:name=".DisplayFeaturesLetterboxLandscapeSlimActivity"
+            android:exported="false"
+            android:resizeableActivity="false"
+            android:screenOrientation="landscape"
+            android:minAspectRatio="2"
+            android:maxAspectRatio="3"
+            android:label="@string/display_features_slim_landscape" />
+        <activity
             android:name=".SplitLayoutActivity"
             android:exported="false"
             android:label="@string/split_layout" />
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxLandscapeSlimActivity.kt
similarity index 67%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxLandscapeSlimActivity.kt
index 40b8f5b..e681ab8 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxLandscapeSlimActivity.kt
@@ -14,7 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+package androidx.window.demo
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+import androidx.window.demo.common.DisplayFeaturesActivity
+
+/**
+ * An [android.app.Activity] that should be letterboxed even though the display has a landscape
+ * orientation.
+ */
+class DisplayFeaturesLetterboxLandscapeSlimActivity : DisplayFeaturesActivity()
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxPortraitSlimActivity.kt
similarity index 67%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxPortraitSlimActivity.kt
index 40b8f5b..50f1119 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxPortraitSlimActivity.kt
@@ -13,8 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package androidx.window.demo
 
-package androidx.bluetooth.integration.testapp.ui.common
+import androidx.window.demo.common.DisplayFeaturesActivity
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+/**
+ * An [android.app.Activity] that should be letterboxed even though the display has a portrait
+ * orientation.
+ */
+class DisplayFeaturesLetterboxPortraitSlimActivity : DisplayFeaturesActivity()
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt
index 109394a..e3d2706 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt
@@ -19,14 +19,20 @@
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
 import androidx.recyclerview.widget.RecyclerView
+import androidx.window.demo.DisplayFeaturesLetterboxLandscapeSlimActivity
+import androidx.window.demo.DisplayFeaturesLetterboxPortraitSlimActivity
 import androidx.window.demo.DisplayFeaturesNoConfigChangeActivity
 import androidx.window.demo.ImeActivity
 import androidx.window.demo.PresentationActivity
 import androidx.window.demo.R
 import androidx.window.demo.R.string.display_features_config_change
 import androidx.window.demo.R.string.display_features_no_config_change
+import androidx.window.demo.R.string.display_features_slim_landscape
+import androidx.window.demo.R.string.display_features_slim_portrait
 import androidx.window.demo.R.string.show_all_display_features_config_change_description
+import androidx.window.demo.R.string.show_all_display_features_landscape_slim
 import androidx.window.demo.R.string.show_all_display_features_no_config_change_description
+import androidx.window.demo.R.string.show_all_display_features_portrait_slim
 import androidx.window.demo.SplitLayoutActivity
 import androidx.window.demo.WindowMetricsActivity
 import androidx.window.demo.common.DisplayFeaturesActivity
@@ -51,6 +57,16 @@
                 clazz = DisplayFeaturesNoConfigChangeActivity::class.java
             ),
             DemoItem(
+                buttonTitle = getString(display_features_slim_portrait),
+                description = getString(show_all_display_features_portrait_slim),
+                clazz = DisplayFeaturesLetterboxPortraitSlimActivity::class.java
+            ),
+            DemoItem(
+                buttonTitle = getString(display_features_slim_landscape),
+                description = getString(show_all_display_features_landscape_slim),
+                clazz = DisplayFeaturesLetterboxLandscapeSlimActivity::class.java
+            ),
+            DemoItem(
                 buttonTitle = getString(R.string.window_metrics),
                 description = getString(R.string.window_metrics_description),
                 clazz = WindowMetricsActivity::class.java
diff --git a/window/window-demos/demo/src/main/res/values/strings.xml b/window/window-demos/demo/src/main/res/values/strings.xml
index fb13fde..892cecc 100644
--- a/window/window-demos/demo/src/main/res/values/strings.xml
+++ b/window/window-demos/demo/src/main/res/values/strings.xml
@@ -23,6 +23,8 @@
     <string name="green_droid">Green droid</string>
     <string name="display_features_config_change">Display features handle config change</string>
     <string name="display_features_no_config_change">Display features no config change</string>
+    <string name="display_features_slim_portrait">Display features slim portrait</string>
+    <string name="display_features_slim_landscape">Display features slim landscape</string>
     <string name="split_layout">Split layout</string>
     <string name="presentation">Presentation</string>
     <string name="start_presentation">Start presentation</string>
@@ -39,6 +41,8 @@
     <string name="test_activity">Test activity</string>
     <string name="show_all_display_features_config_change_description">Show all display features of the device on the screen and handle config changes</string>
     <string name="show_all_display_features_no_config_change_description">Show all display features of the device on the screen and do not handle config changes.  The activity is recreated instead on rotation or resize</string>
+    <string name="show_all_display_features_portrait_slim">Show all display features of the device on the screen with slim portrait window.</string>
+    <string name="show_all_display_features_landscape_slim">Show all display features of the device on the screen with slim landscape window.</string>
     <string name="split_layout_demo_description">Demo of a layout that splits the content to sides of a fold or a hinge. If not present or minimal size requirements are not meant, it behave like a FrameLayout.</string>
     <string name="presentation_demo_description">Demo of using Presentation API to show content on secondary display.</string>
     <string name="window_metrics">Window metrics</string>
diff --git a/work/work-inspection/src/androidTest/java/androidx/work/inspection/ProguardDetectionTest.kt b/work/work-inspection/src/androidTest/java/androidx/work/inspection/ProguardDetectionTest.kt
new file mode 100644
index 0000000..2fa42c5
--- /dev/null
+++ b/work/work-inspection/src/androidTest/java/androidx/work/inspection/ProguardDetectionTest.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2023 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 androidx.work.inspection
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class ProguardDetectionTest {
+
+    @Test
+    fun testProguardFileExists() {
+        val proguard = Class.forName("androidx.inspection.work.runtime.ProguardDetection")
+        Truth.assertThat(proguard).isNotNull()
+    }
+}
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
index a9209c7..38217c0 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
@@ -32,6 +32,7 @@
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.isOneOf;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -93,7 +94,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -404,7 +404,6 @@
                 containsInAnyOrder(value1, value2));
     }
 
-    @Ignore // b/268530685
     @Test
     @SmallTest
     public void testDependencies_setsPeriodStartTimesForUnblockedWork() {
@@ -425,12 +424,14 @@
             mDatabase.endTransaction();
         }
 
+        assertThat(mWorkSpecDao.getWorkSpec(work.getStringId()).lastEnqueueTime, is(-1L));
+
         long beforeUnblockedTime = System.currentTimeMillis();
 
         createBuilder(prerequisiteWork.getStringId()).build().run();
 
         WorkSpec workSpec = mWorkSpecDao.getWorkSpec(work.getStringId());
-        assertThat(workSpec.lastEnqueueTime, is(greaterThan(beforeUnblockedTime)));
+        assertThat(workSpec.lastEnqueueTime, is(greaterThanOrEqualTo(beforeUnblockedTime)));
     }
 
     @Test