class com.mongodb.client.internal.Crypt implements java.io.Closeable
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.mongodb.client.internal.Crypt
  super_class: java.lang.Object
{
  private final com.mongodb.crypt.capi.MongoCrypt mongoCrypt;
    descriptor: Lcom/mongodb/crypt/capi/MongoCrypt;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.client.internal.CollectionInfoRetriever collectionInfoRetriever;
    descriptor: Lcom/mongodb/client/internal/CollectionInfoRetriever;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.client.internal.CommandMarker commandMarker;
    descriptor: Lcom/mongodb/client/internal/CommandMarker;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.client.internal.KeyRetriever keyRetriever;
    descriptor: Lcom/mongodb/client/internal/KeyRetriever;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.client.internal.KeyManagementService keyManagementService;
    descriptor: Lcom/mongodb/client/internal/KeyManagementService;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean bypassAutoEncryption;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private static volatile int[] $SWITCH_TABLE$com$mongodb$crypt$capi$MongoCryptContext$State;
    descriptor: [I
    flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC

  void <init>(com.mongodb.crypt.capi.MongoCrypt, com.mongodb.client.internal.KeyRetriever, com.mongodb.client.internal.KeyManagementService);
    descriptor: (Lcom/mongodb/crypt/capi/MongoCrypt;Lcom/mongodb/client/internal/KeyRetriever;Lcom/mongodb/client/internal/KeyManagementService;)V
    flags: (0x0000) 
    Code:
      stack=7, locals=4, args_size=4
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoCrypt mongoCrypt
        start local 2 // com.mongodb.client.internal.KeyRetriever keyRetriever
        start local 3 // com.mongodb.client.internal.KeyManagementService keyManagementService
         0: .line 61
            aload 0 /* this */
            aload 1 /* mongoCrypt */
            aconst_null
            aconst_null
            aload 2 /* keyRetriever */
            aload 3 /* keyManagementService */
            iconst_0
            invokespecial com.mongodb.client.internal.Crypt.<init>:(Lcom/mongodb/crypt/capi/MongoCrypt;Lcom/mongodb/client/internal/CollectionInfoRetriever;Lcom/mongodb/client/internal/CommandMarker;Lcom/mongodb/client/internal/KeyRetriever;Lcom/mongodb/client/internal/KeyManagementService;Z)V
         1: .line 62
            return
        end local 3 // com.mongodb.client.internal.KeyManagementService keyManagementService
        end local 2 // com.mongodb.client.internal.KeyRetriever keyRetriever
        end local 1 // com.mongodb.crypt.capi.MongoCrypt mongoCrypt
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0    2     0                  this  Lcom/mongodb/client/internal/Crypt;
            0    2     1            mongoCrypt  Lcom/mongodb/crypt/capi/MongoCrypt;
            0    2     2          keyRetriever  Lcom/mongodb/client/internal/KeyRetriever;
            0    2     3  keyManagementService  Lcom/mongodb/client/internal/KeyManagementService;
    MethodParameters:
                      Name  Flags
      mongoCrypt            final
      keyRetriever          final
      keyManagementService  final

  void <init>(com.mongodb.crypt.capi.MongoCrypt, com.mongodb.client.internal.CollectionInfoRetriever, com.mongodb.client.internal.CommandMarker, com.mongodb.client.internal.KeyRetriever, com.mongodb.client.internal.KeyManagementService, boolean);
    descriptor: (Lcom/mongodb/crypt/capi/MongoCrypt;Lcom/mongodb/client/internal/CollectionInfoRetriever;Lcom/mongodb/client/internal/CommandMarker;Lcom/mongodb/client/internal/KeyRetriever;Lcom/mongodb/client/internal/KeyManagementService;Z)V
    flags: (0x0000) 
    Code:
      stack=2, locals=7, args_size=7
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoCrypt mongoCrypt
        start local 2 // com.mongodb.client.internal.CollectionInfoRetriever collectionInfoRetriever
        start local 3 // com.mongodb.client.internal.CommandMarker commandMarker
        start local 4 // com.mongodb.client.internal.KeyRetriever keyRetriever
        start local 5 // com.mongodb.client.internal.KeyManagementService keyManagementService
        start local 6 // boolean bypassAutoEncryption
         0: .line 73
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 76
            aload 0 /* this */
            aload 1 /* mongoCrypt */
            putfield com.mongodb.client.internal.Crypt.mongoCrypt:Lcom/mongodb/crypt/capi/MongoCrypt;
         2: .line 77
            aload 0 /* this */
            aload 2 /* collectionInfoRetriever */
            putfield com.mongodb.client.internal.Crypt.collectionInfoRetriever:Lcom/mongodb/client/internal/CollectionInfoRetriever;
         3: .line 78
            aload 0 /* this */
            aload 3 /* commandMarker */
            putfield com.mongodb.client.internal.Crypt.commandMarker:Lcom/mongodb/client/internal/CommandMarker;
         4: .line 79
            aload 0 /* this */
            aload 4 /* keyRetriever */
            putfield com.mongodb.client.internal.Crypt.keyRetriever:Lcom/mongodb/client/internal/KeyRetriever;
         5: .line 80
            aload 0 /* this */
            aload 5 /* keyManagementService */
            putfield com.mongodb.client.internal.Crypt.keyManagementService:Lcom/mongodb/client/internal/KeyManagementService;
         6: .line 81
            aload 0 /* this */
            iload 6 /* bypassAutoEncryption */
            putfield com.mongodb.client.internal.Crypt.bypassAutoEncryption:Z
         7: .line 82
            return
        end local 6 // boolean bypassAutoEncryption
        end local 5 // com.mongodb.client.internal.KeyManagementService keyManagementService
        end local 4 // com.mongodb.client.internal.KeyRetriever keyRetriever
        end local 3 // com.mongodb.client.internal.CommandMarker commandMarker
        end local 2 // com.mongodb.client.internal.CollectionInfoRetriever collectionInfoRetriever
        end local 1 // com.mongodb.crypt.capi.MongoCrypt mongoCrypt
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0    8     0                     this  Lcom/mongodb/client/internal/Crypt;
            0    8     1               mongoCrypt  Lcom/mongodb/crypt/capi/MongoCrypt;
            0    8     2  collectionInfoRetriever  Lcom/mongodb/client/internal/CollectionInfoRetriever;
            0    8     3            commandMarker  Lcom/mongodb/client/internal/CommandMarker;
            0    8     4             keyRetriever  Lcom/mongodb/client/internal/KeyRetriever;
            0    8     5     keyManagementService  Lcom/mongodb/client/internal/KeyManagementService;
            0    8     6     bypassAutoEncryption  Z
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        com.mongodb.lang.Nullable()
      2:
        com.mongodb.lang.Nullable()
      3:
      4:
      5:
    MethodParameters:
                         Name  Flags
      mongoCrypt               final
      collectionInfoRetriever  final
      commandMarker            final
      keyRetriever             final
      keyManagementService     final
      bypassAutoEncryption     final

  public org.bson.RawBsonDocument encrypt(java.lang.String, org.bson.RawBsonDocument);
    descriptor: (Ljava/lang/String;Lorg/bson/RawBsonDocument;)Lorg/bson/RawBsonDocument;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // java.lang.String databaseName
        start local 2 // org.bson.RawBsonDocument command
         0: .line 92
            ldc "databaseName"
            aload 1 /* databaseName */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 93
            ldc "command"
            aload 2 /* command */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 95
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.bypassAutoEncryption:Z
            ifeq 4
         3: .line 96
            aload 2 /* command */
            areturn
         4: .line 100
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.mongoCrypt:Lcom/mongodb/crypt/capi/MongoCrypt;
            aload 1 /* databaseName */
            aload 2 /* command */
            invokeinterface com.mongodb.crypt.capi.MongoCrypt.createEncryptionContext:(Ljava/lang/String;Lorg/bson/BsonDocument;)Lcom/mongodb/crypt/capi/MongoCryptContext;
            astore 3 /* encryptionContext */
        start local 3 // com.mongodb.crypt.capi.MongoCryptContext encryptionContext
         5: .line 103
            aload 0 /* this */
            aload 3 /* encryptionContext */
            aload 1 /* databaseName */
            invokevirtual com.mongodb.client.internal.Crypt.executeStateMachine:(Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)Lorg/bson/RawBsonDocument;
            astore 5
         6: .line 105
            aload 3 /* encryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
         7: .line 103
            aload 5
            areturn
         8: .line 104
      StackMap locals: com.mongodb.client.internal.Crypt java.lang.String org.bson.RawBsonDocument com.mongodb.crypt.capi.MongoCryptContext
      StackMap stack: java.lang.Throwable
            astore 4
         9: .line 105
            aload 3 /* encryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
        10: .line 106
            aload 4
            athrow
        end local 3 // com.mongodb.crypt.capi.MongoCryptContext encryptionContext
        11: .line 107
      StackMap locals: com.mongodb.client.internal.Crypt java.lang.String org.bson.RawBsonDocument
      StackMap stack: com.mongodb.crypt.capi.MongoCryptException
            astore 3 /* e */
        start local 3 // com.mongodb.crypt.capi.MongoCryptException e
        12: .line 108
            aload 0 /* this */
            aload 3 /* e */
            invokevirtual com.mongodb.client.internal.Crypt.wrapInClientException:(Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
            athrow
        end local 3 // com.mongodb.crypt.capi.MongoCryptException e
        end local 2 // org.bson.RawBsonDocument command
        end local 1 // java.lang.String databaseName
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   13     0               this  Lcom/mongodb/client/internal/Crypt;
            0   13     1       databaseName  Ljava/lang/String;
            0   13     2            command  Lorg/bson/RawBsonDocument;
            5   11     3  encryptionContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
           12   13     3                  e  Lcom/mongodb/crypt/capi/MongoCryptException;
      Exception table:
        from    to  target  type
           5     6       8  any
           4     7      11  Class com.mongodb.crypt.capi.MongoCryptException
           8    11      11  Class com.mongodb.crypt.capi.MongoCryptException
    MethodParameters:
              Name  Flags
      databaseName  final
      command       final

  org.bson.RawBsonDocument decrypt(org.bson.RawBsonDocument);
    descriptor: (Lorg/bson/RawBsonDocument;)Lorg/bson/RawBsonDocument;
    flags: (0x0000) 
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // org.bson.RawBsonDocument commandResponse
         0: .line 119
            ldc "commandResponse"
            aload 1 /* commandResponse */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 122
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.mongoCrypt:Lcom/mongodb/crypt/capi/MongoCrypt;
            aload 1 /* commandResponse */
            invokeinterface com.mongodb.crypt.capi.MongoCrypt.createDecryptionContext:(Lorg/bson/BsonDocument;)Lcom/mongodb/crypt/capi/MongoCryptContext;
            astore 2 /* decryptionContext */
        start local 2 // com.mongodb.crypt.capi.MongoCryptContext decryptionContext
         2: .line 125
            aload 0 /* this */
            aload 2 /* decryptionContext */
            aconst_null
            invokevirtual com.mongodb.client.internal.Crypt.executeStateMachine:(Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)Lorg/bson/RawBsonDocument;
            astore 4
         3: .line 127
            aload 2 /* decryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
         4: .line 125
            aload 4
            areturn
         5: .line 126
      StackMap locals: com.mongodb.client.internal.Crypt org.bson.RawBsonDocument com.mongodb.crypt.capi.MongoCryptContext
      StackMap stack: java.lang.Throwable
            astore 3
         6: .line 127
            aload 2 /* decryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
         7: .line 128
            aload 3
            athrow
        end local 2 // com.mongodb.crypt.capi.MongoCryptContext decryptionContext
         8: .line 129
      StackMap locals: com.mongodb.client.internal.Crypt org.bson.RawBsonDocument
      StackMap stack: com.mongodb.crypt.capi.MongoCryptException
            astore 2 /* e */
        start local 2 // com.mongodb.crypt.capi.MongoCryptException e
         9: .line 130
            aload 0 /* this */
            aload 2 /* e */
            invokevirtual com.mongodb.client.internal.Crypt.wrapInClientException:(Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
            athrow
        end local 2 // com.mongodb.crypt.capi.MongoCryptException e
        end local 1 // org.bson.RawBsonDocument commandResponse
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   10     0               this  Lcom/mongodb/client/internal/Crypt;
            0   10     1    commandResponse  Lorg/bson/RawBsonDocument;
            2    8     2  decryptionContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
            9   10     2                  e  Lcom/mongodb/crypt/capi/MongoCryptException;
      Exception table:
        from    to  target  type
           2     3       5  any
           1     4       8  Class com.mongodb.crypt.capi.MongoCryptException
           5     8       8  Class com.mongodb.crypt.capi.MongoCryptException
    MethodParameters:
                 Name  Flags
      commandResponse  final

  org.bson.BsonDocument createDataKey(java.lang.String, com.mongodb.client.model.vault.DataKeyOptions);
    descriptor: (Ljava/lang/String;Lcom/mongodb/client/model/vault/DataKeyOptions;)Lorg/bson/BsonDocument;
    flags: (0x0000) 
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // java.lang.String kmsProvider
        start local 2 // com.mongodb.client.model.vault.DataKeyOptions options
         0: .line 142
            ldc "kmsProvider"
            aload 1 /* kmsProvider */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 143
            ldc "options"
            aload 2 /* options */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 146
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.mongoCrypt:Lcom/mongodb/crypt/capi/MongoCrypt;
            aload 1 /* kmsProvider */
         3: .line 147
            invokestatic com.mongodb.crypt.capi.MongoDataKeyOptions.builder:()Lcom/mongodb/crypt/capi/MongoDataKeyOptions$Builder;
         4: .line 148
            aload 2 /* options */
            invokevirtual com.mongodb.client.model.vault.DataKeyOptions.getKeyAltNames:()Ljava/util/List;
            invokevirtual com.mongodb.crypt.capi.MongoDataKeyOptions$Builder.keyAltNames:(Ljava/util/List;)Lcom/mongodb/crypt/capi/MongoDataKeyOptions$Builder;
         5: .line 149
            aload 2 /* options */
            invokevirtual com.mongodb.client.model.vault.DataKeyOptions.getMasterKey:()Lorg/bson/BsonDocument;
            invokevirtual com.mongodb.crypt.capi.MongoDataKeyOptions$Builder.masterKey:(Lorg/bson/BsonDocument;)Lcom/mongodb/crypt/capi/MongoDataKeyOptions$Builder;
         6: .line 150
            invokevirtual com.mongodb.crypt.capi.MongoDataKeyOptions$Builder.build:()Lcom/mongodb/crypt/capi/MongoDataKeyOptions;
         7: .line 146
            invokeinterface com.mongodb.crypt.capi.MongoCrypt.createDataKeyContext:(Ljava/lang/String;Lcom/mongodb/crypt/capi/MongoDataKeyOptions;)Lcom/mongodb/crypt/capi/MongoCryptContext;
            astore 3 /* dataKeyCreationContext */
        start local 3 // com.mongodb.crypt.capi.MongoCryptContext dataKeyCreationContext
         8: .line 153
            aload 0 /* this */
            aload 3 /* dataKeyCreationContext */
            aconst_null
            invokevirtual com.mongodb.client.internal.Crypt.executeStateMachine:(Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)Lorg/bson/RawBsonDocument;
            astore 5
         9: .line 155
            aload 3 /* dataKeyCreationContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
        10: .line 153
            aload 5
            areturn
        11: .line 154
      StackMap locals: com.mongodb.client.internal.Crypt java.lang.String com.mongodb.client.model.vault.DataKeyOptions com.mongodb.crypt.capi.MongoCryptContext
      StackMap stack: java.lang.Throwable
            astore 4
        12: .line 155
            aload 3 /* dataKeyCreationContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
        13: .line 156
            aload 4
            athrow
        end local 3 // com.mongodb.crypt.capi.MongoCryptContext dataKeyCreationContext
        14: .line 157
      StackMap locals: com.mongodb.client.internal.Crypt java.lang.String com.mongodb.client.model.vault.DataKeyOptions
      StackMap stack: com.mongodb.crypt.capi.MongoCryptException
            astore 3 /* e */
        start local 3 // com.mongodb.crypt.capi.MongoCryptException e
        15: .line 158
            aload 0 /* this */
            aload 3 /* e */
            invokevirtual com.mongodb.client.internal.Crypt.wrapInClientException:(Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
            athrow
        end local 3 // com.mongodb.crypt.capi.MongoCryptException e
        end local 2 // com.mongodb.client.model.vault.DataKeyOptions options
        end local 1 // java.lang.String kmsProvider
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   16     0                    this  Lcom/mongodb/client/internal/Crypt;
            0   16     1             kmsProvider  Ljava/lang/String;
            0   16     2                 options  Lcom/mongodb/client/model/vault/DataKeyOptions;
            8   14     3  dataKeyCreationContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
           15   16     3                       e  Lcom/mongodb/crypt/capi/MongoCryptException;
      Exception table:
        from    to  target  type
           8     9      11  any
           2    10      14  Class com.mongodb.crypt.capi.MongoCryptException
          11    14      14  Class com.mongodb.crypt.capi.MongoCryptException
    MethodParameters:
             Name  Flags
      kmsProvider  final
      options      final

  org.bson.BsonBinary encryptExplicitly(org.bson.BsonValue, com.mongodb.client.model.vault.EncryptOptions);
    descriptor: (Lorg/bson/BsonValue;Lcom/mongodb/client/model/vault/EncryptOptions;)Lorg/bson/BsonBinary;
    flags: (0x0000) 
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // org.bson.BsonValue value
        start local 2 // com.mongodb.client.model.vault.EncryptOptions options
         0: .line 170
            ldc "value"
            aload 1 /* value */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 171
            ldc "options"
            aload 2 /* options */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 174
            invokestatic com.mongodb.crypt.capi.MongoExplicitEncryptOptions.builder:()Lcom/mongodb/crypt/capi/MongoExplicitEncryptOptions$Builder;
         3: .line 175
            aload 2 /* options */
            invokevirtual com.mongodb.client.model.vault.EncryptOptions.getAlgorithm:()Ljava/lang/String;
            invokevirtual com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder.algorithm:(Ljava/lang/String;)Lcom/mongodb/crypt/capi/MongoExplicitEncryptOptions$Builder;
         4: .line 174
            astore 3 /* encryptOptionsBuilder */
        start local 3 // com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder encryptOptionsBuilder
         5: .line 177
            aload 2 /* options */
            invokevirtual com.mongodb.client.model.vault.EncryptOptions.getKeyId:()Lorg/bson/BsonBinary;
            ifnull 7
         6: .line 178
            aload 3 /* encryptOptionsBuilder */
            aload 2 /* options */
            invokevirtual com.mongodb.client.model.vault.EncryptOptions.getKeyId:()Lorg/bson/BsonBinary;
            invokevirtual com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder.keyId:(Lorg/bson/BsonBinary;)Lcom/mongodb/crypt/capi/MongoExplicitEncryptOptions$Builder;
            pop
         7: .line 181
      StackMap locals: com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder
      StackMap stack:
            aload 2 /* options */
            invokevirtual com.mongodb.client.model.vault.EncryptOptions.getKeyAltName:()Ljava/lang/String;
            ifnull 9
         8: .line 182
            aload 3 /* encryptOptionsBuilder */
            aload 2 /* options */
            invokevirtual com.mongodb.client.model.vault.EncryptOptions.getKeyAltName:()Ljava/lang/String;
            invokevirtual com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder.keyAltName:(Ljava/lang/String;)Lcom/mongodb/crypt/capi/MongoExplicitEncryptOptions$Builder;
            pop
         9: .line 185
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.mongoCrypt:Lcom/mongodb/crypt/capi/MongoCrypt;
        10: .line 186
            new org.bson.BsonDocument
            dup
            ldc "v"
            aload 1 /* value */
            invokespecial org.bson.BsonDocument.<init>:(Ljava/lang/String;Lorg/bson/BsonValue;)V
            aload 3 /* encryptOptionsBuilder */
            invokevirtual com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder.build:()Lcom/mongodb/crypt/capi/MongoExplicitEncryptOptions;
        11: .line 185
            invokeinterface com.mongodb.crypt.capi.MongoCrypt.createExplicitEncryptionContext:(Lorg/bson/BsonDocument;Lcom/mongodb/crypt/capi/MongoExplicitEncryptOptions;)Lcom/mongodb/crypt/capi/MongoCryptContext;
            astore 4 /* encryptionContext */
        start local 4 // com.mongodb.crypt.capi.MongoCryptContext encryptionContext
        12: .line 188
            aload 0 /* this */
            aload 4 /* encryptionContext */
            aconst_null
            invokevirtual com.mongodb.client.internal.Crypt.executeStateMachine:(Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)Lorg/bson/RawBsonDocument;
            ldc "v"
            invokevirtual org.bson.RawBsonDocument.getBinary:(Ljava/lang/Object;)Lorg/bson/BsonBinary;
            astore 6
        13: .line 190
            aload 4 /* encryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
        14: .line 188
            aload 6
            areturn
        15: .line 189
      StackMap locals: com.mongodb.client.internal.Crypt org.bson.BsonValue com.mongodb.client.model.vault.EncryptOptions com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder com.mongodb.crypt.capi.MongoCryptContext
      StackMap stack: java.lang.Throwable
            astore 5
        16: .line 190
            aload 4 /* encryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
        17: .line 191
            aload 5
            athrow
        end local 4 // com.mongodb.crypt.capi.MongoCryptContext encryptionContext
        end local 3 // com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder encryptOptionsBuilder
        18: .line 192
      StackMap locals: com.mongodb.client.internal.Crypt org.bson.BsonValue com.mongodb.client.model.vault.EncryptOptions
      StackMap stack: com.mongodb.crypt.capi.MongoCryptException
            astore 3 /* e */
        start local 3 // com.mongodb.crypt.capi.MongoCryptException e
        19: .line 193
            aload 0 /* this */
            aload 3 /* e */
            invokevirtual com.mongodb.client.internal.Crypt.wrapInClientException:(Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
            athrow
        end local 3 // com.mongodb.crypt.capi.MongoCryptException e
        end local 2 // com.mongodb.client.model.vault.EncryptOptions options
        end local 1 // org.bson.BsonValue value
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   20     0                   this  Lcom/mongodb/client/internal/Crypt;
            0   20     1                  value  Lorg/bson/BsonValue;
            0   20     2                options  Lcom/mongodb/client/model/vault/EncryptOptions;
            5   18     3  encryptOptionsBuilder  Lcom/mongodb/crypt/capi/MongoExplicitEncryptOptions$Builder;
           12   18     4      encryptionContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
           19   20     3                      e  Lcom/mongodb/crypt/capi/MongoCryptException;
      Exception table:
        from    to  target  type
          12    13      15  any
           2    14      18  Class com.mongodb.crypt.capi.MongoCryptException
          15    18      18  Class com.mongodb.crypt.capi.MongoCryptException
    MethodParameters:
         Name  Flags
      value    final
      options  final

  org.bson.BsonValue decryptExplicitly(org.bson.BsonBinary);
    descriptor: (Lorg/bson/BsonBinary;)Lorg/bson/BsonValue;
    flags: (0x0000) 
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // org.bson.BsonBinary value
         0: .line 204
            ldc "value"
            aload 1 /* value */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 207
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.mongoCrypt:Lcom/mongodb/crypt/capi/MongoCrypt;
            new org.bson.BsonDocument
            dup
            ldc "v"
            aload 1 /* value */
            invokespecial org.bson.BsonDocument.<init>:(Ljava/lang/String;Lorg/bson/BsonValue;)V
            invokeinterface com.mongodb.crypt.capi.MongoCrypt.createExplicitDecryptionContext:(Lorg/bson/BsonDocument;)Lcom/mongodb/crypt/capi/MongoCryptContext;
            astore 2 /* decryptionContext */
        start local 2 // com.mongodb.crypt.capi.MongoCryptContext decryptionContext
         2: .line 210
            aload 0 /* this */
            aload 2 /* decryptionContext */
            aconst_null
            invokevirtual com.mongodb.client.internal.Crypt.executeStateMachine:(Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)Lorg/bson/RawBsonDocument;
            ldc "v"
            invokevirtual org.bson.RawBsonDocument.get:(Ljava/lang/Object;)Lorg/bson/BsonValue;
            astore 4
         3: .line 212
            aload 2 /* decryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
         4: .line 210
            aload 4
            areturn
         5: .line 211
      StackMap locals: com.mongodb.client.internal.Crypt org.bson.BsonBinary com.mongodb.crypt.capi.MongoCryptContext
      StackMap stack: java.lang.Throwable
            astore 3
         6: .line 212
            aload 2 /* decryptionContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.close:()V
         7: .line 213
            aload 3
            athrow
        end local 2 // com.mongodb.crypt.capi.MongoCryptContext decryptionContext
         8: .line 214
      StackMap locals: com.mongodb.client.internal.Crypt org.bson.BsonBinary
      StackMap stack: com.mongodb.crypt.capi.MongoCryptException
            astore 2 /* e */
        start local 2 // com.mongodb.crypt.capi.MongoCryptException e
         9: .line 215
            aload 0 /* this */
            aload 2 /* e */
            invokevirtual com.mongodb.client.internal.Crypt.wrapInClientException:(Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
            athrow
        end local 2 // com.mongodb.crypt.capi.MongoCryptException e
        end local 1 // org.bson.BsonBinary value
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   10     0               this  Lcom/mongodb/client/internal/Crypt;
            0   10     1              value  Lorg/bson/BsonBinary;
            2    8     2  decryptionContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
            9   10     2                  e  Lcom/mongodb/crypt/capi/MongoCryptException;
      Exception table:
        from    to  target  type
           2     3       5  any
           1     4       8  Class com.mongodb.crypt.capi.MongoCryptException
           5     8       8  Class com.mongodb.crypt.capi.MongoCryptException
    MethodParameters:
       Name  Flags
      value  final

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.client.internal.Crypt this
         0: .line 221
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.mongoCrypt:Lcom/mongodb/crypt/capi/MongoCrypt;
            invokeinterface com.mongodb.crypt.capi.MongoCrypt.close:()V
         1: .line 222
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.commandMarker:Lcom/mongodb/client/internal/CommandMarker;
            ifnull 3
         2: .line 223
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.commandMarker:Lcom/mongodb/client/internal/CommandMarker;
            invokevirtual com.mongodb.client.internal.CommandMarker.close:()V
         3: .line 225
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.keyRetriever:Lcom/mongodb/client/internal/KeyRetriever;
            invokevirtual com.mongodb.client.internal.KeyRetriever.close:()V
         4: .line 226
            return
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/mongodb/client/internal/Crypt;

  private org.bson.RawBsonDocument executeStateMachine(com.mongodb.crypt.capi.MongoCryptContext, java.lang.String);
    descriptor: (Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)Lorg/bson/RawBsonDocument;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
        start local 2 // java.lang.String databaseName
         0: .line 230
      StackMap locals:
      StackMap stack:
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.getState:()Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            astore 3 /* state */
        start local 3 // com.mongodb.crypt.capi.MongoCryptContext$State state
         1: .line 231
            invokestatic com.mongodb.client.internal.Crypt.$SWITCH_TABLE$com$mongodb$crypt$capi$MongoCryptContext$State:()[I
            aload 3 /* state */
            invokevirtual com.mongodb.crypt.capi.MongoCryptContext$State.ordinal:()I
            iaload
            tableswitch { // 1 - 5
                    1: 2
                    2: 4
                    3: 6
                    4: 8
                    5: 10
              default: 11
          }
         2: .line 233
      StackMap locals: com.mongodb.crypt.capi.MongoCryptContext$State
      StackMap stack:
            aload 0 /* this */
            aload 1 /* cryptContext */
            aload 2 /* databaseName */
            invokevirtual com.mongodb.client.internal.Crypt.collInfo:(Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)V
         3: .line 234
            goto 0
         4: .line 236
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* cryptContext */
            aload 2 /* databaseName */
            invokevirtual com.mongodb.client.internal.Crypt.mark:(Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)V
         5: .line 237
            goto 0
         6: .line 239
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* cryptContext */
            invokevirtual com.mongodb.client.internal.Crypt.fetchKeys:(Lcom/mongodb/crypt/capi/MongoCryptContext;)V
         7: .line 240
            goto 0
         8: .line 242
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* cryptContext */
            invokevirtual com.mongodb.client.internal.Crypt.decryptKeys:(Lcom/mongodb/crypt/capi/MongoCryptContext;)V
         9: .line 243
            goto 0
        10: .line 245
      StackMap locals:
      StackMap stack:
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.finish:()Lorg/bson/RawBsonDocument;
            areturn
        11: .line 247
      StackMap locals:
      StackMap stack:
            new com.mongodb.MongoInternalException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unsupported encryptor state + "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* state */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial com.mongodb.MongoInternalException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // com.mongodb.crypt.capi.MongoCryptContext$State state
        end local 2 // java.lang.String databaseName
        end local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   12     0          this  Lcom/mongodb/client/internal/Crypt;
            0   12     1  cryptContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
            0   12     2  databaseName  Ljava/lang/String;
            1   12     3         state  Lcom/mongodb/crypt/capi/MongoCryptContext$State;
    MethodParameters:
              Name  Flags
      cryptContext  final
      databaseName  final

  private void collInfo(com.mongodb.crypt.capi.MongoCryptContext, java.lang.String);
    descriptor: (Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
        start local 2 // java.lang.String databaseName
         0: .line 254
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.collectionInfoRetriever:Lcom/mongodb/client/internal/CollectionInfoRetriever;
            aload 2 /* databaseName */
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.getMongoOperation:()Lorg/bson/RawBsonDocument;
            invokevirtual com.mongodb.client.internal.CollectionInfoRetriever.filter:(Ljava/lang/String;Lorg/bson/BsonDocument;)Lorg/bson/BsonDocument;
            astore 3 /* collectionInfo */
        start local 3 // org.bson.BsonDocument collectionInfo
         1: .line 255
            aload 3 /* collectionInfo */
            ifnull 3
         2: .line 256
            aload 1 /* cryptContext */
            aload 3 /* collectionInfo */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.addMongoOperationResult:(Lorg/bson/BsonDocument;)V
         3: .line 258
      StackMap locals: org.bson.BsonDocument
      StackMap stack:
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.completeMongoOperation:()V
        end local 3 // org.bson.BsonDocument collectionInfo
         4: .line 259
            goto 7
      StackMap locals: com.mongodb.client.internal.Crypt com.mongodb.crypt.capi.MongoCryptContext java.lang.String
      StackMap stack: java.lang.Throwable
         5: astore 3 /* t */
        start local 3 // java.lang.Throwable t
         6: .line 260
            aload 3 /* t */
            invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
            athrow
        end local 3 // java.lang.Throwable t
         7: .line 262
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.String databaseName
        end local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    8     0            this  Lcom/mongodb/client/internal/Crypt;
            0    8     1    cryptContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
            0    8     2    databaseName  Ljava/lang/String;
            1    4     3  collectionInfo  Lorg/bson/BsonDocument;
            6    7     3               t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     4       5  Class java.lang.Throwable
    MethodParameters:
              Name  Flags
      cryptContext  final
      databaseName  final

  private void mark(com.mongodb.crypt.capi.MongoCryptContext, java.lang.String);
    descriptor: (Lcom/mongodb/crypt/capi/MongoCryptContext;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
        start local 2 // java.lang.String databaseName
         0: .line 266
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.commandMarker:Lcom/mongodb/client/internal/CommandMarker;
            aload 2 /* databaseName */
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.getMongoOperation:()Lorg/bson/RawBsonDocument;
            invokevirtual com.mongodb.client.internal.CommandMarker.mark:(Ljava/lang/String;Lorg/bson/RawBsonDocument;)Lorg/bson/RawBsonDocument;
            astore 3 /* markedCommand */
        start local 3 // org.bson.RawBsonDocument markedCommand
         1: .line 267
            aload 1 /* cryptContext */
            aload 3 /* markedCommand */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.addMongoOperationResult:(Lorg/bson/BsonDocument;)V
         2: .line 268
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.completeMongoOperation:()V
        end local 3 // org.bson.RawBsonDocument markedCommand
         3: .line 269
            goto 6
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 3 /* t */
        start local 3 // java.lang.Throwable t
         5: .line 270
            aload 0 /* this */
            aload 3 /* t */
            invokevirtual com.mongodb.client.internal.Crypt.wrapInClientException:(Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
            athrow
        end local 3 // java.lang.Throwable t
         6: .line 272
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.String databaseName
        end local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lcom/mongodb/client/internal/Crypt;
            0    7     1   cryptContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
            0    7     2   databaseName  Ljava/lang/String;
            1    3     3  markedCommand  Lorg/bson/RawBsonDocument;
            5    6     3              t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     3       4  Class java.lang.Throwable
    MethodParameters:
              Name  Flags
      cryptContext  final
      databaseName  final

  private void fetchKeys(com.mongodb.crypt.capi.MongoCryptContext);
    descriptor: (Lcom/mongodb/crypt/capi/MongoCryptContext;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoCryptContext keyBroker
         0: .line 276
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.keyRetriever:Lcom/mongodb/client/internal/KeyRetriever;
            aload 1 /* keyBroker */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.getMongoOperation:()Lorg/bson/RawBsonDocument;
            invokevirtual com.mongodb.client.internal.KeyRetriever.find:(Lorg/bson/BsonDocument;)Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 3
      StackMap locals: com.mongodb.client.internal.Crypt com.mongodb.crypt.capi.MongoCryptContext top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.BsonDocument
            astore 2 /* bsonDocument */
        start local 2 // org.bson.BsonDocument bsonDocument
         2: .line 277
            aload 1 /* keyBroker */
            aload 2 /* bsonDocument */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.addMongoOperationResult:(Lorg/bson/BsonDocument;)V
        end local 2 // org.bson.BsonDocument bsonDocument
         3: .line 276
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 279
            aload 1 /* keyBroker */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.completeMongoOperation:()V
         5: .line 280
            goto 8
      StackMap locals: com.mongodb.client.internal.Crypt com.mongodb.crypt.capi.MongoCryptContext
      StackMap stack: java.lang.Throwable
         6: astore 2 /* t */
        start local 2 // java.lang.Throwable t
         7: .line 281
            aload 2 /* t */
            invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
            athrow
        end local 2 // java.lang.Throwable t
         8: .line 283
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.mongodb.crypt.capi.MongoCryptContext keyBroker
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    9     0          this  Lcom/mongodb/client/internal/Crypt;
            0    9     1     keyBroker  Lcom/mongodb/crypt/capi/MongoCryptContext;
            2    3     2  bsonDocument  Lorg/bson/BsonDocument;
            7    8     2             t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     5       6  Class java.lang.Throwable
    MethodParameters:
           Name  Flags
      keyBroker  final

  private void decryptKeys(com.mongodb.crypt.capi.MongoCryptContext);
    descriptor: (Lcom/mongodb/crypt/capi/MongoCryptContext;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
         0: .line 287
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.nextKeyDecryptor:()Lcom/mongodb/crypt/capi/MongoKeyDecryptor;
            astore 2 /* keyDecryptor */
        start local 2 // com.mongodb.crypt.capi.MongoKeyDecryptor keyDecryptor
         1: .line 288
            goto 4
         2: .line 289
      StackMap locals: com.mongodb.crypt.capi.MongoKeyDecryptor
      StackMap stack:
            aload 0 /* this */
            aload 2 /* keyDecryptor */
            invokevirtual com.mongodb.client.internal.Crypt.decryptKey:(Lcom/mongodb/crypt/capi/MongoKeyDecryptor;)V
         3: .line 290
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.nextKeyDecryptor:()Lcom/mongodb/crypt/capi/MongoKeyDecryptor;
            astore 2 /* keyDecryptor */
         4: .line 288
      StackMap locals:
      StackMap stack:
            aload 2 /* keyDecryptor */
            ifnonnull 2
         5: .line 292
            aload 1 /* cryptContext */
            invokeinterface com.mongodb.crypt.capi.MongoCryptContext.completeKeyDecryptors:()V
        end local 2 // com.mongodb.crypt.capi.MongoKeyDecryptor keyDecryptor
         6: .line 293
            goto 9
      StackMap locals: com.mongodb.client.internal.Crypt com.mongodb.crypt.capi.MongoCryptContext
      StackMap stack: java.lang.Throwable
         7: astore 2 /* t */
        start local 2 // java.lang.Throwable t
         8: .line 294
            aload 0 /* this */
            aload 2 /* t */
            invokevirtual com.mongodb.client.internal.Crypt.wrapInClientException:(Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
            athrow
        end local 2 // java.lang.Throwable t
         9: .line 296
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.mongodb.crypt.capi.MongoCryptContext cryptContext
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0          this  Lcom/mongodb/client/internal/Crypt;
            0   10     1  cryptContext  Lcom/mongodb/crypt/capi/MongoCryptContext;
            1    6     2  keyDecryptor  Lcom/mongodb/crypt/capi/MongoKeyDecryptor;
            8    9     2             t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     6       7  Class java.lang.Throwable
    MethodParameters:
              Name  Flags
      cryptContext  final

  private void decryptKey(com.mongodb.crypt.capi.MongoKeyDecryptor);
    descriptor: (Lcom/mongodb/crypt/capi/MongoKeyDecryptor;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // com.mongodb.crypt.capi.MongoKeyDecryptor keyDecryptor
         0: .line 299
            aload 0 /* this */
            getfield com.mongodb.client.internal.Crypt.keyManagementService:Lcom/mongodb/client/internal/KeyManagementService;
            aload 1 /* keyDecryptor */
            invokeinterface com.mongodb.crypt.capi.MongoKeyDecryptor.getHostName:()Ljava/lang/String;
            aload 1 /* keyDecryptor */
            invokeinterface com.mongodb.crypt.capi.MongoKeyDecryptor.getMessage:()Ljava/nio/ByteBuffer;
            invokevirtual com.mongodb.client.internal.KeyManagementService.stream:(Ljava/lang/String;Ljava/nio/ByteBuffer;)Ljava/io/InputStream;
            astore 2 /* inputStream */
        start local 2 // java.io.InputStream inputStream
         1: .line 301
            aload 1 /* keyDecryptor */
            invokeinterface com.mongodb.crypt.capi.MongoKeyDecryptor.bytesNeeded:()I
            istore 3 /* bytesNeeded */
        start local 3 // int bytesNeeded
         2: .line 303
            goto 7
         3: .line 304
      StackMap locals: java.io.InputStream int
      StackMap stack:
            iload 3 /* bytesNeeded */
            newarray 8
            astore 4 /* bytes */
        start local 4 // byte[] bytes
         4: .line 305
            aload 2 /* inputStream */
            aload 4 /* bytes */
            iconst_0
            aload 4 /* bytes */
            arraylength
            invokevirtual java.io.InputStream.read:([BII)I
            istore 5 /* bytesRead */
        start local 5 // int bytesRead
         5: .line 306
            aload 1 /* keyDecryptor */
            aload 4 /* bytes */
            iconst_0
            iload 5 /* bytesRead */
            invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
            invokeinterface com.mongodb.crypt.capi.MongoKeyDecryptor.feed:(Ljava/nio/ByteBuffer;)V
         6: .line 307
            aload 1 /* keyDecryptor */
            invokeinterface com.mongodb.crypt.capi.MongoKeyDecryptor.bytesNeeded:()I
            istore 3 /* bytesNeeded */
        end local 5 // int bytesRead
        end local 4 // byte[] bytes
         7: .line 303
      StackMap locals:
      StackMap stack:
            iload 3 /* bytesNeeded */
            ifgt 3
        end local 3 // int bytesNeeded
         8: .line 309
            goto 14
      StackMap locals: com.mongodb.client.internal.Crypt com.mongodb.crypt.capi.MongoKeyDecryptor java.io.InputStream
      StackMap stack: java.lang.Throwable
         9: astore 6
        10: .line 311
            aload 2 /* inputStream */
            invokevirtual java.io.InputStream.close:()V
        11: .line 312
            goto 13
      StackMap locals: com.mongodb.client.internal.Crypt com.mongodb.crypt.capi.MongoKeyDecryptor java.io.InputStream top top top java.lang.Throwable
      StackMap stack: java.io.IOException
        12: pop
        13: .line 315
      StackMap locals:
      StackMap stack:
            aload 6
            athrow
        14: .line 311
      StackMap locals: com.mongodb.client.internal.Crypt com.mongodb.crypt.capi.MongoKeyDecryptor java.io.InputStream
      StackMap stack:
            aload 2 /* inputStream */
            invokevirtual java.io.InputStream.close:()V
        15: .line 312
            goto 17
      StackMap locals:
      StackMap stack: java.io.IOException
        16: pop
        17: .line 316
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.io.InputStream inputStream
        end local 1 // com.mongodb.crypt.capi.MongoKeyDecryptor keyDecryptor
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   18     0          this  Lcom/mongodb/client/internal/Crypt;
            0   18     1  keyDecryptor  Lcom/mongodb/crypt/capi/MongoKeyDecryptor;
            1   18     2   inputStream  Ljava/io/InputStream;
            2    8     3   bytesNeeded  I
            4    7     4         bytes  [B
            5    7     5     bytesRead  I
      Exception table:
        from    to  target  type
           1     9       9  any
          10    11      12  Class java.io.IOException
          14    15      16  Class java.io.IOException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
              Name  Flags
      keyDecryptor  final

  private com.mongodb.MongoClientException wrapInClientException(java.lang.Throwable);
    descriptor: (Ljava/lang/Throwable;)Lcom/mongodb/MongoClientException;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.mongodb.client.internal.Crypt this
        start local 1 // java.lang.Throwable t
         0: .line 319
            new com.mongodb.MongoClientException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Exception in encryption library: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* t */
            invokevirtual java.lang.Throwable.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 1 /* t */
            invokespecial com.mongodb.MongoClientException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            areturn
        end local 1 // java.lang.Throwable t
        end local 0 // com.mongodb.client.internal.Crypt this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/client/internal/Crypt;
            0    1     1     t  Ljava/lang/Throwable;
    MethodParameters:
      Name  Flags
      t     final

  static int[] $SWITCH_TABLE$com$mongodb$crypt$capi$MongoCryptContext$State();
    descriptor: ()[I
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 44
            getstatic com.mongodb.client.internal.Crypt.$SWITCH_TABLE$com$mongodb$crypt$capi$MongoCryptContext$State:[I
            dup
            ifnull 1
            areturn
      StackMap locals:
      StackMap stack: int[]
         1: pop
            invokestatic com.mongodb.crypt.capi.MongoCryptContext$State.values:()[Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            arraylength
            newarray 10
            astore 0
         2: aload 0
            getstatic com.mongodb.crypt.capi.MongoCryptContext$State.DONE:Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            invokevirtual com.mongodb.crypt.capi.MongoCryptContext$State.ordinal:()I
            bipush 6
            iastore
         3: goto 5
      StackMap locals: int[]
      StackMap stack: java.lang.NoSuchFieldError
         4: pop
      StackMap locals:
      StackMap stack:
         5: aload 0
            getstatic com.mongodb.crypt.capi.MongoCryptContext$State.NEED_KMS:Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            invokevirtual com.mongodb.crypt.capi.MongoCryptContext$State.ordinal:()I
            iconst_4
            iastore
         6: goto 8
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
         7: pop
      StackMap locals:
      StackMap stack:
         8: aload 0
            getstatic com.mongodb.crypt.capi.MongoCryptContext$State.NEED_MONGO_COLLINFO:Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            invokevirtual com.mongodb.crypt.capi.MongoCryptContext$State.ordinal:()I
            iconst_1
            iastore
         9: goto 11
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        10: pop
      StackMap locals:
      StackMap stack:
        11: aload 0
            getstatic com.mongodb.crypt.capi.MongoCryptContext$State.NEED_MONGO_KEYS:Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            invokevirtual com.mongodb.crypt.capi.MongoCryptContext$State.ordinal:()I
            iconst_3
            iastore
        12: goto 14
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        13: pop
      StackMap locals:
      StackMap stack:
        14: aload 0
            getstatic com.mongodb.crypt.capi.MongoCryptContext$State.NEED_MONGO_MARKINGS:Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            invokevirtual com.mongodb.crypt.capi.MongoCryptContext$State.ordinal:()I
            iconst_2
            iastore
        15: goto 17
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        16: pop
      StackMap locals:
      StackMap stack:
        17: aload 0
            getstatic com.mongodb.crypt.capi.MongoCryptContext$State.READY:Lcom/mongodb/crypt/capi/MongoCryptContext$State;
            invokevirtual com.mongodb.crypt.capi.MongoCryptContext$State.ordinal:()I
            iconst_5
            iastore
        18: goto 20
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        19: pop
      StackMap locals:
      StackMap stack:
        20: aload 0
            dup
            putstatic com.mongodb.client.internal.Crypt.$SWITCH_TABLE$com$mongodb$crypt$capi$MongoCryptContext$State:[I
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.NoSuchFieldError
           5     6       7  Class java.lang.NoSuchFieldError
           8     9      10  Class java.lang.NoSuchFieldError
          11    12      13  Class java.lang.NoSuchFieldError
          14    15      16  Class java.lang.NoSuchFieldError
          17    18      19  Class java.lang.NoSuchFieldError
}
SourceFile: "Crypt.java"
InnerClasses:
  public final State = com.mongodb.crypt.capi.MongoCryptContext$State of com.mongodb.crypt.capi.MongoCryptContext
  public Builder = com.mongodb.crypt.capi.MongoDataKeyOptions$Builder of com.mongodb.crypt.capi.MongoDataKeyOptions
  public Builder = com.mongodb.crypt.capi.MongoExplicitEncryptOptions$Builder of com.mongodb.crypt.capi.MongoExplicitEncryptOptions