anchor.diff:    ));
   end;
   
  +method GetClassMetadata(aClass: &Class): ^ElementsTypeMetadata; 
  +begin 
  +  exit ^ElementsTypeMetadata(__ElementsGetAttributesBlockForFunction(bridge<^Void>(aClass, BridgeMode.Bridge)));
  +end;
  +
  +method GetAttributesForType(aClass: &Class; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin
  +  var lTmp :=GetClassMetadata(aclass);
  +  if lTmp = nil then exit nil;
  +  var lTmp2 := ^Byte(lTmp^.CustomAttributes);
  +  exit __ElementsReadAttributes(var lTmp2, 0, aTypeFilter);
  +end;
  +
  +method GetAttributesForFunction(aMethod: ^Void; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin 
  +  var lTmp :=__ElementsGetAttributesBlockForFunction(aMethod);
  +  exit __ElementsReadAttributes(var lTmp, 0, aTypeFilter);
  +end;
  +
  +method GetAttributesForFunctionResult(aMethod: ^Void; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin 
  +  var lTmp :=__ElementsGetAttributesBlockForFunction(aMethod);
  +  exit __ElementsReadAttributes(var lTmp, 1, aTypeFilter);
  +end;
  +
  +method GetAttributesForFunctionParameter(aMethod: ^Void; aTypeFilter: &Class; aIndex: Integer): NSArray<Attribute>; 
  +begin 
  +  var lTmp :=__ElementsGetAttributesBlockForFunction(aMethod);
  +  exit __ElementsReadAttributes(var lTmp, 2 + aIndex, aTypeFilter);
  +end;
  +
  +method GetAttributesForMethod(aClass: &Class; aInstance: Boolean; aSel: SEL; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin
  +  var lTmp :=__ElementsGetAttributesBlockForMethod(aClass, aInstance, aSel);
  +  exit __ElementsReadAttributes(var lTmp, 0, aTypeFilter);
  +end;
  +
  +method GetAttributesForMethodResult(aClass: &Class; aInstance: Boolean; aSel: SEL; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin
  +  var lTmp :=__ElementsGetAttributesBlockForMethod(aClass, aInstance, aSel);
  +  exit __ElementsReadAttributes(var lTmp, 1, aTypeFilter);
  +end;
  +
  +method GetAttributesForMethodParameter(aClass: &Class; aInstance: Boolean; aSel: SEL; aTypeFilter: &Class; aIndex: Integer): NSArray<Attribute>; 
  +begin
  +  var lTmp :=__ElementsGetAttributesBlockForMethod(aClass, aInstance, aSel);
  +  exit __ElementsReadAttributes(var lTmp, 2 + aIndex, aTypeFilter);
  +end;
  +
  +method GetAttributesForProperty(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin 
  +  var lTmp := GetClassMetadata(aClass);
  +  if lTmp <> nil then begin
  +    var lPI := ^Byte(lTmp^.PropertyAttributes);
  +    exit __ElementsReadAttributes(var lPI, aIndexInList, aTypeFilter);
  +  end;
  +  exit nil;
  +end;
  +
  +method GetAttributesForEvent(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin 
  +  var lTmp := GetClassMetadata(aClass);
  +  if lTmp <> nil then begin
  +    var lPI := ^Byte(lTmp^.EventAttributes);
  +    exit __ElementsReadAttributes(var lPI, aIndexInList, aTypeFilter);
  +  end;
  +  exit nil;
  +end;
  +
  +method GetAttributesForField(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin 
  +  var lTmp := GetClassMetadata(aClass);
  +  if lTmp <> nil then begin
  +    var lPI := ^Byte(lTmp^.FieldAttributes);
  +    exit __ElementsReadAttributes(var lPI, aIndexInList, aTypeFilter);
  +  end;
  +  exit nil;
  +end;
  +
  +method GetAttributesForStaticField(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; 
  +begin 
  +  var lTmp := GetClassMetadata(aClass);
  +  if lTmp <> nil then begin
  +    var lPI := ^Byte(lTmp^.StaticFieldAttributes);
  +    exit __ElementsReadAttributes(var lPI, aIndexInList, aTypeFilter);
  +  end;
  +  exit nil;
  +end;
  +
  +
  +
   end.
  
positive.code:         if lTY <> __Elements_ProtoReadType.startgroup then begin  
            __Elements_ProtoSkipValue(var aAttributesPtr, lTY);
          end else begin
            loop begin
              var lParName: String;
              if not __Elements_ProtoReadHeader(var aAttributesPtr, out lKey, out lTY) then break;
              case lKey of 
                0: begin 
  
negative.code:   end;
    AttributeUsageAttribute = public __ElementsAttributeUsageAttribute;
  
  
  type
    AttributeData = ^Void;
  
  method __ElementsReadAttributes(var aAttributesPtr: ^Byte; aTargetParameter: Integer := 0; aTypeFilter: &Class): NSArray<Attribute>; public;
  method __ElementsReadAttribute(aAttributesPtr, aEnd: ^Byte; aTargetParameter: Integer; aTypeFilter: &Class): Attribute; public;
  method __ElementsGetAttributesBlockForFunction(aMethod: ^Void): ^Byte; public;
  method __ElementsGetAttributesBlockForMethod(aClass: &Class; aInstance: Boolean; aSel: SEL): ^Byte; public;
    
  
  type
    ElementsTypeMetadata = public record
    private
    public
      Size: IntPtr;
      CustomAttributes,
      PropertyAttributes,
      FieldAttributes,
      StaticFieldAttributes,
      EventAttributes: AttributeData;
      Events: ^ElementsEventsData;
      StaticFields: ^ElementsFieldsData;
    end;
    ElementsEventsData = public record
    private
    public
      Count, ElementSize: IntPtr;
      Data: array[0..0] of ElementsEventData;
    end;
    ElementsEventData = public record
    private
    public
      Name: ^AnsiChar;
      &Add,
      &Remove,
      &Raise: SEL;
    end;
    ElementsFieldsData = public record
    private
    public
      Count, ElementSize: IntPtr;
      Data: array[0..0] of ElementsFieldData;
    end;
    ElementsFieldData = public record
    private
    public
      Name: ^AnsiChar;
      FieldData: ^Void;
      FieldSignature: ^AnsiChar; 
    end;
    
    method GetClassMetadata(aClass: &Class): ^ElementsTypeMetadata; inline; public;
    method GetAttributesForType(aClass: &Class; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForFunction(aMethod: ^Void; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForFunctionResult(aMethod: ^Void; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForFunctionParameter(aMethod: ^Void; aTypeFilter: &Class; aIndex: Integer): NSArray<Attribute>; inline; public;
    method GetAttributesForMethod(aClass: &Class; aInstance: Boolean; aSel: SEL; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForMethodResult(aClass: &Class; aInstance: Boolean; aSel: SEL; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForMethodParameter(aClass: &Class; aInstance: Boolean; aSel: SEL; aTypeFilter: &Class; aIndex: Integer): NSArray<Attribute>; inline; public;
    method GetAttributesForProperty(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForEvent(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForField(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
    method GetAttributesForStaticField(aClass: &Class; aIndexInList: Integer; aTypeFilter: &Class): NSArray<Attribute>; inline; public;
  
  implementation
  
  constructor AttributeUsageAttribute(aValidOn: AttributeTargets);
  