public class freemarker.template.utility.DeepUnwrap
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: freemarker.template.utility.DeepUnwrap
  super_class: java.lang.Object
{
  private static final java.lang.Class OBJECT_CLASS;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 48
            ldc Ljava/lang/Object;
            putstatic freemarker.template.utility.DeepUnwrap.OBJECT_CLASS:Ljava/lang/Class;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // freemarker.template.utility.DeepUnwrap this
         0: .line 47
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // freemarker.template.utility.DeepUnwrap this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lfreemarker/template/utility/DeepUnwrap;

  public static java.lang.Object unwrap(freemarker.template.TemplateModel);
    descriptor: (Lfreemarker/template/TemplateModel;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // freemarker.template.TemplateModel model
         0: .line 79
            aload 0 /* model */
            iconst_0
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            areturn
        end local 0 // freemarker.template.TemplateModel model
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  model  Lfreemarker/template/TemplateModel;
    Exceptions:
      throws freemarker.template.TemplateModelException
    MethodParameters:
       Name  Flags
      model  

  public static java.lang.Object permissiveUnwrap(freemarker.template.TemplateModel);
    descriptor: (Lfreemarker/template/TemplateModel;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // freemarker.template.TemplateModel model
         0: .line 88
            aload 0 /* model */
            iconst_1
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            areturn
        end local 0 // freemarker.template.TemplateModel model
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  model  Lfreemarker/template/TemplateModel;
    Exceptions:
      throws freemarker.template.TemplateModelException
    MethodParameters:
       Name  Flags
      model  

  public static java.lang.Object premissiveUnwrap(freemarker.template.TemplateModel);
    descriptor: (Lfreemarker/template/TemplateModel;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // freemarker.template.TemplateModel model
         0: .line 97
            aload 0 /* model */
            iconst_1
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            areturn
        end local 0 // freemarker.template.TemplateModel model
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  model  Lfreemarker/template/TemplateModel;
    Exceptions:
      throws freemarker.template.TemplateModelException
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
       Name  Flags
      model  

  private static java.lang.Object unwrap(freemarker.template.TemplateModel, boolean);
    descriptor: (Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // freemarker.template.TemplateModel model
        start local 1 // boolean permissive
         0: .line 101
            invokestatic freemarker.core.Environment.getCurrentEnvironment:()Lfreemarker/core/Environment;
            astore 2 /* env */
        start local 2 // freemarker.core.Environment env
         1: .line 102
            aconst_null
            astore 3 /* nullModel */
        start local 3 // freemarker.template.TemplateModel nullModel
         2: .line 103
            aload 2 /* env */
            ifnull 6
         3: .line 104
            aload 2 /* env */
            invokevirtual freemarker.core.Environment.getObjectWrapper:()Lfreemarker/template/ObjectWrapper;
            astore 4 /* wrapper */
        start local 4 // freemarker.template.ObjectWrapper wrapper
         4: .line 105
            aload 4 /* wrapper */
            ifnull 6
         5: .line 106
            aload 4 /* wrapper */
            aconst_null
            invokeinterface freemarker.template.ObjectWrapper.wrap:(Ljava/lang/Object;)Lfreemarker/template/TemplateModel;
            astore 3 /* nullModel */
        end local 4 // freemarker.template.ObjectWrapper wrapper
         6: .line 109
      StackMap locals: freemarker.core.Environment freemarker.template.TemplateModel
      StackMap stack:
            aload 0 /* model */
            aload 3 /* nullModel */
            iload 1 /* permissive */
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            areturn
        end local 3 // freemarker.template.TemplateModel nullModel
        end local 2 // freemarker.core.Environment env
        end local 1 // boolean permissive
        end local 0 // freemarker.template.TemplateModel model
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0       model  Lfreemarker/template/TemplateModel;
            0    7     1  permissive  Z
            1    7     2         env  Lfreemarker/core/Environment;
            2    7     3   nullModel  Lfreemarker/template/TemplateModel;
            4    6     4     wrapper  Lfreemarker/template/ObjectWrapper;
    Exceptions:
      throws freemarker.template.TemplateModelException
    MethodParameters:
            Name  Flags
      model       
      permissive  

  private static java.lang.Object unwrap(freemarker.template.TemplateModel, freemarker.template.TemplateModel, boolean);
    descriptor: (Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // freemarker.template.TemplateModel model
        start local 1 // freemarker.template.TemplateModel nullModel
        start local 2 // boolean permissive
         0: .line 113
            aload 0 /* model */
            instanceof freemarker.template.AdapterTemplateModel
            ifeq 2
         1: .line 114
            aload 0 /* model */
            checkcast freemarker.template.AdapterTemplateModel
            getstatic freemarker.template.utility.DeepUnwrap.OBJECT_CLASS:Ljava/lang/Class;
            invokeinterface freemarker.template.AdapterTemplateModel.getAdaptedObject:(Ljava/lang/Class;)Ljava/lang/Object;
            areturn
         2: .line 116
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.ext.util.WrapperTemplateModel
            ifeq 4
         3: .line 117
            aload 0 /* model */
            checkcast freemarker.ext.util.WrapperTemplateModel
            invokeinterface freemarker.ext.util.WrapperTemplateModel.getWrappedObject:()Ljava/lang/Object;
            areturn
         4: .line 119
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            aload 1 /* nullModel */
            if_acmpne 6
         5: .line 120
            aconst_null
            areturn
         6: .line 122
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.template.TemplateScalarModel
            ifeq 8
         7: .line 123
            aload 0 /* model */
            checkcast freemarker.template.TemplateScalarModel
            invokeinterface freemarker.template.TemplateScalarModel.getAsString:()Ljava/lang/String;
            areturn
         8: .line 125
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.template.TemplateNumberModel
            ifeq 10
         9: .line 126
            aload 0 /* model */
            checkcast freemarker.template.TemplateNumberModel
            invokeinterface freemarker.template.TemplateNumberModel.getAsNumber:()Ljava/lang/Number;
            areturn
        10: .line 128
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.template.TemplateDateModel
            ifeq 12
        11: .line 129
            aload 0 /* model */
            checkcast freemarker.template.TemplateDateModel
            invokeinterface freemarker.template.TemplateDateModel.getAsDate:()Ljava/util/Date;
            areturn
        12: .line 131
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.template.TemplateBooleanModel
            ifeq 14
        13: .line 132
            aload 0 /* model */
            checkcast freemarker.template.TemplateBooleanModel
            invokeinterface freemarker.template.TemplateBooleanModel.getAsBoolean:()Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            areturn
        14: .line 134
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.template.TemplateSequenceModel
            ifeq 24
        15: .line 135
            aload 0 /* model */
            checkcast freemarker.template.TemplateSequenceModel
            astore 3 /* seq */
        start local 3 // freemarker.template.TemplateSequenceModel seq
        16: .line 136
            aload 3 /* seq */
            invokeinterface freemarker.template.TemplateSequenceModel.size:()I
            istore 4 /* size */
        start local 4 // int size
        17: .line 137
            new java.util.ArrayList
            dup
            iload 4 /* size */
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 5 /* list */
        start local 5 // java.util.ArrayList list
        18: .line 138
            iconst_0
            istore 6 /* i */
        start local 6 // int i
        19: goto 22
        20: .line 139
      StackMap locals: freemarker.template.TemplateModel freemarker.template.TemplateModel int freemarker.template.TemplateSequenceModel int java.util.ArrayList int
      StackMap stack:
            aload 5 /* list */
            aload 3 /* seq */
            iload 6 /* i */
            invokeinterface freemarker.template.TemplateSequenceModel.get:(I)Lfreemarker/template/TemplateModel;
            aload 1 /* nullModel */
            iload 2 /* permissive */
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        21: .line 138
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        22: iload 6 /* i */
            iload 4 /* size */
            if_icmplt 20
        end local 6 // int i
        23: .line 141
            aload 5 /* list */
            areturn
        end local 5 // java.util.ArrayList list
        end local 4 // int size
        end local 3 // freemarker.template.TemplateSequenceModel seq
        24: .line 143
      StackMap locals: freemarker.template.TemplateModel freemarker.template.TemplateModel int
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.template.TemplateCollectionModel
            ifeq 32
        25: .line 144
            aload 0 /* model */
            checkcast freemarker.template.TemplateCollectionModel
            astore 3 /* coll */
        start local 3 // freemarker.template.TemplateCollectionModel coll
        26: .line 145
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 4 /* list */
        start local 4 // java.util.ArrayList list
        27: .line 146
            aload 3 /* coll */
            invokeinterface freemarker.template.TemplateCollectionModel.iterator:()Lfreemarker/template/TemplateModelIterator;
            astore 5 /* it */
        start local 5 // freemarker.template.TemplateModelIterator it
        28: .line 147
            goto 30
        29: .line 148
      StackMap locals: freemarker.template.TemplateCollectionModel java.util.ArrayList freemarker.template.TemplateModelIterator
      StackMap stack:
            aload 4 /* list */
            aload 5 /* it */
            invokeinterface freemarker.template.TemplateModelIterator.next:()Lfreemarker/template/TemplateModel;
            aload 1 /* nullModel */
            iload 2 /* permissive */
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        30: .line 147
      StackMap locals:
      StackMap stack:
            aload 5 /* it */
            invokeinterface freemarker.template.TemplateModelIterator.hasNext:()Z
            ifne 29
        31: .line 150
            aload 4 /* list */
            areturn
        end local 5 // freemarker.template.TemplateModelIterator it
        end local 4 // java.util.ArrayList list
        end local 3 // freemarker.template.TemplateCollectionModel coll
        32: .line 152
      StackMap locals:
      StackMap stack:
            aload 0 /* model */
            instanceof freemarker.template.TemplateHashModelEx
            ifeq 51
        33: .line 153
            aload 0 /* model */
            checkcast freemarker.template.TemplateHashModelEx
            astore 3 /* hash */
        start local 3 // freemarker.template.TemplateHashModelEx hash
        34: .line 154
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 4 /* map */
        start local 4 // java.util.Map map
        35: .line 155
            aload 0 /* model */
            instanceof freemarker.template.TemplateHashModelEx2
            ifeq 45
        36: .line 156
            aload 0 /* model */
            checkcast freemarker.template.TemplateHashModelEx2
            invokeinterface freemarker.template.TemplateHashModelEx2.keyValuePairIterator:()Lfreemarker/template/TemplateHashModelEx2$KeyValuePairIterator;
            astore 5 /* kvps */
        start local 5 // freemarker.template.TemplateHashModelEx2$KeyValuePairIterator kvps
        37: .line 157
            goto 43
        38: .line 158
      StackMap locals: freemarker.template.TemplateHashModelEx java.util.Map freemarker.template.TemplateHashModelEx2$KeyValuePairIterator
      StackMap stack:
            aload 5 /* kvps */
            invokeinterface freemarker.template.TemplateHashModelEx2$KeyValuePairIterator.next:()Lfreemarker/template/TemplateHashModelEx2$KeyValuePair;
            astore 6 /* kvp */
        start local 6 // freemarker.template.TemplateHashModelEx2$KeyValuePair kvp
        39: .line 159
            aload 4 /* map */
        40: .line 160
            aload 6 /* kvp */
            invokeinterface freemarker.template.TemplateHashModelEx2$KeyValuePair.getKey:()Lfreemarker/template/TemplateModel;
            aload 1 /* nullModel */
            iload 2 /* permissive */
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
        41: .line 161
            aload 6 /* kvp */
            invokeinterface freemarker.template.TemplateHashModelEx2$KeyValuePair.getValue:()Lfreemarker/template/TemplateModel;
            aload 1 /* nullModel */
            iload 2 /* permissive */
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
        42: .line 159
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 6 // freemarker.template.TemplateHashModelEx2$KeyValuePair kvp
        43: .line 157
      StackMap locals:
      StackMap stack:
            aload 5 /* kvps */
            invokeinterface freemarker.template.TemplateHashModelEx2$KeyValuePairIterator.hasNext:()Z
            ifne 38
        end local 5 // freemarker.template.TemplateHashModelEx2$KeyValuePairIterator kvps
        44: .line 163
            goto 50
        45: .line 164
      StackMap locals:
      StackMap stack:
            aload 3 /* hash */
            invokeinterface freemarker.template.TemplateHashModelEx.keys:()Lfreemarker/template/TemplateCollectionModel;
            invokeinterface freemarker.template.TemplateCollectionModel.iterator:()Lfreemarker/template/TemplateModelIterator;
            astore 5 /* keys */
        start local 5 // freemarker.template.TemplateModelIterator keys
        46: .line 165
            goto 49
        47: .line 166
      StackMap locals: freemarker.template.TemplateModelIterator
      StackMap stack:
            aload 5 /* keys */
            invokeinterface freemarker.template.TemplateModelIterator.next:()Lfreemarker/template/TemplateModel;
            aload 1 /* nullModel */
            iload 2 /* permissive */
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* key */
        start local 6 // java.lang.String key
        48: .line 167
            aload 4 /* map */
            aload 6 /* key */
            aload 3 /* hash */
            aload 6 /* key */
            invokeinterface freemarker.template.TemplateHashModelEx.get:(Ljava/lang/String;)Lfreemarker/template/TemplateModel;
            aload 1 /* nullModel */
            iload 2 /* permissive */
            invokestatic freemarker.template.utility.DeepUnwrap.unwrap:(Lfreemarker/template/TemplateModel;Lfreemarker/template/TemplateModel;Z)Ljava/lang/Object;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 6 // java.lang.String key
        49: .line 165
      StackMap locals:
      StackMap stack:
            aload 5 /* keys */
            invokeinterface freemarker.template.TemplateModelIterator.hasNext:()Z
            ifne 47
        end local 5 // freemarker.template.TemplateModelIterator keys
        50: .line 170
      StackMap locals:
      StackMap stack:
            aload 4 /* map */
            areturn
        end local 4 // java.util.Map map
        end local 3 // freemarker.template.TemplateHashModelEx hash
        51: .line 172
      StackMap locals:
      StackMap stack:
            iload 2 /* permissive */
            ifeq 53
        52: .line 173
            aload 0 /* model */
            areturn
        53: .line 175
      StackMap locals:
      StackMap stack:
            new freemarker.template.TemplateModelException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Cannot deep-unwrap model of type "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* model */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial freemarker.template.TemplateModelException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // boolean permissive
        end local 1 // freemarker.template.TemplateModel nullModel
        end local 0 // freemarker.template.TemplateModel model
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   54     0       model  Lfreemarker/template/TemplateModel;
            0   54     1   nullModel  Lfreemarker/template/TemplateModel;
            0   54     2  permissive  Z
           16   24     3         seq  Lfreemarker/template/TemplateSequenceModel;
           17   24     4        size  I
           18   24     5        list  Ljava/util/ArrayList;
           19   23     6           i  I
           26   32     3        coll  Lfreemarker/template/TemplateCollectionModel;
           27   32     4        list  Ljava/util/ArrayList;
           28   32     5          it  Lfreemarker/template/TemplateModelIterator;
           34   51     3        hash  Lfreemarker/template/TemplateHashModelEx;
           35   51     4         map  Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;
           37   44     5        kvps  Lfreemarker/template/TemplateHashModelEx2$KeyValuePairIterator;
           39   43     6         kvp  Lfreemarker/template/TemplateHashModelEx2$KeyValuePair;
           46   50     5        keys  Lfreemarker/template/TemplateModelIterator;
           48   49     6         key  Ljava/lang/String;
    Exceptions:
      throws freemarker.template.TemplateModelException
    MethodParameters:
            Name  Flags
      model       
      nullModel   
      permissive  
}
SourceFile: "DeepUnwrap.java"
InnerClasses:
  public abstract KeyValuePair = freemarker.template.TemplateHashModelEx2$KeyValuePair of freemarker.template.TemplateHashModelEx2
  public abstract KeyValuePairIterator = freemarker.template.TemplateHashModelEx2$KeyValuePairIterator of freemarker.template.TemplateHashModelEx2