<?xml version="1.0" encoding="UTF-8"?>
<!-- see https://www.mojohaus.org/clirr-maven-plugin/examples/ignored-differences.html -->
<differences>
  <!-- Not breaking, new method has a default implementation -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.cloud.storage.BlobWriteSession blobWriteSession(com.google.cloud.storage.BlobInfo, com.google.cloud.storage.Storage$BlobWriteOption[])</method>
  </difference>

  <!-- Not breaking, new method has a default implementation -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/UnbufferedWritableByteChannelSession$UnbufferedWritableByteChannel</className>
    <method>* writeAndClose(*)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setHierarchicalNamespace(com.google.cloud.storage.BucketInfo$HierarchicalNamespace)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobInfo$Builder</className>
    <method>com.google.cloud.storage.BlobInfo$Builder setContexts(com.google.cloud.storage.BlobInfo$ObjectContexts)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobInfo$Builder</className>
    <method>com.google.cloud.storage.BlobInfo$Builder setRetention(com.google.cloud.storage.BlobInfo$Retention)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setSoftDeletePolicy(com.google.cloud.storage.BucketInfo$SoftDeletePolicy)</method>
  </difference>

  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.cloud.storage.Blob restore(com.google.cloud.storage.BlobId, com.google.cloud.storage.Storage$BlobRestoreOption[])</method>
  </difference>

  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/spi/v1/StorageRpc</className>
    <method>com.google.api.services.storage.model.StorageObject restore(com.google.api.services.storage.model.StorageObject, java.util.Map)</method>
  </difference>

  <!-- @BetaApi members -->
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig$PartCleanupStrategy</className>
    <method>boolean isDeleteAllOnError()</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig$PartCleanupStrategy</className>
    <method>boolean isDeletePartsOnSuccess()</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig$PartNamingStrategy</className>
    <method>java.lang.String fmtFields(*)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/transfermanager/TransferManagerConfig</className>
    <method>boolean isAllowDivideAndConquer()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/transfermanager/TransferManagerConfig$Builder</className>
    <method>* setAllowDivideAndConquer(boolean)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/StorageOptions$Builder</className>
    <method>com.google.cloud.storage.StorageOptions$Builder setBlobWriteSessionConfig(com.google.cloud.storage.BlobWriteSessionConfig)</method>
  </difference>

  <!-- somehow clirr things a public class in a package-private class is part of the public api -->
  <difference>
    <differenceType>8001</differenceType>
    <className>com/google/cloud/storage/WriteFlushStrategy$DefaultBidiFlusher</className>
  </difference>

  <!-- BlobWriteSessionConfig is package-private extendable only, allow hashCode/equals -->
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobWriteSessionConfig</className>
    <method>int hashCode()</method>
  </difference>
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobWriteSessionConfig</className>
    <method>boolean equals(java.lang.Object)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/StorageOptions$Builder</className>
    <method>com.google.cloud.storage.StorageOptions$Builder setOpenTelemetry(io.opentelemetry.api.OpenTelemetry)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/StorageOptions</className>
    <method>io.opentelemetry.api.OpenTelemetry getOpenTelemetry()</method>
  </difference>

  <!-- Move Object -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>* moveBlob(*)</method>
  </difference>
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/spi/v1/StorageRpc</className>
    <method>* moveObject(*)</method>
  </difference>

  <!-- Not breaking, new method has a default implementation -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.api.core.ApiFuture blobReadSession(com.google.cloud.storage.BlobId, com.google.cloud.storage.Storage$BlobSourceOption[])</method>
  </difference>

  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.cloud.storage.BlobAppendableUpload blobAppendableUpload(com.google.cloud.storage.BlobInfo, com.google.cloud.storage.BlobAppendableUploadConfig, com.google.cloud.storage.Storage$BlobWriteOption[])</method>
  </difference>
  <difference>
    <differenceType>7005</differenceType>
    <className>com/google/cloud/storage/Hasher$*</className>
    <method>* validate(*)</method>
    <to>* validate(*)</to>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setIpFilter(com.google.cloud.storage.BucketInfo$IpFilter)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setCustomerManagedEncryptionEnforcementConfig(com.google.cloud.storage.BucketInfo$CustomerManagedEncryptionEnforcementConfig)</method>
  </difference>
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setCustomerSuppliedEncryptionEnforcementConfig(com.google.cloud.storage.BucketInfo$CustomerSuppliedEncryptionEnforcementConfig)</method>
  </difference>
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setGoogleManagedEncryptionEnforcementConfig(com.google.cloud.storage.BucketInfo$GoogleManagedEncryptionEnforcementConfig)</method>
  </difference>

  <!-- make beta api constructors private, they still retain their factory methods. -->
  <difference>
    <differenceType>7004</differenceType>
    <className>com/google/cloud/storage/FlushPolicy$MinFlushSizeFlushPolicy</className>
    <method>FlushPolicy$MinFlushSizeFlushPolicy(int)</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/FlushPolicy$MinFlushSizeFlushPolicy</className>
    <method>FlushPolicy$MinFlushSizeFlushPolicy(int)</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/FlushPolicy$MaxFlushSizeFlushPolicy</className>
    <method>FlushPolicy$MaxFlushSizeFlushPolicy(int)</method>
  </difference>
  <!-- this method is already on the parent interface, and is on an @InternalExtensionOnly interface -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/BlobAppendableUpload$AppendableUploadWriteableByteChannel</className>
    <method>int write(java.nio.ByteBuffer)</method>
  </difference>

  <!-- @InternalExtensionOnly -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/BlobAppendableUpload$AppendableUploadWriteableByteChannel</className>
    <method>void flush()</method>
  </difference>


</differences>
