public final class org.apache.cassandra.cql3.functions.UDFByteCodeVerifier
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: org.apache.cassandra.cql3.functions.UDFByteCodeVerifier
  super_class: java.lang.Object
{
  public static final java.lang.String JAVA_UDF_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public static final java.lang.String OBJECT_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public static final java.lang.String CTOR_SIG;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "(Lcom/datastax/driver/core/TypeCodec;[Lcom/datastax/driver/core/TypeCodec;Lorg/apache/cassandra/cql3/functions/UDFContext;)V"

  private final java.util.Set<java.lang.String> disallowedClasses;
    descriptor: Ljava/util/Set;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Set<Ljava/lang/String;>;

  private final com.google.common.collect.Multimap<java.lang.String, java.lang.String> disallowedMethodCalls;
    descriptor: Lcom/google/common/collect/Multimap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/google/common/collect/Multimap<Ljava/lang/String;Ljava/lang/String;>;

  private final java.util.List<java.lang.String> disallowedPackages;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/String;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 48
            ldc Lorg/apache/cassandra/cql3/functions/JavaUDF;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            bipush 46
            bipush 47
            invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
            putstatic org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.JAVA_UDF_NAME:Ljava/lang/String;
         1: .line 49
            ldc Ljava/lang/Object;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            bipush 46
            bipush 47
            invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
            putstatic org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.OBJECT_NAME:Ljava/lang/String;
         2: .line 50
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
         0: .line 56
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 52
            aload 0 /* this */
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putfield org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.disallowedClasses:Ljava/util/Set;
         2: .line 53
            aload 0 /* this */
            invokestatic com.google.common.collect.HashMultimap.create:()Lcom/google/common/collect/HashMultimap;
            putfield org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.disallowedMethodCalls:Lcom/google/common/collect/Multimap;
         3: .line 54
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.disallowedPackages:Ljava/util/List;
         4: .line 58
            aload 0 /* this */
            getstatic org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.OBJECT_NAME:Ljava/lang/String;
            ldc "clone"
            invokevirtual org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.addDisallowedMethodCall:(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            pop
         5: .line 59
            aload 0 /* this */
            getstatic org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.OBJECT_NAME:Ljava/lang/String;
            ldc "finalize"
            invokevirtual org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.addDisallowedMethodCall:(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            pop
         6: .line 60
            aload 0 /* this */
            getstatic org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.OBJECT_NAME:Ljava/lang/String;
            ldc "notify"
            invokevirtual org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.addDisallowedMethodCall:(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            pop
         7: .line 61
            aload 0 /* this */
            getstatic org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.OBJECT_NAME:Ljava/lang/String;
            ldc "notifyAll"
            invokevirtual org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.addDisallowedMethodCall:(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            pop
         8: .line 62
            aload 0 /* this */
            getstatic org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.OBJECT_NAME:Ljava/lang/String;
            ldc "wait"
            invokevirtual org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.addDisallowedMethodCall:(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            pop
         9: .line 63
            return
        end local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;

  public org.apache.cassandra.cql3.functions.UDFByteCodeVerifier addDisallowedClass(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
        start local 1 // java.lang.String clazz
         0: .line 67
            aload 0 /* this */
            getfield org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.disallowedClasses:Ljava/util/Set;
            aload 1 /* clazz */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         1: .line 68
            aload 0 /* this */
            areturn
        end local 1 // java.lang.String clazz
        end local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0   this  Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            0    2     1  clazz  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      clazz  

  public org.apache.cassandra.cql3.functions.UDFByteCodeVerifier addDisallowedMethodCall(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
        start local 1 // java.lang.String clazz
        start local 2 // java.lang.String method
         0: .line 73
            aload 0 /* this */
            getfield org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.disallowedMethodCalls:Lcom/google/common/collect/Multimap;
            aload 1 /* clazz */
            aload 2 /* method */
            invokeinterface com.google.common.collect.Multimap.put:(Ljava/lang/Object;Ljava/lang/Object;)Z
            pop
         1: .line 74
            aload 0 /* this */
            areturn
        end local 2 // java.lang.String method
        end local 1 // java.lang.String clazz
        end local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            0    2     1   clazz  Ljava/lang/String;
            0    2     2  method  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      clazz   
      method  

  public org.apache.cassandra.cql3.functions.UDFByteCodeVerifier addDisallowedPackage(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
        start local 1 // java.lang.String pkg
         0: .line 79
            aload 0 /* this */
            getfield org.apache.cassandra.cql3.functions.UDFByteCodeVerifier.disallowedPackages:Ljava/util/List;
            aload 1 /* pkg */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         1: .line 80
            aload 0 /* this */
            areturn
        end local 1 // java.lang.String pkg
        end local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            0    2     1   pkg  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      pkg   

  public java.util.Set<java.lang.String> verify(java.lang.String, byte[]);
    descriptor: (Ljava/lang/String;[B)Ljava/util/Set;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=7, args_size=3
        start local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
        start local 1 // java.lang.String clsName
        start local 2 // byte[] bytes
         0: .line 85
            aload 1 /* clsName */
            bipush 46
            bipush 47
            invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
            astore 3 /* clsNameSl */
        start local 3 // java.lang.String clsNameSl
         1: .line 86
            new java.util.TreeSet
            dup
            invokespecial java.util.TreeSet.<init>:()V
            astore 4 /* errors */
        start local 4 // java.util.Set errors
         2: .line 87
            new org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$1
            dup
            aload 0 /* this */
            ldc 327680
            aload 4 /* errors */
            aload 3 /* clsNameSl */
            invokespecial org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$1.<init>:(Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;ILjava/util/Set;Ljava/lang/String;)V
            astore 5 /* classVisitor */
        start local 5 // org.objectweb.asm.ClassVisitor classVisitor
         3: .line 151
            new org.objectweb.asm.ClassReader
            dup
            aload 2 /* bytes */
            invokespecial org.objectweb.asm.ClassReader.<init>:([B)V
            astore 6 /* classReader */
        start local 6 // org.objectweb.asm.ClassReader classReader
         4: .line 152
            aload 6 /* classReader */
            aload 5 /* classVisitor */
            iconst_2
            invokevirtual org.objectweb.asm.ClassReader.accept:(Lorg/objectweb/asm/ClassVisitor;I)V
         5: .line 154
            aload 4 /* errors */
            areturn
        end local 6 // org.objectweb.asm.ClassReader classReader
        end local 5 // org.objectweb.asm.ClassVisitor classVisitor
        end local 4 // java.util.Set errors
        end local 3 // java.lang.String clsNameSl
        end local 2 // byte[] bytes
        end local 1 // java.lang.String clsName
        end local 0 // org.apache.cassandra.cql3.functions.UDFByteCodeVerifier this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Lorg/apache/cassandra/cql3/functions/UDFByteCodeVerifier;
            0    6     1       clsName  Ljava/lang/String;
            0    6     2         bytes  [B
            1    6     3     clsNameSl  Ljava/lang/String;
            2    6     4        errors  Ljava/util/Set<Ljava/lang/String;>;
            3    6     5  classVisitor  Lorg/objectweb/asm/ClassVisitor;
            4    6     6   classReader  Lorg/objectweb/asm/ClassReader;
    Signature: (Ljava/lang/String;[B)Ljava/util/Set<Ljava/lang/String;>;
    MethodParameters:
         Name  Flags
      clsName  
      bytes    
}
SourceFile: "UDFByteCodeVerifier.java"
NestMembers:
  org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$1  org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$ConstructorVisitor  org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$ExecuteImplVisitor
InnerClasses:
  org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$1
  private ConstructorVisitor = org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$ConstructorVisitor of org.apache.cassandra.cql3.functions.UDFByteCodeVerifier
  private ExecuteImplVisitor = org.apache.cassandra.cql3.functions.UDFByteCodeVerifier$ExecuteImplVisitor of org.apache.cassandra.cql3.functions.UDFByteCodeVerifier