public class com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter implements javax.servlet.Filter
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter
  super_class: java.lang.Object
{
  private static final int STATUS_TOO_MANY_REQUESTS;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 429

  private final com.netflix.concurrency.limits.Limiter<javax.servlet.http.HttpServletRequest> limiter;
    descriptor: Lcom/netflix/concurrency/limits/Limiter;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/netflix/concurrency/limits/Limiter<Ljavax/servlet/http/HttpServletRequest;>;

  public void <init>(com.netflix.concurrency.limits.Limiter<javax.servlet.http.HttpServletRequest>);
    descriptor: (Lcom/netflix/concurrency/limits/Limiter;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
        start local 1 // com.netflix.concurrency.limits.Limiter limiter
         0: .line 42
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 43
            aload 0 /* this */
            aload 1 /* limiter */
            putfield com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter.limiter:Lcom/netflix/concurrency/limits/Limiter;
         2: .line 44
            return
        end local 1 // com.netflix.concurrency.limits.Limiter limiter
        end local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lcom/netflix/concurrency/limits/servlet/ConcurrencyLimitServletFilter;
            0    3     1  limiter  Lcom/netflix/concurrency/limits/Limiter<Ljavax/servlet/http/HttpServletRequest;>;
    Signature: (Lcom/netflix/concurrency/limits/Limiter<Ljavax/servlet/http/HttpServletRequest;>;)V
    MethodParameters:
         Name  Flags
      limiter  

  public void init(javax.servlet.FilterConfig);
    descriptor: (Ljavax/servlet/FilterConfig;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=2, args_size=2
        start local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
        start local 1 // javax.servlet.FilterConfig filterConfig
         0: .line 48
            return
        end local 1 // javax.servlet.FilterConfig filterConfig
        end local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    1     0          this  Lcom/netflix/concurrency/limits/servlet/ConcurrencyLimitServletFilter;
            0    1     1  filterConfig  Ljavax/servlet/FilterConfig;
    Exceptions:
      throws javax.servlet.ServletException
    MethodParameters:
              Name  Flags
      filterConfig  

  public void doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain);
    descriptor: (Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=4
        start local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
        start local 1 // javax.servlet.ServletRequest request
        start local 2 // javax.servlet.ServletResponse response
        start local 3 // javax.servlet.FilterChain chain
         0: .line 54
            aload 0 /* this */
            getfield com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter.limiter:Lcom/netflix/concurrency/limits/Limiter;
            aload 1 /* request */
            checkcast javax.servlet.http.HttpServletRequest
            invokeinterface com.netflix.concurrency.limits.Limiter.acquire:(Ljava/lang/Object;)Ljava/util/Optional;
            astore 4 /* listener */
        start local 4 // java.util.Optional listener
         1: .line 55
            aload 4 /* listener */
            invokevirtual java.util.Optional.isPresent:()Z
            ifeq 8
         2: .line 57
            aload 3 /* chain */
            aload 1 /* request */
            aload 2 /* response */
            invokeinterface javax.servlet.FilterChain.doFilter:(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V
         3: .line 58
            aload 4 /* listener */
            invokevirtual java.util.Optional.get:()Ljava/lang/Object;
            checkcast com.netflix.concurrency.limits.Limiter$Listener
            invokeinterface com.netflix.concurrency.limits.Limiter$Listener.onSuccess:()V
         4: .line 59
            goto 9
      StackMap locals: com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter javax.servlet.ServletRequest javax.servlet.ServletResponse javax.servlet.FilterChain java.util.Optional
      StackMap stack: java.lang.Exception
         5: astore 5 /* e */
        start local 5 // java.lang.Exception e
         6: .line 60
            aload 4 /* listener */
            invokevirtual java.util.Optional.get:()Ljava/lang/Object;
            checkcast com.netflix.concurrency.limits.Limiter$Listener
            invokeinterface com.netflix.concurrency.limits.Limiter$Listener.onIgnore:()V
         7: .line 61
            aload 5 /* e */
            athrow
        end local 5 // java.lang.Exception e
         8: .line 64
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* response */
            checkcast javax.servlet.http.HttpServletResponse
            invokevirtual com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter.outputThrottleError:(Ljavax/servlet/http/HttpServletResponse;)V
         9: .line 66
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.util.Optional listener
        end local 3 // javax.servlet.FilterChain chain
        end local 2 // javax.servlet.ServletResponse response
        end local 1 // javax.servlet.ServletRequest request
        end local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Lcom/netflix/concurrency/limits/servlet/ConcurrencyLimitServletFilter;
            0   10     1   request  Ljavax/servlet/ServletRequest;
            0   10     2  response  Ljavax/servlet/ServletResponse;
            0   10     3     chain  Ljavax/servlet/FilterChain;
            1   10     4  listener  Ljava/util/Optional<Lcom/netflix/concurrency/limits/Limiter$Listener;>;
            6    8     5         e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           2     4       5  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException, javax.servlet.ServletException
    MethodParameters:
          Name  Flags
      request   
      response  
      chain     

  protected void outputThrottleError(javax.servlet.http.HttpServletResponse);
    descriptor: (Ljavax/servlet/http/HttpServletResponse;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
        start local 1 // javax.servlet.http.HttpServletResponse response
         0: .line 70
            aload 1 /* response */
            sipush 429
            invokeinterface javax.servlet.http.HttpServletResponse.setStatus:(I)V
         1: .line 71
            aload 1 /* response */
            invokeinterface javax.servlet.http.HttpServletResponse.getWriter:()Ljava/io/PrintWriter;
            ldc "Concurrency limit exceeded"
            invokevirtual java.io.PrintWriter.print:(Ljava/lang/String;)V
         2: .line 72
            goto 4
      StackMap locals:
      StackMap stack: java.io.IOException
         3: pop
         4: .line 74
      StackMap locals:
      StackMap stack:
            return
        end local 1 // javax.servlet.http.HttpServletResponse response
        end local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lcom/netflix/concurrency/limits/servlet/ConcurrencyLimitServletFilter;
            0    5     1  response  Ljavax/servlet/http/HttpServletResponse;
      Exception table:
        from    to  target  type
           0     2       3  Class java.io.IOException
    MethodParameters:
          Name  Flags
      response  

  public void destroy();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
         0: .line 78
            return
        end local 0 // com.netflix.concurrency.limits.servlet.ConcurrencyLimitServletFilter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/netflix/concurrency/limits/servlet/ConcurrencyLimitServletFilter;
}
SourceFile: "ConcurrencyLimitServletFilter.java"
InnerClasses:
  public abstract Listener = com.netflix.concurrency.limits.Limiter$Listener of com.netflix.concurrency.limits.Limiter