beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(, null, null)
      handleNoType()
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(List)
        endMetadataStar(0)
        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(List, typeReference)
          beginTypeArguments(<)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(>)
            handleType(int, null)
          endTypeArguments(1, <, >)
          handleType(List, ?)
          handleIdentifier(a, formalParameterDeclaration)
          handleFormalParameterWithoutValue(,)
        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
        beginMetadataStar(bool)
        endMetadataStar(0)
        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(bool, typeReference)
          handleNoTypeArguments(?)
          handleType(bool, ?)
          handleIdentifier(b, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(a, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(a, !)
        handleNonNullAssertExpression(!)
        handleLiteralInt(0)
        handleIndexedExpression(null, [, ])
        handleExpressionStatement(;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(?)
        handleNoArguments(?)
        handleSend(a, ?)
        handleLiteralInt(0)
        handleIndexedExpression(?, [, ])
        handleExpressionStatement(;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(a, !)
        handleNonNullAssertExpression(!)
        handleLiteralInt(0)
        handleIndexedExpression(?, [, ])
        handleExpressionStatement(;)
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(!)
          handleNoArguments(!)
          handleSend(a, !)
          handleNonNullAssertExpression(!)
        endParenthesizedExpression(()
        handleLiteralInt(0)
        handleIndexedExpression(?, [, ])
        handleExpressionStatement(;)
        handleIdentifier(b, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(b, !)
        handleNonNullAssertExpression(!)
        beginConditionalExpression(?)
          handleNoTypeArguments([)
          handleLiteralInt(0)
          handleLiteralList(1, [, null, ])
          handleConditionalExpressionColon()
          handleLiteralInt(0)
        endConditionalExpression(?, :)
        handleExpressionStatement(;)
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(b, expression)
          handleNoTypeArguments(!)
          handleNoArguments(!)
          handleSend(b, !)
          handleNonNullAssertExpression(!)
        endParenthesizedExpression(()
        beginConditionalExpression(?)
          handleNoTypeArguments([)
          handleLiteralInt(0)
          handleLiteralList(1, [, null, ])
          handleConditionalExpressionColon()
          handleLiteralInt(0)
        endConditionalExpression(?, :)
        handleExpressionStatement(;)
      endBlockFunctionBody(6, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
