beginCompilationUnit(macro)
  beginMetadataStar(macro)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(macro)
    handleIdentifier(Class, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(macro, null, macro, null, null, null, null, null, null, Class)
      handleNoType(Class)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(macro, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(macro, })
  endTopLevelDeclaration(})
  beginMetadataStar(abstract)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
    handleIdentifier(Class, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(abstract, abstract, macro, null, null, null, null, null, null, Class)
      handleNoType(Class)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(abstract, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(abstract, })
  endTopLevelDeclaration(})
  beginMetadataStar(macro)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(macro)
    handleIdentifier(Class, classOrMixinDeclaration)
    handleNoTypeVariables(=)
    beginNamedMixinApplication(macro, null, macro, null, null, null, null, null, null, Class)
      handleIdentifier(Object, typeReference)
      handleNoTypeArguments(with)
      handleType(Object, null)
      beginTypeList(Mixin)
        handleIdentifier(Mixin, typeReference)
        handleNoTypeArguments(;)
        handleType(Mixin, null)
      endTypeList(1)
      handleNamedMixinApplicationWithClause(with)
    endNamedMixinApplication(macro, class, =, null, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(abstract)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
    handleIdentifier(Class, classOrMixinDeclaration)
    handleNoTypeVariables(=)
    beginNamedMixinApplication(abstract, abstract, macro, null, null, null, null, null, null, Class)
      handleIdentifier(Object, typeReference)
      handleNoTypeArguments(with)
      handleType(Object, null)
      beginTypeList(Mixin)
        handleIdentifier(Mixin, typeReference)
        handleNoTypeArguments(;)
        handleType(Mixin, null)
      endTypeList(1)
      handleNamedMixinApplicationWithClause(with)
    endNamedMixinApplication(abstract, class, =, null, ;)
  endTopLevelDeclaration(;)
endCompilationUnit(4, )
