public abstract class android.net.captiveportal.CaptivePortalProbeSpec
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: android.net.captiveportal.CaptivePortalProbeSpec
  super_class: java.lang.Object
{
  public static final java.lang.String HTTP_LOCATION_HEADER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "Location"

  private static final java.lang.String TAG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String REGEX_SEPARATOR;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "@@/@@"

  private static final java.lang.String SPEC_SEPARATOR;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "@@,@@"

  private final java.lang.String mEncodedSpec;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.net.URL mUrl;
    descriptor: Ljava/net/URL;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 39
            ldc Landroid/net/captiveportal/CaptivePortalProbeSpec;
            invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
            putstatic android.net.captiveportal.CaptivePortalProbeSpec.TAG:Ljava/lang/String;
         1: .line 41
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(java.lang.String, java.net.URL);
    descriptor: (Ljava/lang/String;Ljava/net/URL;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // android.net.captiveportal.CaptivePortalProbeSpec this
        start local 1 // java.lang.String encodedSpec
        start local 2 // java.net.URL url
         0: .line 46
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 47
            aload 0 /* this */
            aload 1 /* encodedSpec */
            putfield android.net.captiveportal.CaptivePortalProbeSpec.mEncodedSpec:Ljava/lang/String;
         2: .line 48
            aload 0 /* this */
            aload 2 /* url */
            putfield android.net.captiveportal.CaptivePortalProbeSpec.mUrl:Ljava/net/URL;
         3: .line 49
            return
        end local 2 // java.net.URL url
        end local 1 // java.lang.String encodedSpec
        end local 0 // android.net.captiveportal.CaptivePortalProbeSpec this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0         this  Landroid/net/captiveportal/CaptivePortalProbeSpec;
            0    4     1  encodedSpec  Ljava/lang/String;
            0    4     2          url  Ljava/net/URL;
    MethodParameters:
             Name  Flags
      encodedSpec  
      url          

  public static android.net.captiveportal.CaptivePortalProbeSpec parseSpec(java.lang.String);
    descriptor: (Ljava/lang/String;)Landroid/net/captiveportal/CaptivePortalProbeSpec;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=6, args_size=1
        start local 0 // java.lang.String spec
         0: .line 62
            aload 0 /* spec */
            invokestatic android.text.TextUtils.isEmpty:(Ljava/lang/CharSequence;)Z
            ifeq 2
         1: .line 63
            new java.text.ParseException
            dup
            ldc "Empty probe spec"
            iconst_0
            invokespecial java.text.ParseException.<init>:(Ljava/lang/String;I)V
            athrow
         2: .line 66
      StackMap locals:
      StackMap stack:
            aload 0 /* spec */
            ldc "@@/@@"
            invokestatic android.text.TextUtils.split:(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
            astore 1 /* splits */
        start local 1 // java.lang.String[] splits
         3: .line 67
            aload 1 /* splits */
            arraylength
            iconst_3
            if_icmpeq 5
         4: .line 68
            new java.text.ParseException
            dup
            ldc "Probe spec does not have 3 parts"
            iconst_0
            invokespecial java.text.ParseException.<init>:(Ljava/lang/String;I)V
            athrow
         5: .line 71
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 1 /* splits */
            iconst_0
            aaload
            invokevirtual java.lang.String.length:()I
            ldc "@@/@@"
            invokevirtual java.lang.String.length:()I
            iadd
            istore 2 /* statusRegexPos */
        start local 2 // int statusRegexPos
         6: .line 72
            iload 2 /* statusRegexPos */
            aload 1 /* splits */
            iconst_1
            aaload
            invokevirtual java.lang.String.length:()I
            iadd
            ldc "@@/@@"
            invokevirtual java.lang.String.length:()I
            iadd
            istore 3 /* locationRegexPos */
        start local 3 // int locationRegexPos
         7: .line 73
            aload 1 /* splits */
            iconst_1
            aaload
            iload 2 /* statusRegexPos */
            invokestatic android.net.captiveportal.CaptivePortalProbeSpec.parsePatternIfNonEmpty:(Ljava/lang/String;I)Ljava/util/regex/Pattern;
            astore 4 /* statusRegex */
        start local 4 // java.util.regex.Pattern statusRegex
         8: .line 74
            aload 1 /* splits */
            iconst_2
            aaload
            iload 3 /* locationRegexPos */
            invokestatic android.net.captiveportal.CaptivePortalProbeSpec.parsePatternIfNonEmpty:(Ljava/lang/String;I)Ljava/util/regex/Pattern;
            astore 5 /* locationRegex */
        start local 5 // java.util.regex.Pattern locationRegex
         9: .line 76
            new android.net.captiveportal.CaptivePortalProbeSpec$RegexMatchProbeSpec
            dup
            aload 0 /* spec */
            new java.net.URL
            dup
            aload 1 /* splits */
            iconst_0
            aaload
            invokespecial java.net.URL.<init>:(Ljava/lang/String;)V
            aload 4 /* statusRegex */
            aload 5 /* locationRegex */
            invokespecial android.net.captiveportal.CaptivePortalProbeSpec$RegexMatchProbeSpec.<init>:(Ljava/lang/String;Ljava/net/URL;Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;)V
            areturn
        end local 5 // java.util.regex.Pattern locationRegex
        end local 4 // java.util.regex.Pattern statusRegex
        end local 3 // int locationRegexPos
        end local 2 // int statusRegexPos
        end local 1 // java.lang.String[] splits
        end local 0 // java.lang.String spec
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   10     0              spec  Ljava/lang/String;
            3   10     1            splits  [Ljava/lang/String;
            6   10     2    statusRegexPos  I
            7   10     3  locationRegexPos  I
            8   10     4       statusRegex  Ljava/util/regex/Pattern;
            9   10     5     locationRegex  Ljava/util/regex/Pattern;
    Exceptions:
      throws java.text.ParseException, java.net.MalformedURLException
    MethodParameters:
      Name  Flags
      spec  

  private static java.util.regex.Pattern parsePatternIfNonEmpty(java.lang.String, int);
    descriptor: (Ljava/lang/String;I)Ljava/util/regex/Pattern;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // java.lang.String pattern
        start local 1 // int pos
         0: .line 81
            aload 0 /* pattern */
            invokestatic android.text.TextUtils.isEmpty:(Ljava/lang/CharSequence;)Z
            ifeq 2
         1: .line 82
            aconst_null
            areturn
         2: .line 85
      StackMap locals:
      StackMap stack:
            aload 0 /* pattern */
            invokestatic java.util.regex.Pattern.compile:(Ljava/lang/String;)Ljava/util/regex/Pattern;
         3: areturn
         4: .line 86
      StackMap locals:
      StackMap stack: java.util.regex.PatternSyntaxException
            astore 2 /* e */
        start local 2 // java.util.regex.PatternSyntaxException e
         5: .line 87
            new java.text.ParseException
            dup
         6: .line 88
            ldc "Invalid status pattern [%s]: %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* pattern */
            aastore
            dup
            iconst_1
            aload 2 /* e */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
         7: .line 89
            iload 1 /* pos */
         8: .line 87
            invokespecial java.text.ParseException.<init>:(Ljava/lang/String;I)V
            athrow
        end local 2 // java.util.regex.PatternSyntaxException e
        end local 1 // int pos
        end local 0 // java.lang.String pattern
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0  pattern  Ljava/lang/String;
            0    9     1      pos  I
            5    9     2        e  Ljava/util/regex/PatternSyntaxException;
      Exception table:
        from    to  target  type
           2     3       4  Class java.util.regex.PatternSyntaxException
    Exceptions:
      throws java.text.ParseException
    MethodParameters:
         Name  Flags
      pattern  
      pos      

  public static android.net.captiveportal.CaptivePortalProbeSpec parseSpecOrNull(java.lang.String);
    descriptor: (Ljava/lang/String;)Landroid/net/captiveportal/CaptivePortalProbeSpec;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // java.lang.String spec
         0: .line 99
            aload 0 /* spec */
            ifnull 5
         1: .line 101
            aload 0 /* spec */
            invokestatic android.net.captiveportal.CaptivePortalProbeSpec.parseSpec:(Ljava/lang/String;)Landroid/net/captiveportal/CaptivePortalProbeSpec;
         2: areturn
         3: .line 102
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 1 /* e */
        start local 1 // java.lang.Exception e
         4: .line 103
            getstatic android.net.captiveportal.CaptivePortalProbeSpec.TAG:Ljava/lang/String;
            new java.lang.StringBuilder
            dup
            ldc "Invalid probe spec: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* spec */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 1 /* e */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        end local 1 // java.lang.Exception e
         5: .line 107
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 0 // java.lang.String spec
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  spec  Ljava/lang/String;
            4    5     1     e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           1     2       3  Class java.text.ParseException
           1     2       3  Class java.net.MalformedURLException
    MethodParameters:
      Name  Flags
      spec  

  public static android.net.captiveportal.CaptivePortalProbeSpec[] parseCaptivePortalProbeSpecs(java.lang.String);
    descriptor: (Ljava/lang/String;)[Landroid/net/captiveportal/CaptivePortalProbeSpec;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=7, args_size=1
        start local 0 // java.lang.String settingsVal
         0: .line 117
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* specs */
        start local 1 // java.util.List specs
         1: .line 118
            aload 0 /* settingsVal */
            ifnull 10
         2: .line 119
            aload 0 /* settingsVal */
            ldc "@@,@@"
            invokestatic android.text.TextUtils.split:(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 9
      StackMap locals: java.lang.String java.util.List top int int java.lang.String[]
      StackMap stack:
         3: aload 5
            iload 3
            aaload
            astore 2 /* spec */
        start local 2 // java.lang.String spec
         4: .line 121
            aload 1 /* specs */
            aload 2 /* spec */
            invokestatic android.net.captiveportal.CaptivePortalProbeSpec.parseSpec:(Ljava/lang/String;)Landroid/net/captiveportal/CaptivePortalProbeSpec;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         5: .line 122
            goto 8
      StackMap locals: java.lang.String java.util.List java.lang.String int int java.lang.String[]
      StackMap stack: java.lang.Exception
         6: astore 6 /* e */
        start local 6 // java.lang.Exception e
         7: .line 123
            getstatic android.net.captiveportal.CaptivePortalProbeSpec.TAG:Ljava/lang/String;
            new java.lang.StringBuilder
            dup
            ldc "Invalid probe spec: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* spec */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 6 /* e */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        end local 6 // java.lang.Exception e
        end local 2 // java.lang.String spec
         8: .line 119
      StackMap locals: java.lang.String java.util.List top int int java.lang.String[]
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         9: iload 3
            iload 4
            if_icmplt 3
        10: .line 128
      StackMap locals: java.lang.String java.util.List
      StackMap stack:
            aload 1 /* specs */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 12
        11: .line 129
            getstatic android.net.captiveportal.CaptivePortalProbeSpec.TAG:Ljava/lang/String;
            ldc "could not create any validation spec from %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* settingsVal */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        12: .line 131
      StackMap locals:
      StackMap stack:
            aload 1 /* specs */
            aload 1 /* specs */
            invokeinterface java.util.List.size:()I
            anewarray android.net.captiveportal.CaptivePortalProbeSpec
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast android.net.captiveportal.CaptivePortalProbeSpec[]
            areturn
        end local 1 // java.util.List specs
        end local 0 // java.lang.String settingsVal
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   13     0  settingsVal  Ljava/lang/String;
            1   13     1        specs  Ljava/util/List<Landroid/net/captiveportal/CaptivePortalProbeSpec;>;
            4    8     2         spec  Ljava/lang/String;
            7    8     6            e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           4     5       6  Class java.text.ParseException
           4     5       6  Class java.net.MalformedURLException
    MethodParameters:
             Name  Flags
      settingsVal  

  public abstract android.net.captiveportal.CaptivePortalProbeResult getResult(int, java.lang.String);
    descriptor: (ILjava/lang/String;)Landroid/net/captiveportal/CaptivePortalProbeResult;
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
    MethodParameters:
                Name  Flags
      status          
      locationHeader  

  public java.lang.String getEncodedSpec();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.net.captiveportal.CaptivePortalProbeSpec this
         0: .line 140
            aload 0 /* this */
            getfield android.net.captiveportal.CaptivePortalProbeSpec.mEncodedSpec:Ljava/lang/String;
            areturn
        end local 0 // android.net.captiveportal.CaptivePortalProbeSpec this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/net/captiveportal/CaptivePortalProbeSpec;

  public java.net.URL getUrl();
    descriptor: ()Ljava/net/URL;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.net.captiveportal.CaptivePortalProbeSpec this
         0: .line 144
            aload 0 /* this */
            getfield android.net.captiveportal.CaptivePortalProbeSpec.mUrl:Ljava/net/URL;
            areturn
        end local 0 // android.net.captiveportal.CaptivePortalProbeSpec this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/net/captiveportal/CaptivePortalProbeSpec;

  private static boolean safeMatch(java.lang.String, java.util.regex.Pattern);
    descriptor: (Ljava/lang/String;Ljava/util/regex/Pattern;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String value
        start local 1 // java.util.regex.Pattern pattern
         0: .line 178
            aload 1 /* pattern */
            ifnull 1
            aload 0 /* value */
            invokestatic android.text.TextUtils.isEmpty:(Ljava/lang/CharSequence;)Z
            ifne 1
            aload 1 /* pattern */
            aload 0 /* value */
            invokevirtual java.util.regex.Pattern.matcher:(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
            invokevirtual java.util.regex.Matcher.matches:()Z
            ifne 1
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
        end local 1 // java.util.regex.Pattern pattern
        end local 0 // java.lang.String value
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0    value  Ljava/lang/String;
            0    2     1  pattern  Ljava/util/regex/Pattern;
    MethodParameters:
         Name  Flags
      value    
      pattern  
}
SourceFile: "CaptivePortalProbeSpec.java"
NestMembers:
  android.net.captiveportal.CaptivePortalProbeSpec$RegexMatchProbeSpec
InnerClasses:
  private RegexMatchProbeSpec = android.net.captiveportal.CaptivePortalProbeSpec$RegexMatchProbeSpec of android.net.captiveportal.CaptivePortalProbeSpec