Initial implementation of the symbolizer server and flutter-symbolizer-bot
Symbolizer infrastructure is responsible for extracing information about
native Flutter Engine crashes from user reports and symbolizing
these crashes using archived artifacts from Cloud Storage.
flutter-symbolizer-bot is a wrapper around this infrastructure
listening to comments on Flutter repository issues and executing
commands
Change-Id: Id1ec52ff570725e24d67b5cd6ff2db1a86b32c41
Reviewed-on: https://dart-review.googlesource.com/c/dart_ci/+/168960
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
diff --git a/github-label-notifier/functions/README.md b/github-label-notifier/functions/README.md
index 9407ddb..dfeeec0 100644
--- a/github-label-notifier/functions/README.md
+++ b/github-label-notifier/functions/README.md
@@ -5,6 +5,12 @@
It also can inspect newly opened issues for specific keywords and treat matches
as if a specific label was assigned to an issue.
+Newly created issues are also fed to `crash-symbolizer`'s `/symbolize` endpoint
+in attempt to extract and symbolize any native crashes.
+
+This function is also responsible for routing comments mentioning
+`@flutter-symbolizer-bot` to `crash-symbolizer`'s '/symbolize' endpoint.
+
# Testing
To run local tests use `test.sh` script from this folder.
@@ -22,6 +28,10 @@
[docs](https://sendgrid.com/docs/for-developers/partners/google/) for the
initial setup).
+Note: Function is connecting to `crash-symbolizer` GCE instance through
+[VPC Connector](https://cloud.google.com/functions/docs/networking/connecting-vpc)
+with name `cloud-run-to-gce`.
+
## Firestore
Firestore needs to contain `github-label-subscriptions` collection.
diff --git a/github-label-notifier/functions/deploy.sh b/github-label-notifier/functions/deploy.sh
index 0add644..825a8a3 100755
--- a/github-label-notifier/functions/deploy.sh
+++ b/github-label-notifier/functions/deploy.sh
@@ -26,5 +26,6 @@
# Deploy the function.
gcloud functions deploy githubWebhook --project dart-ci --source deploy --trigger-http \
+ --vpc-connector cloud-run-to-gce \
--runtime nodejs10 --memory 128MB \
--set-env-vars GITHUB_SECRET=$GITHUB_SECRET,SENDGRID_SECRET=$SENDGRID_SECRET
diff --git a/github-label-notifier/functions/lib/github_utils.dart b/github-label-notifier/functions/lib/github_utils.dart
index 6fea185..3f89192 100644
--- a/github-label-notifier/functions/lib/github_utils.dart
+++ b/github-label-notifier/functions/lib/github_utils.dart
@@ -6,6 +6,7 @@
library github_label_notifier.github_utils;
import 'dart:convert';
+import 'dart:typed_data';
import 'package:node_interop/buffer.dart';
import 'package:node_io/node_io.dart';
@@ -19,14 +20,22 @@
if (secret == null) {
throw 'GITHUB_SECRET is missing';
}
- final bodyHmac =
- crypto.createHmac('sha1', secret).update(jsonEncode(body)).digest('hex');
+ final bodyHmac = crypto.createHmac('sha1', secret).update(body).digest('hex');
return 'sha1=${bodyHmac}';
}
/// Validate that the given [body] and [signature] against `GITHUB_SECRET`
/// environment variable.
bool verifyEventSignature(dynamic body, String signature) {
+ final expectedSignature = signEvent(jsonEncode(body));
+ return signature.length == expectedSignature.length &&
+ crypto.timingSafeEqual(
+ Buffer.from(signature), Buffer.from(expectedSignature));
+}
+
+/// Validate that the given [body] and [signature] against `GITHUB_SECRET`
+/// environment variable.
+bool verifyEventSignatureRaw(Uint8List body, String signature) {
final expectedSignature = signEvent(body);
return signature.length == expectedSignature.length &&
crypto.timingSafeEqual(
diff --git a/github-label-notifier/functions/lib/node_crypto.dart b/github-label-notifier/functions/lib/node_crypto.dart
index 0fa81e8..add1b5b 100644
--- a/github-label-notifier/functions/lib/node_crypto.dart
+++ b/github-label-notifier/functions/lib/node_crypto.dart
@@ -33,7 +33,7 @@
/// Append data to the content of this [Hmac].
///
/// See [docs](https://nodejs.org/api/crypto.html#crypto_hmac_update_data_inputencoding).
- external Hmac update(String data);
+ external Hmac update(Object data);
/// Compute the digest of the content accumulated via [update].
///
diff --git a/github-label-notifier/functions/lib/sendgrid.dart b/github-label-notifier/functions/lib/sendgrid.dart
index 588089d..a45ffa5 100644
--- a/github-label-notifier/functions/lib/sendgrid.dart
+++ b/github-label-notifier/functions/lib/sendgrid.dart
@@ -14,7 +14,7 @@
final _SendgridModule _sendgrid = (() {
// Load and configure the module.
- final _SendgridModule module = require('@sendgrid/mail');
+ final module = require('@sendgrid/mail') as _SendgridModule;
module.setApiKey(Platform.environment['SENDGRID_SECRET']);
// To enable offline testing we redirect all requests to our mock server.
diff --git a/github-label-notifier/functions/node/index.dart b/github-label-notifier/functions/node/index.dart
index 77f6481..87946e0 100644
--- a/github-label-notifier/functions/node/index.dart
+++ b/github-label-notifier/functions/node/index.dart
@@ -2,14 +2,30 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:convert';
+import 'dart:typed_data';
import 'package:firebase_functions_interop/firebase_functions_interop.dart';
+import 'package:js/js_util.dart';
import 'package:node_interop/node_interop.dart';
import 'package:node_io/node_io.dart';
+import 'package:node_http/node_http.dart' as http;
import 'package:github_label_notifier/github_utils.dart';
import 'package:github_label_notifier/sendgrid.dart' as sendgrid;
import 'package:github_label_notifier/subscriptions_db.dart' as db;
+import 'package:symbolizer/model.dart';
+import 'package:symbolizer/parser.dart';
+import 'package:symbolizer/bot.dart';
+
+final String symbolizerServer = Platform.environment['SYMBOLIZER_SERVER'] ??
+ 'crash-symbolizer.c.dart-ci.internal:4040';
+
+extension on ExpressHttpRequest {
+ Uint8List get rawBody {
+ if (!hasProperty(nativeInstance, 'rawBody')) return null;
+ return getProperty(nativeInstance, 'rawBody');
+ }
+}
void main() {
db.ensureInitialized();
@@ -51,23 +67,25 @@
final delivery = getRequiredHeaderValue(request, 'x-github-delivery');
final body = request.body;
- if (!verifyEventSignature(body, signature)) {
+ if (!verifyEventSignatureRaw(request.rawBody, signature)) {
throw WebHookError(
HttpStatus.unauthorized, 'Failed to validate the signature');
}
// Event has passed the validation. Dispatch it to the handler.
- print('Received event from GitHub: $delivery $event');
+ print('Received event from GitHub: $delivery $event ${body['action']}');
await eventHandlers[event]?.call(body);
request.response.statusCode = HttpStatus.ok;
request.response.writeln('OK: ${event}');
}
-typedef Future<void> GitHubEventHandler(Map<String, dynamic> event);
+typedef GitHubEventHandler = Future<void> Function(Map<String, dynamic> event);
final eventHandlers = <String, GitHubEventHandler>{
'issues': (event) => issueActionHandlers[event['action']]?.call(event),
+ 'issue_comment': (event) =>
+ commentActionHandlers[event['action']]?.call(event)
};
final issueActionHandlers = <String, GitHubEventHandler>{
@@ -75,6 +93,10 @@
'opened': onIssueOpened,
};
+final commentActionHandlers = <String, GitHubEventHandler>{
+ 'created': onIssueCommentCreated,
+};
+
/// Handler for the 'labeled' issue event which triggers whenever an
/// issue is labeled with a new label.
///
@@ -117,7 +139,7 @@
Sent by dart-github-label-notifier.web.app
''',
html: '''
-<p><strong><a href="${issueUrl}">${escape(issueTitle)}</a> (${escape(repositoryName)}#${escape(issueNumber)})</strong></p>
+<p><strong><a href="${issueUrl}">${escape(issueTitle)}</a> (${escape(repositoryName)}#${escape(issueNumber.toString())})</strong></p>
<p>Reported by <a href="${issueReporterUrl}">${escape(issueReporterUsername)}</a></p>
<p>Labeled <strong>${escape(labelName)}</strong> by <a href="${senderUrl}">${escape(senderUser)}</a></p>
<hr>
@@ -131,10 +153,20 @@
/// The handler will search the body of the open issue for specific keywords
/// and send emails to all subscribers to a specific label.
Future<void> onIssueOpened(Map<String, dynamic> event) async {
+ final symbolizedCrashes = <SymbolizationResult>[];
+
final repositoryName = event['repository']['full_name'];
final subscription = await db.lookupKeywordSubscription(repositoryName);
- final match = subscription?.match(event['issue']['body']);
+ if (subscription != null &&
+ subscription.keywords.contains('crash') &&
+ containsCrash(event['issue']['body'])) {
+ symbolizedCrashes.addAll(await _trySymbolize(event['issue']));
+ }
+
+ final match = symbolizedCrashes.isNotEmpty
+ ? 'crash'
+ : subscription?.match(event['issue']['body']);
if (match == null) {
return;
}
@@ -152,6 +184,40 @@
final escape = htmlEscape.convert;
+ var symbolizedCrashesText = '', symbolizedCrashesHtml = '';
+ if (symbolizedCrashes.isNotEmpty) {
+ symbolizedCrashesText = [
+ '',
+ ...symbolizedCrashes.expand((r) => [
+ if (r.symbolized != null)
+ '# engine ${r.engineBuild.engineHash} ${r.engineBuild.variant.pretty} crash'
+ else
+ '# engine crash',
+ for (var note in r.notes)
+ if (note.message != null)
+ '# ${noteMessage[note.kind]}: ${note.message}'
+ else
+ '# ${noteMessage[note.kind]}',
+ r.symbolized ?? r.crash.frames.toString(),
+ ]),
+ ''
+ ].join('\n');
+ symbolizedCrashesHtml = symbolizedCrashes
+ .expand((r) => [
+ if (r.symbolized != null)
+ '<p>engine ${r.engineBuild.engineHash} ${r.engineBuild.variant.pretty} crash</p>'
+ else
+ '<p>engine crash</p>',
+ for (var note in r.notes)
+ if (note.message != null)
+ '<em>${noteMessage[note.kind]}: <pre>${escape(note.message)}</pre></em>'
+ else
+ '<em>${noteMessage[note.kind]}</em>',
+ '<pre>${escape(r.symbolized ?? r.crash.frames.toString())}</pre>',
+ ])
+ .join('');
+ }
+
await sendgrid.sendMultiple(
from: 'noreply@dart.dev',
to: subscribers,
@@ -162,21 +228,37 @@
Reported by ${issueReporterUsername}
Matches keyword: ${match}
-
+${symbolizedCrashesText}
You are getting this mail because you are subscribed to label ${subscription.label}.
--
Sent by dart-github-label-notifier.web.app
''',
html: '''
-<p><strong><a href="${issueUrl}">${escape(issueTitle)}</a> (${escape(repositoryName)}#${escape(issueNumber)})</strong></p>
+<p><strong><a href="${issueUrl}">${escape(issueTitle)}</a> (${escape(repositoryName)}#${escape(issueNumber.toString())})</strong></p>
<p>Reported by <a href="${issueReporterUrl}">${escape(issueReporterUsername)}</a></p>
<p>Matches keyword: <b>${match}</b></p>
+${symbolizedCrashesHtml}
<p>You are getting this mail because you are subscribed to label ${subscription.label}</p>
<hr>
<p>Sent by <a href="https://dart-github-label-notifier.web.app/">GitHub Label Notifier</a></p>
''');
}
+Future<void> onIssueCommentCreated(Map<String, dynamic> event) async {
+ final body = event['comment']['body'];
+
+ if (Bot.isCommand(body)) {
+ final response = await http.post(
+ 'http://$symbolizerServer/command',
+ body: jsonEncode(event),
+ );
+ if (response.statusCode != HttpStatus.ok) {
+ throw WebHookError(HttpStatus.internalServerError,
+ 'Failed to process ${event['comment']['html_url']}: ${response.body}');
+ }
+ }
+}
+
class WebHookError {
final int statusCode;
final String message;
@@ -194,3 +276,22 @@
(throw WebHookError(
HttpStatus.badRequest, 'Missing ${header} header value.'));
}
+
+Future<List<SymbolizationResult>> _trySymbolize(
+ Map<String, dynamic> body) async {
+ try {
+ final response = await http
+ .post(
+ 'http://$symbolizerServer/symbolize',
+ body: jsonEncode(body),
+ )
+ .timeout(const Duration(seconds: 20));
+ return [
+ for (var crash in (jsonDecode(response.body) as List))
+ SymbolizationResult.fromJson(crash)
+ ];
+ } catch (e, st) {
+ console.error('Symbolizer failed with $e: $st');
+ return [];
+ }
+}
diff --git a/github-label-notifier/functions/node/index.test.dart b/github-label-notifier/functions/node/index.test.dart
index 73ab0af..aa7f104 100644
--- a/github-label-notifier/functions/node/index.test.dart
+++ b/github-label-notifier/functions/node/index.test.dart
@@ -12,6 +12,7 @@
import 'package:node_interop/node_interop.dart';
import 'package:node_interop/util.dart' show dartify, jsify;
import 'package:node_io/node_io.dart' hide HttpServer;
+import 'package:symbolizer/model.dart';
import 'package:test/test.dart';
import 'package:github_label_notifier/github_utils.dart';
@@ -28,6 +29,9 @@
HttpServer sendgridMockServer;
final sendgridRequests = <SendgridRequest>[];
+ HttpServer symbolizerServer;
+ final symbolizerCommands = <String>[];
+
setUpAll(() async {
// Populate firestore with mock data.
final firestore = FirebaseAdmin.instance
@@ -62,46 +66,121 @@
'jit',
'aot',
'third_party/dart',
+ 'crash',
],
'label': 'special-label',
}));
- // Start mock SendGrid server at the address/port specified in
- // SENDGRID_MOCK_SERVER environment variable.
- // This server will simply record headers and bodies of all requests
- // it receives in the [sendgridRequests] variable.
- sendgridMockServer = http.createServer(allowInterop((rq, rs) {
- final body = [];
- rq.on('data', allowInterop((chunk) {
- body.add(chunk);
- }));
- rq.on('end', allowInterop(() {
- sendgridRequests.add(SendgridRequest(
- headers: dartify(rq.headers),
- body: jsonDecode(_bufferToString(Buffer.concat(body)))));
+ {
+ // Start mock SendGrid server at the address/port specified in
+ // SENDGRID_MOCK_SERVER environment variable.
+ // This server will simply record headers and bodies of all requests
+ // it receives in the [sendgridRequests] variable.
+ sendgridMockServer = http.createServer(allowInterop((rq, rs) {
+ final body = [];
+ rq.on('data', allowInterop((chunk) {
+ body.add(chunk);
+ }));
+ rq.on('end', allowInterop(() {
+ sendgridRequests.add(SendgridRequest(
+ headers: dartify(rq.headers),
+ body: jsonDecode(_bufferToString(Buffer.concat(body)))));
- // Reply with 200 OK.
- rs.writeHead(200, 'OK', jsify({'Content-Type': 'text/plain'}));
- rs.write('OK');
- rs.end();
+ // Reply with 200 OK.
+ rs.writeHead(200, 'OK', jsify({'Content-Type': 'text/plain'}));
+ rs.write('OK');
+ rs.end();
+ }));
}));
- }));
- final serverAddress = Platform.environment['SENDGRID_MOCK_SERVER'];
- if (serverAddress == null) {
- throw 'SENDGRID_MOCK_SERVER environment variable is not set';
+ final serverAddress = Platform.environment['SENDGRID_MOCK_SERVER'];
+ if (serverAddress == null) {
+ throw 'SENDGRID_MOCK_SERVER environment variable is not set';
+ }
+ final serverUri = Uri.parse('http://$serverAddress');
+ sendgridMockServer.listen(serverUri.port, serverUri.host);
}
- final serverUri = Uri.parse('http://$serverAddress');
- sendgridMockServer.listen(serverUri.port, serverUri.host);
+
+ {
+ // Start mock Symbolizer server at the address/port specified in
+ // SYMBOLIZER_SERVER environment variable.
+ symbolizerServer = http.createServer(allowInterop((rq, rs) {
+ final body = [];
+ rq.on('data', allowInterop((chunk) {
+ body.add(chunk);
+ }));
+ rq.on('end', allowInterop(() {
+ switch (Uri.parse(rq.url).path) {
+ case '/symbolize':
+ // Reply with symbolized crash.
+ rs.writeHead(
+ 200, 'OK', jsify({'Content-Type': 'application/json'}));
+ rs.write(jsonEncode([
+ SymbolizationResult(
+ crash: Crash(
+ engineVariant: EngineVariant(
+ arch: 'arm', os: 'ios', mode: 'debug'),
+ format: 'native',
+ frames: [
+ CrashFrame.ios(
+ no: '00',
+ binary: 'BINARY',
+ pc: 0x10042,
+ symbol: '0x',
+ offset: 42,
+ location: '',
+ )
+ ]),
+ engineBuild: EngineBuild(
+ engineHash: 'aaabbb',
+ variant:
+ EngineVariant(arch: 'arm', os: 'ios', mode: 'debug'),
+ ),
+ symbolized: 'SYMBOLIZED_STACK_HERE')
+ ]));
+ rs.end();
+ break;
+ case '/command':
+ symbolizerCommands.add(
+ jsonDecode(_bufferToString(Buffer.concat(body)))['comment']
+ ['body']);
+
+ // Reply with 200 OK.
+ rs.writeHead(200, 'OK', jsify({'Content-Type': 'text/plain'}));
+ rs.write('OK');
+ rs.end();
+ break;
+ default:
+ // Reply with 404.
+ rs.writeHead(
+ 404, 'Not Found', jsify({'Content-Type': 'text/plain'}));
+ rs.write('Not Found');
+ rs.end();
+ break;
+ }
+ }));
+ }));
+
+ final serverAddress = Platform.environment['SYMBOLIZER_SERVER'];
+ if (serverAddress == null) {
+ throw 'SENDGRID_MOCK_SERVER environment variable is not set';
+ }
+ final serverUri = Uri.parse('http://$serverAddress');
+ symbolizerServer.listen(serverUri.port, serverUri.host);
+ }
});
setUp(() {
sendgridRequests.clear();
+ symbolizerCommands.clear();
});
tearDownAll(() async {
// Shutdown the mock SendGrid server.
await sendgridMockServer.close();
+
+ // Shutdown the mock symbolizer.
+ await symbolizerServer.close();
});
// Helper to send a mock GitHub event to the locally running instance of the
@@ -124,8 +203,9 @@
headers['X-GitHub-Event'] = event;
}
+ final encodedBody = jsonEncode(body);
if (signature != '') {
- headers['X-Hub-Signature'] = signature ?? signEvent(body);
+ headers['X-Hub-Signature'] = signature ?? signEvent(encodedBody);
}
// Note: there does not seem to be a good way to get a trigger uri for
@@ -133,7 +213,7 @@
return await http_client.post(
'http://localhost:5001/$projectId/us-central1/githubWebhook',
headers: headers,
- body: jsonEncode(body));
+ body: encodedBody);
}
// Create mock event body.
@@ -186,8 +266,37 @@
},
};
+ Map<String, dynamic> makeIssueCommentEvent(
+ {int number = 1,
+ String repositoryName = 'dart-lang/webhook-test',
+ String issueBody =
+ 'This is an amazing ../third_party/dart/runtime/vm solution',
+ String commentBody = 'comment body goes here',
+ String authorAssociation = 'NONE'}) =>
+ {
+ 'action': 'created',
+ 'issue': {
+ 'html_url':
+ 'https://github.com/dart-lang/webhook-test/issues/${number}',
+ 'number': number,
+ 'title': 'TEST ISSUE TITLE',
+ 'body': issueBody,
+ 'user': {
+ 'login': 'hest',
+ 'html_url': 'https://github.com/hest',
+ },
+ },
+ 'comment': {
+ 'body': commentBody,
+ 'author_association': authorAssociation,
+ },
+ 'repository': {
+ 'full_name': 'dart-lang/webhook-test',
+ },
+ };
+
test('signing', () {
- expect(signEvent(makeLabeledEvent(labelName: 'bug')),
+ expect(signEvent(jsonEncode(makeLabeledEvent(labelName: 'bug'))),
equals('sha1=76af51cdb9c7a43b146d4df721ac8f83e53182e5'));
});
@@ -347,6 +456,35 @@
expect(rs.statusCode, equals(HttpStatus.ok));
expect(sendgridRequests.length, equals(0));
});
+
+ test('ok - issue opened - crash', () async {
+ final rs = await sendEvent(body: makeIssueOpenedEvent(body: '''
+I had Flutter engine c_r_a_s_h on me with the following message
+
+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+Such c_r_a_s_h
+Much information
+'''));
+ expect(rs.statusCode, equals(HttpStatus.ok));
+ expect(sendgridRequests.length, equals(1));
+ final rq = sendgridRequests.first;
+ final plainTextBody = rq.body['content']
+ .firstWhere((c) => c['type'] == 'text/plain')['value'];
+ expect(plainTextBody, contains('engine aaabbb ios-arm-debug crash'));
+ expect(plainTextBody, contains('SYMBOLIZED_STACK_HERE'));
+ });
+
+ test('ok - issue comment - forward bot command', () async {
+ final command = '''@flutter-symbolizer-bot aaa bbb''';
+ final rs = await sendEvent(
+ event: 'issue_comment',
+ body: makeIssueCommentEvent(
+ commentBody: command,
+ authorAssociation: 'MEMBER',
+ ));
+ expect(rs.statusCode, equals(HttpStatus.ok));
+ expect(symbolizerCommands, equals([command]));
+ });
}
/// Helper method to convert a [Buffer] to a [String].
@@ -363,4 +501,6 @@
final Map<String, dynamic> body;
SendgridRequest({this.headers, this.body});
+
+ Map<String, dynamic> toJson() => {'headers': headers, 'body': body};
}
diff --git a/github-label-notifier/functions/pubspec.yaml b/github-label-notifier/functions/pubspec.yaml
index 69e0c32..d631086 100644
--- a/github-label-notifier/functions/pubspec.yaml
+++ b/github-label-notifier/functions/pubspec.yaml
@@ -3,9 +3,10 @@
Cloud Function that can serve as a GitHub WebHook which sends notifications
to developers subscribed to a particular label.
version: 0.0.1
+publish_to: none
environment:
- sdk: '>=2.3.0 <3.0.0'
+ sdk: '>=2.6.0 <3.0.0'
dependencies:
firebase_functions_interop: ^1.0.0
@@ -14,6 +15,8 @@
node_io: ^1.0.1
js: any
test: any
+ symbolizer:
+ path: ../symbolizer
dev_dependencies:
# Needed to compile Dart to valid Node.js module.
diff --git a/github-label-notifier/functions/run.sh b/github-label-notifier/functions/run.sh
new file mode 100755
index 0000000..d17724c
--- /dev/null
+++ b/github-label-notifier/functions/run.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+set -e
+
+export SYMBOLIZER_SERVER=localhost:4040
+
+# Don't use real SendGrid servers during testing - instead redirect API
+# calls to a mock server.
+export SENDGRID_MOCK_SERVER=localhost:8151
+
+# Note: these are randomly generated secrets purely for testing purposes.
+# They should not be used during deployment.
+export GITHUB_SECRET=f32205e9a6d0b8157dcc1935af96aa9fe5719109
+export SENDGRID_SECRET=SG.I9JN-n6oQb-X686126S.qJasdasdasda_lyadasd
+
+pub run build_runner build --output=build
+
+firebase emulators:start --project github-label-notifier
diff --git a/github-label-notifier/functions/test.sh b/github-label-notifier/functions/test.sh
index 8cc82f8..d5eb226 100755
--- a/github-label-notifier/functions/test.sh
+++ b/github-label-notifier/functions/test.sh
@@ -9,6 +9,10 @@
# calls to a mock server.
export SENDGRID_MOCK_SERVER=localhost:8151
+# Similarly don't use real symbolizer server. We are going to start our own
+# mock server.
+export SYMBOLIZER_SERVER=localhost:4040
+
# Note: these are randomly generated secrets purely for testing purposes.
# They should not be used during deployment.
export GITHUB_SECRET=f32205e9a6d0b8157dcc1935af96aa9fe5719109
diff --git a/github-label-notifier/symbolizer/.gitignore b/github-label-notifier/symbolizer/.gitignore
new file mode 100644
index 0000000..23a5b01
--- /dev/null
+++ b/github-label-notifier/symbolizer/.gitignore
@@ -0,0 +1,20 @@
+# Files and directories created by pub
+.dart_tool/
+.packages
+# Remove the following pattern if you wish to check in your lock file
+pubspec.lock
+
+# Conventional directory for build outputs
+build/
+
+# Directory created by dartdoc
+doc/api/
+
+# Configuration containing private tokens
+.*.json
+symbols-cache
+tools
+deploy
+
+# We commit our generated files.
+!*.g.dart
diff --git a/github-label-notifier/symbolizer/README-bot.md b/github-label-notifier/symbolizer/README-bot.md
new file mode 100644
index 0000000..277a8b3
--- /dev/null
+++ b/github-label-notifier/symbolizer/README-bot.md
@@ -0,0 +1,110 @@
+<!--
+This is flutter-symbolizer-bot README file. If you are making changes to
+this file update https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md
+as well
+-->
+
+### Hi there 👋
+
+I am a bot that can symbolize Flutter Engine crashes. If you have any bug
+reports or questions contact @mraleph
+
+👉 **I only answer to commands of public members of Flutter GitHub org!** To
+check whether your membership is public just open your profile in Incognito
+Window and check if Flutter org badge is visible. Read more about org membership
+privacy settings [here](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/publicizing-or-hiding-organization-membership).
+
+I can automatically detect the following crashes:
+
+- Android crashes marked with `*** *** *** ... *** *** ***` line.
+- iOS crashes starting with `Incident Identifier: ...` line.
+
+For symbolization I would need to know engine commit hash and build mode. I
+support extracting engine version from `flutter doctor` output (with or
+without `-v`) and I can sometimes guess build mode (e.g. by using `Build ID`
+included into stack traces on Android).
+
+However often reports don't include all required information or don't use native
+format so you would need to provide me with additional hints, see
+[Commands](#commands) below.
+
+### Commands
+
+When you mention me in the comment you can include a number of
+_symbolization overrides_ which would fill in the gaps in information for me.
+
+```
+@flutter-symbolizer-bot [engine#<sha>|flutter#<commit>] [profile|release|debug] [x86|arm|arm64|x64]
+```
+
+**Important ⚠️**: `@flutter-symbolizer-bot` **MUST** be the very first thing
+in your comment.
+
+- `engine#<sha>` allows to specify which _engine commit_ I should use;
+- `flutter#<commit>` allows to specify which Flutter Framework commit I
+ should use (this is just another way of specifiying engine commit);
+- `profile|release|debug` tells me which _build mode_ I should use (iOS builds
+ only have `release` symbols available though);
+- `x86|arm|arm64|x64` tells me which _architecture_ I should use.
+
+You can point me to a specific comment by including the link to it:
+
+```
+@flutter-symbolizer-bot [link|this]
+```
+
+- `link`, which looks like
+ `https://github.com/flutter/flutter/issues/ISSUE#issue(comment)?-ID`, asks me
+ to look for crashes in the specific comment;
+- `this` asks me to symbolize content of
+ _the comment which contains the command_.
+
+If your backtrace comes from Crashlytics with lines that look like this:
+
+```
+4 Flutter 0x106013134 (Missing)
+```
+
+You would need to tell me `@flutter-symbolizer-bot force ios [arm64|arm] [engine#<sha>|flutter#<commit>] link|this`:
+
+- `force ios` tells me to ignore native crash markers and simply look for lines
+ that match `ios` backtrace format;
+- `[arm64|arm]` gives me information about architecture, which is otherwise
+ missing from the report;
+- `engine#sha|flutter#commit` gives me engine version;
+- `link|this` specifies which comment to symbolize. Note ⚠️: because this is a
+ departure from native crash report formats you *must* tell me which comment
+ to symbolize manually
+
+If your backtrace has lines that look like this:
+
+```
+0x0000000105340708(Flutter + 0x002b4708)
+```
+
+You would need to tell me `@flutter-symbolizer-bot internal [arm64|arm] [engine#<sha>|flutter#<commit>] link|this`:
+
+- `internal` tells me to ignore native crash markers and look for lines that
+ match _internal_ backtrace format.
+
+### Note about Relative PCs
+
+To symbolize stack trace correctly I need to know PC relative to binary image
+load base. Native crash formats usually include this information:
+
+- On Android `pc` column actually contains relative PCs rather then absolute.
+ Though Android versions prior to Android 11 have issues with their unwinder
+ which makes these relative PCs skewed in different ways (see
+ [this bug](https://github.com/android/ndk/issues/1366) for more information).
+ I try my best to correct for these known issues;
+- On iOS I am looking for lines like this `Flutter + <rel-pc>` which gives me
+ necessary information.
+
+Some crash formats (Crashlytics) do not contain neither load base nor relative
+PCs. In this case I try to determine load base heuristically based on the set
+of return addresses available in the backtrace: I look through Flutter Engine
+binary for all call sites and then iterate through potential load bases to see
+if one of them makes all of PCs present in the backtrace fall onto callsites.
+The pattern of call sites in the binary is often unique enough for me to be
+able to determine a single possible load base based on 3-4 unique return
+addresses.
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/README.md b/github-label-notifier/symbolizer/README.md
new file mode 100644
index 0000000..ea09771
--- /dev/null
+++ b/github-label-notifier/symbolizer/README.md
@@ -0,0 +1,122 @@
+This folder contains implementation of symbolization tooling capable of
+extracting Android and iOS crashes from plain text comments on GitHub and
+then automatically symbolize these crash reports using Flutter Engine symbols
+stored in the Cloud Storage.
+
+# `bin/server.dart`
+
+Server exposing simple HTTP API to this functionality. It has two endpoints:
+
+- `POST /symbolize` with GitHub's `issue` JSON payload runs symbolization on the
+ issue's body and returns result as a JSON serialized list of
+ `SymbolizationResult`.
+- `POST /command` with GitHub's [`issue_comment`](https://docs.github.com/en/free-pro-team@latest/developers/webhooks-and-events/webhook-events-and-payloads#issue_comment)
+ payload executes the given comment as a bot command (if it represents one).
+
+Note: the server itself does not listen to GitHub events - instead there is a
+Cloud Function exposed as a GitHub WebHook which routes relevant
+`issue_comment` events to it.
+
+# Scripts
+
+## `bin/configure.dart`
+
+Creates `.config.json` with authorization tokens. It is recommended to run
+this script to at least configure GitHub OAuth token to ensure that
+you don't hit GitHub's API quota limits for unauthorized users.
+
+```console
+$ bin/configure.dart --github-token ... --sendgrid-token ... --failure-email ...
+```
+
+## `bin/command.dart`
+
+```console
+$ bin/command.dart [--act] <issue-number> 'keywords*'
+```
+
+Execute the given string of keywords as a `@flutter-symbolizer-bot` command in
+context of the issue with the given `issue-number` number.
+
+By default would simply print `@flutter-symbolizer-bot` response to stdout.
+
+If `--act` is passed then bot would actually post a comment with its response
+to the issue using GitHub OAuth token from `.config.json`.
+
+## `bin/symbolize.dart`
+
+```console
+$ bin/symbolize.dart <input-file> 'keywords*'
+```
+
+Symbolize contents of the given file using overrides specified through keywords.
+
+# Development
+
+## Tokens
+
+You would at minimum need GitHub OAuth token to run test - otherwise they
+hit GitHub API limits for unauthorized users and timeout.
+
+Run `bin/configure.dart` to create `.config.json`.
+
+```
+bin/configure.dart --github-token ... --sendgrid-token ... --failure-email ...
+```
+
+## NDK tooling
+
+To run tests or scripts locally you would need to create `tools` folder
+containing a small subset of NDK tooling. This is done by running
+
+```console
+$ ./get-tools-from-ndk.sh <path-to-ndk>
+```
+
+## Changing `model.dart`
+
+We use [`freezed`](https://pub.dev/packages/freezed) to define our model
+classes. To regenerate `model.g.dart` and `mode.freezed.dart` after editing
+`model.dart` run:
+
+```console
+$ pub run build_runner build
+```
+
+# Testing
+
+```console
+$ pub run test -j1 --no-chain-stack-traces
+```
+
+- `-j1` is needed to avoid racy access to symbols cache from multiple
+ tests
+- `--no-chain-stack-traces` needed to avoid timeouts caused by
+ stack trace chaining overheads.
+
+To update expectation files set `REGENERATE_EXPECTATIONS` environment
+variable to `true` (`export REGENERATE_EXPECTATIONS=true`).
+
+# Deployment
+
+Bot is running on `crash-symbolizer` Compute Engine instance and is kept
+alive by `superviserd`. The GCE instance is not directly reachable from
+the outside world. To deploy a new version run:
+
+```console
+$ GITHUB_TOKEN=... SENDGRID_TOKEN=... FAILURE_EMAIL=... ./deploy.sh
+```
+
+- `GITHUB_TOKEN` provides OAuth token for `flutter-symbolizer-bot` account;
+- `SENDGRID_TOKEN` provides SendGrid API token
+- `FAILURE_EMAIL` configures email that bot should report exceptions to.
+- Under certain conditions your machine might not be able to connect to
+ GCE instance. In this case you will need to proxy your deployment through
+ another machine that *can* connect to the instance. You can specify
+ this "proxy" machine via `DEPLOYMENT_PROXY`.
+
+## SDK version
+
+We deploy the code in form of Kernel binary - which means your local SDK
+needs to match the version of Dart SDK installed on `crash-symbolizer`.
+Deployment script will verify this for you.
diff --git a/github-label-notifier/symbolizer/analysis_options.yaml b/github-label-notifier/symbolizer/analysis_options.yaml
new file mode 100644
index 0000000..ab43a2d
--- /dev/null
+++ b/github-label-notifier/symbolizer/analysis_options.yaml
@@ -0,0 +1,16 @@
+# Defines a default set of lint rules enforced for
+# projects at Google. For details and rationale,
+# see https://github.com/dart-lang/pedantic#enabled-lints.
+include: package:pedantic/analysis_options.yaml
+
+# For lint rules and documentation, see http://dart-lang.github.io/linter/lints.
+# Uncomment to specify additional rules.
+linter:
+ rules:
+ - prefer_final_locals
+
+analyzer:
+ errors:
+ missing_required_param: error
+# exclude:
+# - path/to/excluded/files/**
diff --git a/github-label-notifier/symbolizer/bin/command.dart b/github-label-notifier/symbolizer/bin/command.dart
new file mode 100755
index 0000000..2ac4e90
--- /dev/null
+++ b/github-label-notifier/symbolizer/bin/command.dart
@@ -0,0 +1,74 @@
+#!/usr/bin/env dart
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:github/github.dart';
+import 'package:logging/logging.dart';
+import 'package:sendgrid_mailer/sendgrid_mailer.dart';
+import 'package:symbolizer/bot.dart';
+import 'package:symbolizer/config.dart';
+import 'package:symbolizer/ndk.dart';
+import 'package:symbolizer/symbolizer.dart';
+import 'package:symbolizer/symbols.dart';
+
+const isDev = bool.fromEnvironment('DEV');
+
+final bindHostname = isDev
+ ? InternetAddress.loopbackIPv4
+ : 'crash-symbolizer.c.dart-ci.internal';
+
+final log = Logger('server');
+
+final config = loadConfigFromFile();
+
+final argParser = ArgParser(allowTrailingOptions: false)
+ ..addFlag(
+ 'act',
+ help: 'Post comment on GitHub (by default '
+ 'results are printed into stdout instead)',
+ negatable: false,
+ defaultsTo: false,
+ );
+
+Future<void> main(List<String> args) async {
+ final opts = argParser.parse(args);
+ if (opts.rest.length != 2) {
+ print('''Usage: command.dart [--act] <issue-number> <command>
+${argParser.usage}''');
+ exit(1);
+ }
+ final issueNumber = int.parse(opts.rest[0]);
+ final command = opts.rest[1];
+
+ Logger.root.level = Level.ALL;
+ Logger.root.onRecord.listen((record) {
+ print('${record.level.name}: ${record.time}: ${record.message}');
+ });
+
+ final mailer = Mailer(config.sendgridToken);
+ final ndk = Ndk();
+ final symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
+ final github = GitHub(auth: Authentication.withToken(config.githubToken));
+
+ final symbolizer = Symbolizer(symbols: symbols, ndk: ndk, github: github);
+ final bot = Bot(
+ github: github,
+ symbolizer: symbolizer,
+ mailer: mailer,
+ failuresEmail: config.failureEmail,
+ dryRun: !opts['act'],
+ );
+
+ final repo = RepositorySlug('flutter', 'flutter');
+ await bot.executeCommand(
+ repo,
+ await github.issues.get(repo, issueNumber),
+ IssueComment(body: '${Bot.accountMention} ${command}'),
+ authorized: true,
+ );
+ github.dispose();
+}
diff --git a/github-label-notifier/symbolizer/bin/configure.dart b/github-label-notifier/symbolizer/bin/configure.dart
new file mode 100755
index 0000000..79d27f6
--- /dev/null
+++ b/github-label-notifier/symbolizer/bin/configure.dart
@@ -0,0 +1,39 @@
+#!/usr/bin/env dart
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:symbolizer/model.dart';
+
+final parser = ArgParser()
+ ..addOption('github-token',
+ help: 'GitHub OAuth token',
+ defaultsTo: Platform.environment['GITHUB_TOKEN'])
+ ..addOption('sendgrid-token',
+ help: 'SendGrid API token',
+ defaultsTo: Platform.environment['SENDGRID_TOKEN'])
+ ..addOption('failure-email',
+ help: 'Email for failure reports',
+ defaultsTo: Platform.environment['FAILURE_EMAIL'])
+ ..addOption('output', help: 'Config to write', defaultsTo: '.config.json');
+
+void main(List<String> args) {
+ final opts = parser.parse(args);
+ for (var opt in ['github-token', 'sendgrid-token', 'failure-email']) {
+ if (opts[opt].isEmpty) {
+ throw 'Pass non-empty value via --${opt} or through'
+ ' ${opt.toUpperCase().replaceAll('-', '_')} environment variable';
+ }
+ }
+
+ final config = ServerConfig(
+ githubToken: opts['github-token'],
+ sendgridToken: opts['sendgrid-token'],
+ failureEmail: opts['failure-email'],
+ );
+ File(opts['output']).writeAsStringSync(jsonEncode(config));
+}
diff --git a/github-label-notifier/symbolizer/bin/server.dart b/github-label-notifier/symbolizer/bin/server.dart
new file mode 100755
index 0000000..050e622
--- /dev/null
+++ b/github-label-notifier/symbolizer/bin/server.dart
@@ -0,0 +1,52 @@
+#!/usr/bin/env dart
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:github/github.dart';
+import 'package:logging/logging.dart';
+import 'package:sendgrid_mailer/sendgrid_mailer.dart';
+import 'package:symbolizer/bot.dart';
+import 'package:symbolizer/config.dart';
+import 'package:symbolizer/ndk.dart';
+import 'package:symbolizer/symbolizer.dart';
+import 'package:symbolizer/symbols.dart';
+import 'package:symbolizer/server.dart';
+
+const isDev = bool.fromEnvironment('DEV');
+
+final bindHostname = isDev
+ ? InternetAddress.loopbackIPv4
+ : 'crash-symbolizer.c.dart-ci.internal';
+
+final log = Logger('server');
+
+final config = loadConfigFromFile();
+
+Future<void> main() async {
+ Logger.root.level = Level.ALL;
+ Logger.root.onRecord.listen((record) {
+ print('${record.level.name}: ${record.time}: ${record.message}');
+ });
+
+ final mailer = Mailer(config.sendgridToken);
+ final ndk = Ndk();
+ final symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
+ final github = GitHub(auth: Authentication.withToken(config.githubToken));
+
+ final symbolizer = Symbolizer(symbols: symbols, ndk: ndk, github: github);
+ final bot = Bot(
+ github: github,
+ symbolizer: symbolizer,
+ mailer: mailer,
+ failuresEmail: config.failureEmail);
+
+ await serve(
+ bindHostname,
+ 4040,
+ symbolizer: symbolizer,
+ bot: bot,
+ );
+}
diff --git a/github-label-notifier/symbolizer/bin/symbolize.dart b/github-label-notifier/symbolizer/bin/symbolize.dart
new file mode 100755
index 0000000..36911e4
--- /dev/null
+++ b/github-label-notifier/symbolizer/bin/symbolize.dart
@@ -0,0 +1,45 @@
+#!/usr/bin/env dart
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Primitive CLI for the symbolizer. Usage:
+///
+/// symbolize <input-file> [overrides]
+///
+
+import 'dart:io';
+
+import 'package:github/github.dart';
+import 'package:logging/logging.dart';
+import 'package:symbolizer/config.dart';
+import 'package:symbolizer/ndk.dart';
+import 'package:symbolizer/symbolizer.dart';
+import 'package:symbolizer/symbols.dart';
+import 'package:symbolizer/bot.dart';
+
+final config = loadConfigFromFile();
+
+void main(List<String> args) async {
+ Logger.root.level = Level.ALL;
+ Logger.root.onRecord.listen((record) {
+ print('${record.level.name}: ${record.time}: ${record.message}');
+ });
+
+ final ndk = Ndk();
+ final symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
+ final github = GitHub();
+
+ final symbolizer = Symbolizer(symbols: symbols, ndk: ndk, github: github);
+ final input = File(args.first).readAsStringSync();
+
+ final command = args.length >= 2
+ ? Bot.parseCommand(0, '${Bot.accountMention} ${args.skip(1).join(' ')}')
+ : Bot.parseCommand(0, input);
+
+ try {
+ print(await symbolizer.symbolize(input, overrides: command?.overrides));
+ } finally {
+ github.dispose();
+ }
+}
diff --git a/github-label-notifier/symbolizer/deploy.sh b/github-label-notifier/symbolizer/deploy.sh
new file mode 100755
index 0000000..d989e26
--- /dev/null
+++ b/github-label-notifier/symbolizer/deploy.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+set -xe
+
+if [[ ! -f "tools/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-symbolizer" ]]; then
+ echo "Missing linux-x86_64 build of llvm-symbolizer."
+ echo "Point get-tools-from-ndk.sh to Linux NDK to extract it."
+ exit 1
+fi
+
+if [[ ! -f "tools/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android-readelf" ]]; then
+ echo "Missing linux-x86_64 build of x86_64-linux-android-readelf."
+ echo "Point get-tools-from-ndk.sh to Linux NDK to extract it."
+ exit 1
+fi
+
+if [[ ! -f "tools/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objdump" ]]; then
+ echo "Missing linux-x86_64 build of llvm-objdump."
+ echo "Point get-tools-from-ndk.sh to Linux NDK to extract it."
+ exit 1
+fi
+
+DART_VERSION=$(dart --version 2>&1 | grep -o -e '\d*\.\d*.\d*')
+
+if [[ $DART_VERSION != "2.10.1" ]]; then
+ echo "Version mismatch with server version: $DART_VERSION expected 2.10.1"
+ exit 1
+fi
+
+# Run all tests
+pub run test --no-chain-stack-traces -j1
+
+rm -rf deploy
+mkdir -p deploy/symbolizer
+dart --snapshot-kind=kernel --snapshot=deploy/symbolizer/symbolizer.dill bin/server.dart
+cp -r tools deploy/symbolizer/tools
+dart bin/configure.dart --output=deploy/symbolizer/.config.json \
+ --github-token=$GITHUB_TOKEN \
+ --sendgrid-token=$SENDGRID_TOKEN \
+ --failure-email=$FAILURE_EMAIL
+pushd deploy
+zip -r symbolizer.zip symbolizer
+rm -rf symbolizer
+popd
+
+cat <<EOT >deploy/deploy.sh
+#!/bin/sh
+
+set -ex
+
+DEPLOY_CMD='rm -rf symbolizer && unzip symbolizer.zip && sudo supervisorctl restart all'
+gcloud beta compute scp --zone "us-central1-a" --project "dart-ci" symbolizer.zip crash-symbolizer:~/
+gcloud beta compute ssh --zone "us-central1-a" --project "dart-ci" --command "\$DEPLOY_CMD" crash-symbolizer
+EOT
+chmod +x deploy/deploy.sh
+
+if [[ -z "$DEPLOYMENT_PROXY" ]]; then
+ cd deploy && ./deploy.sh
+else
+ scp deploy/symbolizer.zip $DEPLOYMENT_PROXY:/tmp/symbolizer.zip
+ scp deploy/deploy.sh $DEPLOYMENT_PROXY:/tmp/deploy.sh
+ ssh $DEPLOYMENT_PROXY 'cd /tmp && ./deploy.sh'
+fi
diff --git a/github-label-notifier/symbolizer/get-tools-from-ndk.sh b/github-label-notifier/symbolizer/get-tools-from-ndk.sh
new file mode 100755
index 0000000..4bd70eb
--- /dev/null
+++ b/github-label-notifier/symbolizer/get-tools-from-ndk.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+set -xe
+
+NDK=$1
+OS=$2
+
+if [[ -z $OS ]]; then
+ OS=$(uname | tr '[:upper:]' '[:lower:]')
+fi
+
+echo "Running with NDK $NDK for OS $OS"
+
+for BINARY in "x86_64-linux-android-readelf" "llvm-symbolizer" "llvm-objdump"; do
+ mkdir -p tools/android-ndk/toolchains/llvm/prebuilt/$OS-x86_64/bin/
+ cp $NDK/toolchains/llvm/prebuilt/$OS-x86_64/bin/$BINARY tools/android-ndk/toolchains/llvm/prebuilt/$OS-x86_64/bin/$BINARY
+done
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/lib/bot.dart b/github-label-notifier/symbolizer/lib/bot.dart
new file mode 100644
index 0000000..776de4e
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/bot.dart
@@ -0,0 +1,470 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Implementation of @flutter-symbolizer-bot.
+///
+/// The bot is triggered by command comments starting with bot mention
+/// and followed by zero of more keywords.
+///
+/// See README-bot.md for bot command documentation.
+library symbolizer.bot;
+
+import 'dart:convert';
+
+import 'package:github/github.dart';
+import 'package:logging/logging.dart';
+import 'package:meta/meta.dart';
+import 'package:sendgrid_mailer/sendgrid_mailer.dart';
+
+import 'package:symbolizer/model.dart';
+import 'package:symbolizer/parser.dart';
+import 'package:symbolizer/symbolizer.dart';
+
+final _log = Logger(Bot.account);
+
+class Bot {
+ final GitHub github;
+ final Symbolizer symbolizer;
+ final Mailer mailer;
+ final String failuresEmail;
+ final bool dryRun;
+
+ Bot({
+ @required this.github,
+ @required this.symbolizer,
+ @required this.mailer,
+ @required this.failuresEmail,
+ this.dryRun = false,
+ });
+
+ static final account = 'flutter-symbolizer-bot';
+ static final accountMention = '@$account';
+
+ /// Returns [true] if the given [text] is potentially a command to the bot.
+ static bool isCommand(String text) {
+ return text.startsWith(Bot.accountMention);
+ }
+
+ /// Parse the given [text] as a command to the bot. See the library doc
+ /// comment at the beginning of the file for information about the command
+ /// format.
+ static BotCommand parseCommand(int issueNumber, String text) {
+ final command = text.split('\n').first;
+ if (!isCommand(command)) {
+ return null;
+ }
+
+ final issueNumberStr = issueNumber.toString();
+
+ var symbolizeThis = false;
+ final worklist = <String>{};
+ String engineHash;
+ String flutterVersion;
+ String os;
+ String arch;
+ String mode;
+ String format;
+ var force = false;
+
+ // Command is just a sequence of keywords which specify which comments
+ // to symbolize and which symbols to use.
+ for (var keyword in command.split(' ').skip(1)) {
+ switch (keyword) {
+ case 'this':
+ symbolizeThis = true;
+ break;
+ case 'x86':
+ case 'arm':
+ case 'arm64':
+ case 'x64':
+ arch = keyword;
+ break;
+ case 'debug':
+ case 'profile':
+ case 'release':
+ mode = keyword;
+ break;
+ case 'internal':
+ format = 'internal';
+ break;
+ case 'force':
+ force = true;
+ break;
+ case 'ios':
+ os = 'ios';
+ break;
+ default:
+ // Check if this keyword is a link to an comment on this issue.
+ var m = _commentLinkPattern.firstMatch(keyword);
+ if (m != null) {
+ if (m.namedGroup('issueNumber') == issueNumberStr) {
+ worklist.add(m.namedGroup('ref'));
+ }
+ break;
+ }
+
+ // Check if this keyword is an engine hash.
+ m = _engineHashPattern.firstMatch(keyword);
+ if (m != null) {
+ engineHash = m.namedGroup('sha');
+ break;
+ }
+
+ m = _flutterHashOrVersionPattern.firstMatch(keyword);
+ if (m != null) {
+ flutterVersion = m.namedGroup('version');
+ break;
+ }
+ break;
+ }
+ }
+
+ return BotCommand(
+ symbolizeThis: symbolizeThis,
+ worklist: worklist,
+ overrides: SymbolizationOverrides(
+ arch: arch,
+ engineHash: engineHash,
+ flutterVersion: flutterVersion,
+ mode: mode,
+ os: os,
+ force: force,
+ format: format,
+ ),
+ );
+ }
+
+ /// Execute command contained in the given [commandComment] posted on the
+ /// [issue] in the repository [repo].
+ Future<void> executeCommand(
+ RepositorySlug repo,
+ Issue issue,
+ IssueComment commandComment, {
+ @required bool authorized,
+ }) async {
+ if (!authorized) {
+ await github.issues.createComment(repo, issue.number, '''
+@${commandComment.user.login} Sorry, only **public members of Flutter org** can trigger my services.
+
+Check your privacy settings as described [here](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/publicizing-or-hiding-organization-membership).
+''');
+ return;
+ }
+
+ final command = parseCommand(issue.number, commandComment.body);
+ if (command == null) {
+ return;
+ }
+
+ // Comments which potentially contain crashes by their id.
+ Map<int, _Comment> worklist;
+ if (command.shouldProcessAll) {
+ worklist = await processAllComments(repo, issue);
+ } else {
+ worklist = {};
+ if (command.symbolizeThis) {
+ worklist[commandComment.id] = _Comment.fromComment(commandComment);
+ }
+
+ // Process worklist from the command and fetch comment bodies.
+ for (var ref in command.worklist) {
+ // ref has one of the following formats: issue-id or issuecomment-id
+ final c = ref.split('-');
+ final id = int.parse(c[1]);
+ if (c[0] == 'issue') {
+ worklist[issue.id] = _Comment.fromIssue(issue);
+ } else {
+ try {
+ final comment = await github.issues.getComment(repo, id);
+ worklist[comment.id] = _Comment.fromComment(comment);
+ } catch (e) {
+ // Ignore.
+ }
+ }
+ }
+ }
+
+ // Process comments from the worklist.
+ await symbolizeGiven(
+ repo, issue, commandComment.user, worklist, command.overrides);
+ }
+
+ /// Find all comments on the [issue] which potentially contain crashes
+ /// and were not previously symbolized by the bot.
+ Future<Map<int, _Comment>> processAllComments(
+ RepositorySlug repo, Issue issue) async {
+ _log.info(
+ 'Requested to symbolize all comments on ${repo.fullName}#${issue.number}');
+
+ // Dictionary of comments to symbolize by their id.
+ final worklist = <int, _Comment>{};
+ final alreadySymbolized = <int>{};
+
+ // Collect all comments which might contain crashes in the worklist
+ // and ids of already symbolized comments in the [alreadySymbolized] set.
+ if (containsCrash(issue.body)) {
+ worklist[issue.id] = _Comment.fromIssue(issue);
+ }
+ await for (var comment
+ in github.issues.listCommentsByIssue(repo, issue.number)) {
+ if (comment.user.login == Bot.account) {
+ // From comments by the bot extract ids of already symbolized comments.
+ // Bot adds it to its comments as a JSON encoded object within
+ // HTML comment: <!-- {"symbolized": [id0, id1, ...]} -->
+ final m = _botInfoPattern.firstMatch(comment.body);
+ if (m != null) {
+ final state = jsonDecode(m.namedGroup('json').trim());
+ if (state is Map<String, dynamic> &&
+ state.containsKey('symbolized')) {
+ alreadySymbolized
+ .addAll((state['symbolized'] as List<dynamic>).cast<int>());
+ }
+ }
+ } else if (containsCrash(comment.body)) {
+ worklist[comment.id] = _Comment.fromComment(comment);
+ }
+ }
+
+ _log.info(
+ 'Found comments with crashes ${worklist.keys}, and already symbolized ${alreadySymbolized}');
+ alreadySymbolized.forEach(worklist.remove);
+ return worklist;
+ }
+
+ /// Symbolize crashes from all comments in the [worklist] using the given
+ /// [overrides] and post response on the issue.
+ Future<void> symbolizeGiven(
+ RepositorySlug repo,
+ Issue issue,
+ User commandUser,
+ Map<int, _Comment> worklist,
+ SymbolizationOverrides overrides) async {
+ _log.info('Symbolizing ${worklist.keys} with overrides {$overrides}');
+
+ // Symbolize all collected comments.
+ final symbolized = <int, List<SymbolizationResult>>{};
+ for (var comment in worklist.values) {
+ final result =
+ await symbolizer.symbolize(comment.body, overrides: overrides);
+ if (result.isNotEmpty) {
+ symbolized[comment.id] = result;
+ }
+ }
+
+ if (symbolized.isEmpty) {
+ await github.issues.createComment(repo, issue.number, '''
+@${commandUser.login} No crash reports found. I used the following overrides
+when looking for reports
+
+```
+$overrides
+```
+
+Note that I can only find native Android and iOS crash reports automatically,
+you need to explicitly point me to crash reports in other supported formats.
+
+If the crash report is embedded into a log and prefixed with additional
+information I might not be able to automatically strip those prefixes.
+Currently I only support `flutter run -v`, `adb logcat` and device lab logs.
+
+See [my documentation](https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md#commands) for more details on how to do that.
+''');
+ return;
+ }
+
+ // Post a comment containing all successfully symbolized crashes.
+ await postResultComment(repo, issue, worklist, symbolized);
+ await mailFailures(repo, issue, worklist, symbolized);
+ }
+
+ /// Post a comment on the issue commenting successfully symbolized crashes.
+ void postResultComment(
+ RepositorySlug repo,
+ Issue issue,
+ Map<int, _Comment> comments,
+ Map<int, List<SymbolizationResult>> symbolized) async {
+ if (symbolized.isEmpty) {
+ return;
+ }
+
+ final successes = symbolized.whereResult((r) => r.symbolized != null);
+ final failures = symbolized.whereResult((r) => r.symbolized == null);
+
+ final buf = StringBuffer();
+ for (var entry in successes.entries) {
+ for (var result in entry.value) {
+ buf.write('''
+crash from ${comments[entry.key].url} symbolized using symbols for `${result.engineBuild.engineHash}` `${result.engineBuild.variant.os}-${result.engineBuild.variant.arch}-${result.engineBuild.variant.mode}`
+```
+${result.symbolized}
+```
+''');
+ for (var note in result.notes) {
+ buf.write('_(${noteMessage[note.kind]}');
+ if ((note.message ?? '').isNotEmpty) {
+ buf.write(': ');
+ buf.write(note.message);
+ }
+ buf.write(')_');
+ }
+ buf.writeln();
+ }
+ }
+
+ if (failures.isNotEmpty) {
+ buf.writeln();
+ // GitHub allows <details> HTML elements
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details
+ buf.writeln('''
+<details>
+<summary>There were failures symbolizing some of the crashes I found</summary>
+''');
+
+ for (var entry in failures.entries) {
+ for (var result in entry.value) {
+ buf.writeln('''
+When processing ${comments[entry.key].url} I found crash
+
+```
+${result.crash}
+```
+
+but failed to symbolize it with the following notes:
+''');
+ for (var note in result.notes) {
+ buf.write('* ${noteMessage[note.kind]}');
+ if (note.message != null && note.message.isNotEmpty) {
+ if (note.message.contains('\n')) {
+ buf.writeln(':');
+ buf.write('''
+```
+${note.message}
+```'''
+ .indentBy(' '));
+ } else {
+ buf.writeln(': `${note.message}`');
+ }
+ }
+ buf.writeln('');
+ }
+ }
+ }
+
+ buf.writeln('''
+
+See [my documentation](https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md#commands) for more details.
+</details>
+''');
+ }
+
+ // Append information about symbolized comments to the bot's comment so that
+ // we could skip them later.
+ buf.writeln(
+ '<!-- ${jsonEncode({'symbolized': successes.keys.toList()})} -->');
+
+ if (dryRun) {
+ print(buf);
+ } else {
+ await github.issues.createComment(repo, issue.number, buf.toString());
+ }
+ }
+
+ /// Mail failures to the [failuresEmail] mail address.
+ void mailFailures(
+ RepositorySlug repo,
+ Issue issue,
+ Map<int, _Comment> comments,
+ Map<int, List<SymbolizationResult>> symbolized) async {
+ if (failuresEmail == null) {
+ return;
+ }
+
+ final failures = symbolized.whereResult((r) => r.symbolized == null);
+ if (failures.isEmpty) {
+ return;
+ }
+
+ final escape = const HtmlEscape().convert;
+
+ final buf = StringBuffer();
+ buf.write('''<p>Hello 👋</p>
+<p>I was asked to symbolize crashes from <a href="${issue.htmlUrl}">issue ${issue.number}</a>, but failed.</p>
+''');
+ for (var entry in failures.entries) {
+ for (var result in entry.value) {
+ buf.writeln('''
+<p>When processing <a href="${comments[entry.key].url}">comment</a>, I found crash</p>
+<pre>${escape(result.crash.toString())}</pre>
+<p>but failed with the following notes:</p>
+''');
+ for (var note in result.notes) {
+ buf.writeln(
+ '${noteMessage[note.kind]} <pre>${escape(note.message ?? '')}');
+ }
+ }
+ }
+
+ if (dryRun) {
+ print(buf);
+ } else {
+ await mailer.send(
+ Email(
+ [
+ Personalization([Address(failuresEmail)])
+ ],
+ Address('noreply@dart.dev'),
+ 'symbolization errors for issue #${issue.number}',
+ content: [Content('text/html', buf.toString())],
+ ),
+ );
+ }
+ }
+
+ static final _botInfoPattern = RegExp(r'<!-- (?<json>.*) -->');
+ static final _commentLinkPattern = RegExp(
+ r'^https://github\.com/(?<fullName>[\-\w]+/[\-\w]+)/issues/(?<issueNumber>\d+)#(?<ref>issue(comment)?-\d+)$');
+ static final _engineHashPattern = RegExp(r'^engine#(?<sha>[a-f0-9]+)$');
+ static final _flutterHashOrVersionPattern =
+ RegExp(r'^flutter#v?(?<version>[a-f0-9\.]+)$');
+}
+
+extension on BotCommand {
+ /// [true] if the user requested to process all comments on the issue.
+ bool get shouldProcessAll => !symbolizeThis && worklist.isEmpty;
+}
+
+/// Class that represents a comment on the issue.
+///
+/// GitHub API does not treat issue body itself as a comment hence
+/// the need for separate wrapper.
+class _Comment {
+ final int id;
+ final String url;
+ final String body;
+
+ _Comment(this.id, this.url, this.body);
+
+ _Comment.fromComment(IssueComment comment)
+ : this(comment.id, comment.htmlUrl, comment.body);
+
+ _Comment.fromIssue(Issue issue)
+ : this(issue.id, issue.commentLikeHtmlUrl, issue.body);
+}
+
+extension on Issue {
+ String get commentLikeHtmlUrl => '$htmlUrl#issue-$id';
+}
+
+extension on Map<int, List<SymbolizationResult>> {
+ /// Filter multimap of symbolization results using the given predicate.
+ Map<int, List<SymbolizationResult>> whereResult(
+ bool Function(SymbolizationResult) predicate) =>
+ Map.fromEntries(entries
+ .map((e) => MapEntry(e.key, e.value.where(predicate).toList()))
+ .where((e) => e.value.isNotEmpty));
+}
+
+extension on String {
+ String indentBy(String indent) => indent + split('\n').join('\n$indent');
+}
diff --git a/github-label-notifier/symbolizer/lib/config.dart b/github-label-notifier/symbolizer/lib/config.dart
new file mode 100644
index 0000000..a8acfe3
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/config.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:symbolizer/model.dart';
+
+ServerConfig loadConfigFromFile({String path = '.config.json'}) {
+ return ServerConfig.fromJson(jsonDecode(File(path).readAsStringSync()));
+}
diff --git a/github-label-notifier/symbolizer/lib/model.dart b/github-label-notifier/symbolizer/lib/model.dart
new file mode 100644
index 0000000..27d08ef
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/model.dart
@@ -0,0 +1,232 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Data model shared between client and server.
+library symbolizer.model;
+
+import 'package:freezed_annotation/freezed_annotation.dart';
+
+part 'model.freezed.dart';
+part 'model.g.dart';
+
+/// Specifies an engine variant (a combination of target os, CPU architecture
+/// and build mode).
+@freezed
+abstract class EngineVariant with _$EngineVariant {
+ factory EngineVariant({
+ @required String os,
+ @required @nullable String arch,
+ @required @nullable String mode,
+ }) = _EngineVariant;
+ factory EngineVariant.fromJson(Map<String, dynamic> json) =>
+ _$EngineVariantFromJson(json);
+
+ /// Generate all posibile variants from the given [variant] by varying
+ /// [EngineVariant.mode].
+ static Iterable<EngineVariant> allModesFor(EngineVariant variant) sync* {
+ for (var mode in [
+ 'debug',
+ if (!_isX86Variant(variant)) 'release',
+ if (!_isX86Variant(variant)) 'profile'
+ ]) {
+ yield variant.copyWith(mode: mode);
+ }
+ }
+
+ static bool _isX86Variant(EngineVariant variant) =>
+ variant.arch == 'x86' || variant.arch == 'x64';
+}
+
+extension EngineVariantEx on EngineVariant {
+ String get pretty => '${os}-${arch}-${mode}';
+}
+
+/// Specific engine variant built at the given engine hash.
+@freezed
+abstract class EngineBuild with _$EngineBuild {
+ factory EngineBuild({
+ @required String engineHash,
+ @required EngineVariant variant,
+ }) = _EngineBuild;
+
+ factory EngineBuild.fromJson(Map<String, dynamic> json) =>
+ _$EngineBuildFromJson(json);
+}
+
+/// Backtrace frame extracted from a textual crash report.
+@freezed
+abstract class CrashFrame with _$CrashFrame {
+ /// Frame of a native iOS crash.
+ factory CrashFrame.ios({
+ @required String no,
+ @required String binary,
+
+ /// Absolute PC of the frame.
+ @required int pc,
+ @required String symbol,
+ @required @nullable int offset,
+ @required String location,
+ }) = IosCrashFrame;
+
+ /// Frame of a native Android crash.
+ factory CrashFrame.android({
+ @required String no,
+
+ /// Relative PC of the frame.
+ @required int pc,
+ @required String binary,
+ @required String rest,
+ @required @nullable String buildId,
+ }) = AndroidCrashFrame;
+
+ factory CrashFrame.custom({
+ @required String no,
+ @required int pc,
+ @required String binary,
+ @required @nullable int offset,
+ @required @nullable String location,
+ @required @nullable String symbol,
+ }) = CustomCrashFrame;
+
+ /// Frame of a Dart VM crash.
+ factory CrashFrame.dartvm({
+ /// Absolute PC of the frame.
+ @required int pc,
+
+ /// Binary which contains the given PC.
+ @required String binary,
+
+ /// Offset from load base of the binary to the PC.
+ @required int offset,
+ }) = DartvmCrashFrame;
+
+ factory CrashFrame.fromJson(Map<String, dynamic> json) =>
+ _$CrashFrameFromJson(json);
+
+ static const crashalyticsMissingSymbol = '(Missing)';
+}
+
+/// Information about an engine crash extracted from a GitHub comment.
+@freezed
+abstract class Crash with _$Crash {
+ factory Crash({
+ EngineVariant engineVariant,
+ List<CrashFrame> frames,
+ @required String format,
+ @nullable int androidMajorVersion,
+ }) = _Crash;
+
+ factory Crash.fromJson(Map<String, dynamic> json) => _$CrashFromJson(json);
+}
+
+enum SymbolizationNoteKind {
+ unknownEngineHash,
+ unknownAbi,
+ exceptionWhileGettingEngineHash,
+ exceptionWhileSymbolizing,
+ exceptionWhileLookingByBuildId,
+ defaultedToReleaseBuildIdUnavailable,
+ noSymbolsAvailableOnIos,
+ buildIdMismatch,
+ loadBaseDetected,
+}
+
+const noteMessage = <SymbolizationNoteKind, String>{
+ SymbolizationNoteKind.unknownEngineHash: 'Unknown engine hash',
+ SymbolizationNoteKind.unknownAbi: 'Unknown engine ABI',
+ SymbolizationNoteKind.exceptionWhileGettingEngineHash:
+ 'Exception occurred while trying to lookup full engine hash',
+ SymbolizationNoteKind.exceptionWhileSymbolizing:
+ 'Exception occurred while symbolizing',
+ SymbolizationNoteKind.exceptionWhileLookingByBuildId:
+ 'Exception occurred while trying to find symbols using build-id',
+ SymbolizationNoteKind.defaultedToReleaseBuildIdUnavailable:
+ 'Defaulted to release engine because build-id is unavailable or unreliable',
+ SymbolizationNoteKind.noSymbolsAvailableOnIos:
+ 'Symbols are available only for release iOS builds',
+ SymbolizationNoteKind.buildIdMismatch: 'Build-ID mismatch',
+ SymbolizationNoteKind.loadBaseDetected:
+ 'Load address missing from the report, detected heuristically',
+};
+
+/// Result of symbolizing an engine crash.
+@freezed
+abstract class SymbolizationResult with _$SymbolizationResult {
+ @JsonSerializable(explicitToJson: true)
+ factory SymbolizationResult({
+ @required Crash crash,
+ @required @nullable EngineBuild engineBuild,
+
+ /// Symbolization result - not null if symbolization succeeded.
+ @required @nullable String symbolized,
+ @Default([]) List<SymbolizationNote> notes,
+ }) = _SymbolizationResult;
+
+ factory SymbolizationResult.fromJson(Map<String, dynamic> json) =>
+ _$SymbolizationResultFromJson(json);
+}
+
+extension WithNote on SymbolizationResult {
+ SymbolizationResult withNote(SymbolizationNoteKind kind, [String message]) {
+ return copyWith(
+ notes: [
+ ...?notes,
+ SymbolizationNote(kind: kind, message: message),
+ ],
+ );
+ }
+}
+
+@freezed
+abstract class SymbolizationNote with _$SymbolizationNote {
+ factory SymbolizationNote(
+ {@required SymbolizationNoteKind kind,
+ @nullable String message}) = _SymbolizationNote;
+
+ factory SymbolizationNote.fromJson(Map<String, dynamic> json) =>
+ _$SymbolizationNoteFromJson(json);
+}
+
+/// Command to [Bot].
+@freezed
+abstract class BotCommand with _$BotCommand {
+ factory BotCommand({
+ /// Overrides that should be used for symbolization. These overrides
+ /// replace or augment information available in the comments themselves.
+ @required SymbolizationOverrides overrides,
+
+ /// [true] if the user requested to symbolize the comment that contains
+ /// command.
+ @required bool symbolizeThis,
+
+ /// List of references to comments which need to be symbolized. Each reference
+ /// is either in `issue-id` or in `issuecomment-id` format.
+ @required Set<String> worklist,
+ }) = _BotCommand;
+}
+
+@freezed
+abstract class SymbolizationOverrides with _$SymbolizationOverrides {
+ factory SymbolizationOverrides({
+ @nullable String engineHash,
+ @nullable String flutterVersion,
+ @nullable String arch,
+ @nullable String mode,
+ @Default(false) bool force,
+ @nullable String format,
+ @nullable String os,
+ }) = _SymbolizationOverrides;
+}
+
+@freezed
+abstract class ServerConfig with _$ServerConfig {
+ factory ServerConfig({
+ String githubToken,
+ String sendgridToken,
+ String failureEmail,
+ }) = _ServerConfig;
+
+ factory ServerConfig.fromJson(Map<String, dynamic> json) =>
+ _$ServerConfigFromJson(json);
+}
diff --git a/github-label-notifier/symbolizer/lib/model.freezed.dart b/github-label-notifier/symbolizer/lib/model.freezed.dart
new file mode 100644
index 0000000..973e42b
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/model.freezed.dart
@@ -0,0 +1,2690 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies
+
+part of symbolizer.model;
+
+// **************************************************************************
+// FreezedGenerator
+// **************************************************************************
+
+T _$identity<T>(T value) => value;
+EngineVariant _$EngineVariantFromJson(Map<String, dynamic> json) {
+ return _EngineVariant.fromJson(json);
+}
+
+/// @nodoc
+class _$EngineVariantTearOff {
+ const _$EngineVariantTearOff();
+
+// ignore: unused_element
+ _EngineVariant call(
+ {@required String os,
+ @required @nullable String arch,
+ @required @nullable String mode}) {
+ return _EngineVariant(
+ os: os,
+ arch: arch,
+ mode: mode,
+ );
+ }
+
+// ignore: unused_element
+ EngineVariant fromJson(Map<String, Object> json) {
+ return EngineVariant.fromJson(json);
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $EngineVariant = _$EngineVariantTearOff();
+
+/// @nodoc
+mixin _$EngineVariant {
+ String get os;
+ @nullable
+ String get arch;
+ @nullable
+ String get mode;
+
+ Map<String, dynamic> toJson();
+ $EngineVariantCopyWith<EngineVariant> get copyWith;
+}
+
+/// @nodoc
+abstract class $EngineVariantCopyWith<$Res> {
+ factory $EngineVariantCopyWith(
+ EngineVariant value, $Res Function(EngineVariant) then) =
+ _$EngineVariantCopyWithImpl<$Res>;
+ $Res call({String os, @nullable String arch, @nullable String mode});
+}
+
+/// @nodoc
+class _$EngineVariantCopyWithImpl<$Res>
+ implements $EngineVariantCopyWith<$Res> {
+ _$EngineVariantCopyWithImpl(this._value, this._then);
+
+ final EngineVariant _value;
+ // ignore: unused_field
+ final $Res Function(EngineVariant) _then;
+
+ @override
+ $Res call({
+ Object os = freezed,
+ Object arch = freezed,
+ Object mode = freezed,
+ }) {
+ return _then(_value.copyWith(
+ os: os == freezed ? _value.os : os as String,
+ arch: arch == freezed ? _value.arch : arch as String,
+ mode: mode == freezed ? _value.mode : mode as String,
+ ));
+ }
+}
+
+/// @nodoc
+abstract class _$EngineVariantCopyWith<$Res>
+ implements $EngineVariantCopyWith<$Res> {
+ factory _$EngineVariantCopyWith(
+ _EngineVariant value, $Res Function(_EngineVariant) then) =
+ __$EngineVariantCopyWithImpl<$Res>;
+ @override
+ $Res call({String os, @nullable String arch, @nullable String mode});
+}
+
+/// @nodoc
+class __$EngineVariantCopyWithImpl<$Res>
+ extends _$EngineVariantCopyWithImpl<$Res>
+ implements _$EngineVariantCopyWith<$Res> {
+ __$EngineVariantCopyWithImpl(
+ _EngineVariant _value, $Res Function(_EngineVariant) _then)
+ : super(_value, (v) => _then(v as _EngineVariant));
+
+ @override
+ _EngineVariant get _value => super._value as _EngineVariant;
+
+ @override
+ $Res call({
+ Object os = freezed,
+ Object arch = freezed,
+ Object mode = freezed,
+ }) {
+ return _then(_EngineVariant(
+ os: os == freezed ? _value.os : os as String,
+ arch: arch == freezed ? _value.arch : arch as String,
+ mode: mode == freezed ? _value.mode : mode as String,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$_EngineVariant implements _EngineVariant {
+ _$_EngineVariant(
+ {@required this.os,
+ @required @nullable this.arch,
+ @required @nullable this.mode})
+ : assert(os != null);
+
+ factory _$_EngineVariant.fromJson(Map<String, dynamic> json) =>
+ _$_$_EngineVariantFromJson(json);
+
+ @override
+ final String os;
+ @override
+ @nullable
+ final String arch;
+ @override
+ @nullable
+ final String mode;
+
+ @override
+ String toString() {
+ return 'EngineVariant(os: $os, arch: $arch, mode: $mode)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _EngineVariant &&
+ (identical(other.os, os) ||
+ const DeepCollectionEquality().equals(other.os, os)) &&
+ (identical(other.arch, arch) ||
+ const DeepCollectionEquality().equals(other.arch, arch)) &&
+ (identical(other.mode, mode) ||
+ const DeepCollectionEquality().equals(other.mode, mode)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(os) ^
+ const DeepCollectionEquality().hash(arch) ^
+ const DeepCollectionEquality().hash(mode);
+
+ @override
+ _$EngineVariantCopyWith<_EngineVariant> get copyWith =>
+ __$EngineVariantCopyWithImpl<_EngineVariant>(this, _$identity);
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$_EngineVariantToJson(this);
+ }
+}
+
+abstract class _EngineVariant implements EngineVariant {
+ factory _EngineVariant(
+ {@required String os,
+ @required @nullable String arch,
+ @required @nullable String mode}) = _$_EngineVariant;
+
+ factory _EngineVariant.fromJson(Map<String, dynamic> json) =
+ _$_EngineVariant.fromJson;
+
+ @override
+ String get os;
+ @override
+ @nullable
+ String get arch;
+ @override
+ @nullable
+ String get mode;
+ @override
+ _$EngineVariantCopyWith<_EngineVariant> get copyWith;
+}
+
+EngineBuild _$EngineBuildFromJson(Map<String, dynamic> json) {
+ return _EngineBuild.fromJson(json);
+}
+
+/// @nodoc
+class _$EngineBuildTearOff {
+ const _$EngineBuildTearOff();
+
+// ignore: unused_element
+ _EngineBuild call(
+ {@required String engineHash, @required EngineVariant variant}) {
+ return _EngineBuild(
+ engineHash: engineHash,
+ variant: variant,
+ );
+ }
+
+// ignore: unused_element
+ EngineBuild fromJson(Map<String, Object> json) {
+ return EngineBuild.fromJson(json);
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $EngineBuild = _$EngineBuildTearOff();
+
+/// @nodoc
+mixin _$EngineBuild {
+ String get engineHash;
+ EngineVariant get variant;
+
+ Map<String, dynamic> toJson();
+ $EngineBuildCopyWith<EngineBuild> get copyWith;
+}
+
+/// @nodoc
+abstract class $EngineBuildCopyWith<$Res> {
+ factory $EngineBuildCopyWith(
+ EngineBuild value, $Res Function(EngineBuild) then) =
+ _$EngineBuildCopyWithImpl<$Res>;
+ $Res call({String engineHash, EngineVariant variant});
+
+ $EngineVariantCopyWith<$Res> get variant;
+}
+
+/// @nodoc
+class _$EngineBuildCopyWithImpl<$Res> implements $EngineBuildCopyWith<$Res> {
+ _$EngineBuildCopyWithImpl(this._value, this._then);
+
+ final EngineBuild _value;
+ // ignore: unused_field
+ final $Res Function(EngineBuild) _then;
+
+ @override
+ $Res call({
+ Object engineHash = freezed,
+ Object variant = freezed,
+ }) {
+ return _then(_value.copyWith(
+ engineHash:
+ engineHash == freezed ? _value.engineHash : engineHash as String,
+ variant: variant == freezed ? _value.variant : variant as EngineVariant,
+ ));
+ }
+
+ @override
+ $EngineVariantCopyWith<$Res> get variant {
+ if (_value.variant == null) {
+ return null;
+ }
+ return $EngineVariantCopyWith<$Res>(_value.variant, (value) {
+ return _then(_value.copyWith(variant: value));
+ });
+ }
+}
+
+/// @nodoc
+abstract class _$EngineBuildCopyWith<$Res>
+ implements $EngineBuildCopyWith<$Res> {
+ factory _$EngineBuildCopyWith(
+ _EngineBuild value, $Res Function(_EngineBuild) then) =
+ __$EngineBuildCopyWithImpl<$Res>;
+ @override
+ $Res call({String engineHash, EngineVariant variant});
+
+ @override
+ $EngineVariantCopyWith<$Res> get variant;
+}
+
+/// @nodoc
+class __$EngineBuildCopyWithImpl<$Res> extends _$EngineBuildCopyWithImpl<$Res>
+ implements _$EngineBuildCopyWith<$Res> {
+ __$EngineBuildCopyWithImpl(
+ _EngineBuild _value, $Res Function(_EngineBuild) _then)
+ : super(_value, (v) => _then(v as _EngineBuild));
+
+ @override
+ _EngineBuild get _value => super._value as _EngineBuild;
+
+ @override
+ $Res call({
+ Object engineHash = freezed,
+ Object variant = freezed,
+ }) {
+ return _then(_EngineBuild(
+ engineHash:
+ engineHash == freezed ? _value.engineHash : engineHash as String,
+ variant: variant == freezed ? _value.variant : variant as EngineVariant,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$_EngineBuild implements _EngineBuild {
+ _$_EngineBuild({@required this.engineHash, @required this.variant})
+ : assert(engineHash != null),
+ assert(variant != null);
+
+ factory _$_EngineBuild.fromJson(Map<String, dynamic> json) =>
+ _$_$_EngineBuildFromJson(json);
+
+ @override
+ final String engineHash;
+ @override
+ final EngineVariant variant;
+
+ @override
+ String toString() {
+ return 'EngineBuild(engineHash: $engineHash, variant: $variant)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _EngineBuild &&
+ (identical(other.engineHash, engineHash) ||
+ const DeepCollectionEquality()
+ .equals(other.engineHash, engineHash)) &&
+ (identical(other.variant, variant) ||
+ const DeepCollectionEquality().equals(other.variant, variant)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(engineHash) ^
+ const DeepCollectionEquality().hash(variant);
+
+ @override
+ _$EngineBuildCopyWith<_EngineBuild> get copyWith =>
+ __$EngineBuildCopyWithImpl<_EngineBuild>(this, _$identity);
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$_EngineBuildToJson(this);
+ }
+}
+
+abstract class _EngineBuild implements EngineBuild {
+ factory _EngineBuild(
+ {@required String engineHash,
+ @required EngineVariant variant}) = _$_EngineBuild;
+
+ factory _EngineBuild.fromJson(Map<String, dynamic> json) =
+ _$_EngineBuild.fromJson;
+
+ @override
+ String get engineHash;
+ @override
+ EngineVariant get variant;
+ @override
+ _$EngineBuildCopyWith<_EngineBuild> get copyWith;
+}
+
+CrashFrame _$CrashFrameFromJson(Map<String, dynamic> json) {
+ switch (json['runtimeType'] as String) {
+ case 'ios':
+ return IosCrashFrame.fromJson(json);
+ case 'android':
+ return AndroidCrashFrame.fromJson(json);
+ case 'custom':
+ return CustomCrashFrame.fromJson(json);
+ case 'dartvm':
+ return DartvmCrashFrame.fromJson(json);
+
+ default:
+ throw FallThroughError();
+ }
+}
+
+/// @nodoc
+class _$CrashFrameTearOff {
+ const _$CrashFrameTearOff();
+
+// ignore: unused_element
+ IosCrashFrame ios(
+ {@required String no,
+ @required String binary,
+ @required int pc,
+ @required String symbol,
+ @required @nullable int offset,
+ @required String location}) {
+ return IosCrashFrame(
+ no: no,
+ binary: binary,
+ pc: pc,
+ symbol: symbol,
+ offset: offset,
+ location: location,
+ );
+ }
+
+// ignore: unused_element
+ AndroidCrashFrame android(
+ {@required String no,
+ @required int pc,
+ @required String binary,
+ @required String rest,
+ @required @nullable String buildId}) {
+ return AndroidCrashFrame(
+ no: no,
+ pc: pc,
+ binary: binary,
+ rest: rest,
+ buildId: buildId,
+ );
+ }
+
+// ignore: unused_element
+ CustomCrashFrame custom(
+ {@required String no,
+ @required int pc,
+ @required String binary,
+ @required @nullable int offset,
+ @required @nullable String location,
+ @required @nullable String symbol}) {
+ return CustomCrashFrame(
+ no: no,
+ pc: pc,
+ binary: binary,
+ offset: offset,
+ location: location,
+ symbol: symbol,
+ );
+ }
+
+// ignore: unused_element
+ DartvmCrashFrame dartvm(
+ {@required int pc, @required String binary, @required int offset}) {
+ return DartvmCrashFrame(
+ pc: pc,
+ binary: binary,
+ offset: offset,
+ );
+ }
+
+// ignore: unused_element
+ CrashFrame fromJson(Map<String, Object> json) {
+ return CrashFrame.fromJson(json);
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $CrashFrame = _$CrashFrameTearOff();
+
+/// @nodoc
+mixin _$CrashFrame {
+ String get binary;
+
+ /// Absolute PC of the frame.
+ int get pc;
+
+ @optionalTypeArgs
+ Result when<Result extends Object>({
+ @required
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ @required
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ @required
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ @required Result dartvm(int pc, String binary, int offset),
+ });
+ @optionalTypeArgs
+ Result maybeWhen<Result extends Object>({
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ Result dartvm(int pc, String binary, int offset),
+ @required Result orElse(),
+ });
+ @optionalTypeArgs
+ Result map<Result extends Object>({
+ @required Result ios(IosCrashFrame value),
+ @required Result android(AndroidCrashFrame value),
+ @required Result custom(CustomCrashFrame value),
+ @required Result dartvm(DartvmCrashFrame value),
+ });
+ @optionalTypeArgs
+ Result maybeMap<Result extends Object>({
+ Result ios(IosCrashFrame value),
+ Result android(AndroidCrashFrame value),
+ Result custom(CustomCrashFrame value),
+ Result dartvm(DartvmCrashFrame value),
+ @required Result orElse(),
+ });
+ Map<String, dynamic> toJson();
+ $CrashFrameCopyWith<CrashFrame> get copyWith;
+}
+
+/// @nodoc
+abstract class $CrashFrameCopyWith<$Res> {
+ factory $CrashFrameCopyWith(
+ CrashFrame value, $Res Function(CrashFrame) then) =
+ _$CrashFrameCopyWithImpl<$Res>;
+ $Res call({String binary, int pc});
+}
+
+/// @nodoc
+class _$CrashFrameCopyWithImpl<$Res> implements $CrashFrameCopyWith<$Res> {
+ _$CrashFrameCopyWithImpl(this._value, this._then);
+
+ final CrashFrame _value;
+ // ignore: unused_field
+ final $Res Function(CrashFrame) _then;
+
+ @override
+ $Res call({
+ Object binary = freezed,
+ Object pc = freezed,
+ }) {
+ return _then(_value.copyWith(
+ binary: binary == freezed ? _value.binary : binary as String,
+ pc: pc == freezed ? _value.pc : pc as int,
+ ));
+ }
+}
+
+/// @nodoc
+abstract class $IosCrashFrameCopyWith<$Res>
+ implements $CrashFrameCopyWith<$Res> {
+ factory $IosCrashFrameCopyWith(
+ IosCrashFrame value, $Res Function(IosCrashFrame) then) =
+ _$IosCrashFrameCopyWithImpl<$Res>;
+ @override
+ $Res call(
+ {String no,
+ String binary,
+ int pc,
+ String symbol,
+ @nullable int offset,
+ String location});
+}
+
+/// @nodoc
+class _$IosCrashFrameCopyWithImpl<$Res> extends _$CrashFrameCopyWithImpl<$Res>
+ implements $IosCrashFrameCopyWith<$Res> {
+ _$IosCrashFrameCopyWithImpl(
+ IosCrashFrame _value, $Res Function(IosCrashFrame) _then)
+ : super(_value, (v) => _then(v as IosCrashFrame));
+
+ @override
+ IosCrashFrame get _value => super._value as IosCrashFrame;
+
+ @override
+ $Res call({
+ Object no = freezed,
+ Object binary = freezed,
+ Object pc = freezed,
+ Object symbol = freezed,
+ Object offset = freezed,
+ Object location = freezed,
+ }) {
+ return _then(IosCrashFrame(
+ no: no == freezed ? _value.no : no as String,
+ binary: binary == freezed ? _value.binary : binary as String,
+ pc: pc == freezed ? _value.pc : pc as int,
+ symbol: symbol == freezed ? _value.symbol : symbol as String,
+ offset: offset == freezed ? _value.offset : offset as int,
+ location: location == freezed ? _value.location : location as String,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$IosCrashFrame implements IosCrashFrame {
+ _$IosCrashFrame(
+ {@required this.no,
+ @required this.binary,
+ @required this.pc,
+ @required this.symbol,
+ @required @nullable this.offset,
+ @required this.location})
+ : assert(no != null),
+ assert(binary != null),
+ assert(pc != null),
+ assert(symbol != null),
+ assert(location != null);
+
+ factory _$IosCrashFrame.fromJson(Map<String, dynamic> json) =>
+ _$_$IosCrashFrameFromJson(json);
+
+ @override
+ final String no;
+ @override
+ final String binary;
+ @override
+
+ /// Absolute PC of the frame.
+ final int pc;
+ @override
+ final String symbol;
+ @override
+ @nullable
+ final int offset;
+ @override
+ final String location;
+
+ @override
+ String toString() {
+ return 'CrashFrame.ios(no: $no, binary: $binary, pc: $pc, symbol: $symbol, offset: $offset, location: $location)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is IosCrashFrame &&
+ (identical(other.no, no) ||
+ const DeepCollectionEquality().equals(other.no, no)) &&
+ (identical(other.binary, binary) ||
+ const DeepCollectionEquality().equals(other.binary, binary)) &&
+ (identical(other.pc, pc) ||
+ const DeepCollectionEquality().equals(other.pc, pc)) &&
+ (identical(other.symbol, symbol) ||
+ const DeepCollectionEquality().equals(other.symbol, symbol)) &&
+ (identical(other.offset, offset) ||
+ const DeepCollectionEquality().equals(other.offset, offset)) &&
+ (identical(other.location, location) ||
+ const DeepCollectionEquality()
+ .equals(other.location, location)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(no) ^
+ const DeepCollectionEquality().hash(binary) ^
+ const DeepCollectionEquality().hash(pc) ^
+ const DeepCollectionEquality().hash(symbol) ^
+ const DeepCollectionEquality().hash(offset) ^
+ const DeepCollectionEquality().hash(location);
+
+ @override
+ $IosCrashFrameCopyWith<IosCrashFrame> get copyWith =>
+ _$IosCrashFrameCopyWithImpl<IosCrashFrame>(this, _$identity);
+
+ @override
+ @optionalTypeArgs
+ Result when<Result extends Object>({
+ @required
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ @required
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ @required
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ @required Result dartvm(int pc, String binary, int offset),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return ios(no, binary, pc, symbol, offset, location);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeWhen<Result extends Object>({
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ Result dartvm(int pc, String binary, int offset),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (ios != null) {
+ return ios(no, binary, pc, symbol, offset, location);
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ Result map<Result extends Object>({
+ @required Result ios(IosCrashFrame value),
+ @required Result android(AndroidCrashFrame value),
+ @required Result custom(CustomCrashFrame value),
+ @required Result dartvm(DartvmCrashFrame value),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return ios(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeMap<Result extends Object>({
+ Result ios(IosCrashFrame value),
+ Result android(AndroidCrashFrame value),
+ Result custom(CustomCrashFrame value),
+ Result dartvm(DartvmCrashFrame value),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (ios != null) {
+ return ios(this);
+ }
+ return orElse();
+ }
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$IosCrashFrameToJson(this)..['runtimeType'] = 'ios';
+ }
+}
+
+abstract class IosCrashFrame implements CrashFrame {
+ factory IosCrashFrame(
+ {@required String no,
+ @required String binary,
+ @required int pc,
+ @required String symbol,
+ @required @nullable int offset,
+ @required String location}) = _$IosCrashFrame;
+
+ factory IosCrashFrame.fromJson(Map<String, dynamic> json) =
+ _$IosCrashFrame.fromJson;
+
+ String get no;
+ @override
+ String get binary;
+ @override
+
+ /// Absolute PC of the frame.
+ int get pc;
+ String get symbol;
+ @nullable
+ int get offset;
+ String get location;
+ @override
+ $IosCrashFrameCopyWith<IosCrashFrame> get copyWith;
+}
+
+/// @nodoc
+abstract class $AndroidCrashFrameCopyWith<$Res>
+ implements $CrashFrameCopyWith<$Res> {
+ factory $AndroidCrashFrameCopyWith(
+ AndroidCrashFrame value, $Res Function(AndroidCrashFrame) then) =
+ _$AndroidCrashFrameCopyWithImpl<$Res>;
+ @override
+ $Res call(
+ {String no,
+ int pc,
+ String binary,
+ String rest,
+ @nullable String buildId});
+}
+
+/// @nodoc
+class _$AndroidCrashFrameCopyWithImpl<$Res>
+ extends _$CrashFrameCopyWithImpl<$Res>
+ implements $AndroidCrashFrameCopyWith<$Res> {
+ _$AndroidCrashFrameCopyWithImpl(
+ AndroidCrashFrame _value, $Res Function(AndroidCrashFrame) _then)
+ : super(_value, (v) => _then(v as AndroidCrashFrame));
+
+ @override
+ AndroidCrashFrame get _value => super._value as AndroidCrashFrame;
+
+ @override
+ $Res call({
+ Object no = freezed,
+ Object pc = freezed,
+ Object binary = freezed,
+ Object rest = freezed,
+ Object buildId = freezed,
+ }) {
+ return _then(AndroidCrashFrame(
+ no: no == freezed ? _value.no : no as String,
+ pc: pc == freezed ? _value.pc : pc as int,
+ binary: binary == freezed ? _value.binary : binary as String,
+ rest: rest == freezed ? _value.rest : rest as String,
+ buildId: buildId == freezed ? _value.buildId : buildId as String,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$AndroidCrashFrame implements AndroidCrashFrame {
+ _$AndroidCrashFrame(
+ {@required this.no,
+ @required this.pc,
+ @required this.binary,
+ @required this.rest,
+ @required @nullable this.buildId})
+ : assert(no != null),
+ assert(pc != null),
+ assert(binary != null),
+ assert(rest != null);
+
+ factory _$AndroidCrashFrame.fromJson(Map<String, dynamic> json) =>
+ _$_$AndroidCrashFrameFromJson(json);
+
+ @override
+ final String no;
+ @override
+
+ /// Relative PC of the frame.
+ final int pc;
+ @override
+ final String binary;
+ @override
+ final String rest;
+ @override
+ @nullable
+ final String buildId;
+
+ @override
+ String toString() {
+ return 'CrashFrame.android(no: $no, pc: $pc, binary: $binary, rest: $rest, buildId: $buildId)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is AndroidCrashFrame &&
+ (identical(other.no, no) ||
+ const DeepCollectionEquality().equals(other.no, no)) &&
+ (identical(other.pc, pc) ||
+ const DeepCollectionEquality().equals(other.pc, pc)) &&
+ (identical(other.binary, binary) ||
+ const DeepCollectionEquality().equals(other.binary, binary)) &&
+ (identical(other.rest, rest) ||
+ const DeepCollectionEquality().equals(other.rest, rest)) &&
+ (identical(other.buildId, buildId) ||
+ const DeepCollectionEquality().equals(other.buildId, buildId)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(no) ^
+ const DeepCollectionEquality().hash(pc) ^
+ const DeepCollectionEquality().hash(binary) ^
+ const DeepCollectionEquality().hash(rest) ^
+ const DeepCollectionEquality().hash(buildId);
+
+ @override
+ $AndroidCrashFrameCopyWith<AndroidCrashFrame> get copyWith =>
+ _$AndroidCrashFrameCopyWithImpl<AndroidCrashFrame>(this, _$identity);
+
+ @override
+ @optionalTypeArgs
+ Result when<Result extends Object>({
+ @required
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ @required
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ @required
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ @required Result dartvm(int pc, String binary, int offset),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return android(no, pc, binary, rest, buildId);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeWhen<Result extends Object>({
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ Result dartvm(int pc, String binary, int offset),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (android != null) {
+ return android(no, pc, binary, rest, buildId);
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ Result map<Result extends Object>({
+ @required Result ios(IosCrashFrame value),
+ @required Result android(AndroidCrashFrame value),
+ @required Result custom(CustomCrashFrame value),
+ @required Result dartvm(DartvmCrashFrame value),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return android(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeMap<Result extends Object>({
+ Result ios(IosCrashFrame value),
+ Result android(AndroidCrashFrame value),
+ Result custom(CustomCrashFrame value),
+ Result dartvm(DartvmCrashFrame value),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (android != null) {
+ return android(this);
+ }
+ return orElse();
+ }
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$AndroidCrashFrameToJson(this)..['runtimeType'] = 'android';
+ }
+}
+
+abstract class AndroidCrashFrame implements CrashFrame {
+ factory AndroidCrashFrame(
+ {@required String no,
+ @required int pc,
+ @required String binary,
+ @required String rest,
+ @required @nullable String buildId}) = _$AndroidCrashFrame;
+
+ factory AndroidCrashFrame.fromJson(Map<String, dynamic> json) =
+ _$AndroidCrashFrame.fromJson;
+
+ String get no;
+ @override
+
+ /// Relative PC of the frame.
+ int get pc;
+ @override
+ String get binary;
+ String get rest;
+ @nullable
+ String get buildId;
+ @override
+ $AndroidCrashFrameCopyWith<AndroidCrashFrame> get copyWith;
+}
+
+/// @nodoc
+abstract class $CustomCrashFrameCopyWith<$Res>
+ implements $CrashFrameCopyWith<$Res> {
+ factory $CustomCrashFrameCopyWith(
+ CustomCrashFrame value, $Res Function(CustomCrashFrame) then) =
+ _$CustomCrashFrameCopyWithImpl<$Res>;
+ @override
+ $Res call(
+ {String no,
+ int pc,
+ String binary,
+ @nullable int offset,
+ @nullable String location,
+ @nullable String symbol});
+}
+
+/// @nodoc
+class _$CustomCrashFrameCopyWithImpl<$Res>
+ extends _$CrashFrameCopyWithImpl<$Res>
+ implements $CustomCrashFrameCopyWith<$Res> {
+ _$CustomCrashFrameCopyWithImpl(
+ CustomCrashFrame _value, $Res Function(CustomCrashFrame) _then)
+ : super(_value, (v) => _then(v as CustomCrashFrame));
+
+ @override
+ CustomCrashFrame get _value => super._value as CustomCrashFrame;
+
+ @override
+ $Res call({
+ Object no = freezed,
+ Object pc = freezed,
+ Object binary = freezed,
+ Object offset = freezed,
+ Object location = freezed,
+ Object symbol = freezed,
+ }) {
+ return _then(CustomCrashFrame(
+ no: no == freezed ? _value.no : no as String,
+ pc: pc == freezed ? _value.pc : pc as int,
+ binary: binary == freezed ? _value.binary : binary as String,
+ offset: offset == freezed ? _value.offset : offset as int,
+ location: location == freezed ? _value.location : location as String,
+ symbol: symbol == freezed ? _value.symbol : symbol as String,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$CustomCrashFrame implements CustomCrashFrame {
+ _$CustomCrashFrame(
+ {@required this.no,
+ @required this.pc,
+ @required this.binary,
+ @required @nullable this.offset,
+ @required @nullable this.location,
+ @required @nullable this.symbol})
+ : assert(no != null),
+ assert(pc != null),
+ assert(binary != null);
+
+ factory _$CustomCrashFrame.fromJson(Map<String, dynamic> json) =>
+ _$_$CustomCrashFrameFromJson(json);
+
+ @override
+ final String no;
+ @override
+ final int pc;
+ @override
+ final String binary;
+ @override
+ @nullable
+ final int offset;
+ @override
+ @nullable
+ final String location;
+ @override
+ @nullable
+ final String symbol;
+
+ @override
+ String toString() {
+ return 'CrashFrame.custom(no: $no, pc: $pc, binary: $binary, offset: $offset, location: $location, symbol: $symbol)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is CustomCrashFrame &&
+ (identical(other.no, no) ||
+ const DeepCollectionEquality().equals(other.no, no)) &&
+ (identical(other.pc, pc) ||
+ const DeepCollectionEquality().equals(other.pc, pc)) &&
+ (identical(other.binary, binary) ||
+ const DeepCollectionEquality().equals(other.binary, binary)) &&
+ (identical(other.offset, offset) ||
+ const DeepCollectionEquality().equals(other.offset, offset)) &&
+ (identical(other.location, location) ||
+ const DeepCollectionEquality()
+ .equals(other.location, location)) &&
+ (identical(other.symbol, symbol) ||
+ const DeepCollectionEquality().equals(other.symbol, symbol)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(no) ^
+ const DeepCollectionEquality().hash(pc) ^
+ const DeepCollectionEquality().hash(binary) ^
+ const DeepCollectionEquality().hash(offset) ^
+ const DeepCollectionEquality().hash(location) ^
+ const DeepCollectionEquality().hash(symbol);
+
+ @override
+ $CustomCrashFrameCopyWith<CustomCrashFrame> get copyWith =>
+ _$CustomCrashFrameCopyWithImpl<CustomCrashFrame>(this, _$identity);
+
+ @override
+ @optionalTypeArgs
+ Result when<Result extends Object>({
+ @required
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ @required
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ @required
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ @required Result dartvm(int pc, String binary, int offset),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return custom(no, pc, binary, offset, location, symbol);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeWhen<Result extends Object>({
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ Result dartvm(int pc, String binary, int offset),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (custom != null) {
+ return custom(no, pc, binary, offset, location, symbol);
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ Result map<Result extends Object>({
+ @required Result ios(IosCrashFrame value),
+ @required Result android(AndroidCrashFrame value),
+ @required Result custom(CustomCrashFrame value),
+ @required Result dartvm(DartvmCrashFrame value),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return custom(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeMap<Result extends Object>({
+ Result ios(IosCrashFrame value),
+ Result android(AndroidCrashFrame value),
+ Result custom(CustomCrashFrame value),
+ Result dartvm(DartvmCrashFrame value),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (custom != null) {
+ return custom(this);
+ }
+ return orElse();
+ }
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$CustomCrashFrameToJson(this)..['runtimeType'] = 'custom';
+ }
+}
+
+abstract class CustomCrashFrame implements CrashFrame {
+ factory CustomCrashFrame(
+ {@required String no,
+ @required int pc,
+ @required String binary,
+ @required @nullable int offset,
+ @required @nullable String location,
+ @required @nullable String symbol}) = _$CustomCrashFrame;
+
+ factory CustomCrashFrame.fromJson(Map<String, dynamic> json) =
+ _$CustomCrashFrame.fromJson;
+
+ String get no;
+ @override
+ int get pc;
+ @override
+ String get binary;
+ @nullable
+ int get offset;
+ @nullable
+ String get location;
+ @nullable
+ String get symbol;
+ @override
+ $CustomCrashFrameCopyWith<CustomCrashFrame> get copyWith;
+}
+
+/// @nodoc
+abstract class $DartvmCrashFrameCopyWith<$Res>
+ implements $CrashFrameCopyWith<$Res> {
+ factory $DartvmCrashFrameCopyWith(
+ DartvmCrashFrame value, $Res Function(DartvmCrashFrame) then) =
+ _$DartvmCrashFrameCopyWithImpl<$Res>;
+ @override
+ $Res call({int pc, String binary, int offset});
+}
+
+/// @nodoc
+class _$DartvmCrashFrameCopyWithImpl<$Res>
+ extends _$CrashFrameCopyWithImpl<$Res>
+ implements $DartvmCrashFrameCopyWith<$Res> {
+ _$DartvmCrashFrameCopyWithImpl(
+ DartvmCrashFrame _value, $Res Function(DartvmCrashFrame) _then)
+ : super(_value, (v) => _then(v as DartvmCrashFrame));
+
+ @override
+ DartvmCrashFrame get _value => super._value as DartvmCrashFrame;
+
+ @override
+ $Res call({
+ Object pc = freezed,
+ Object binary = freezed,
+ Object offset = freezed,
+ }) {
+ return _then(DartvmCrashFrame(
+ pc: pc == freezed ? _value.pc : pc as int,
+ binary: binary == freezed ? _value.binary : binary as String,
+ offset: offset == freezed ? _value.offset : offset as int,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$DartvmCrashFrame implements DartvmCrashFrame {
+ _$DartvmCrashFrame(
+ {@required this.pc, @required this.binary, @required this.offset})
+ : assert(pc != null),
+ assert(binary != null),
+ assert(offset != null);
+
+ factory _$DartvmCrashFrame.fromJson(Map<String, dynamic> json) =>
+ _$_$DartvmCrashFrameFromJson(json);
+
+ @override
+
+ /// Absolute PC of the frame.
+ final int pc;
+ @override
+
+ /// Binary which contains the given PC.
+ final String binary;
+ @override
+
+ /// Offset from load base of the binary to the PC.
+ final int offset;
+
+ @override
+ String toString() {
+ return 'CrashFrame.dartvm(pc: $pc, binary: $binary, offset: $offset)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is DartvmCrashFrame &&
+ (identical(other.pc, pc) ||
+ const DeepCollectionEquality().equals(other.pc, pc)) &&
+ (identical(other.binary, binary) ||
+ const DeepCollectionEquality().equals(other.binary, binary)) &&
+ (identical(other.offset, offset) ||
+ const DeepCollectionEquality().equals(other.offset, offset)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(pc) ^
+ const DeepCollectionEquality().hash(binary) ^
+ const DeepCollectionEquality().hash(offset);
+
+ @override
+ $DartvmCrashFrameCopyWith<DartvmCrashFrame> get copyWith =>
+ _$DartvmCrashFrameCopyWithImpl<DartvmCrashFrame>(this, _$identity);
+
+ @override
+ @optionalTypeArgs
+ Result when<Result extends Object>({
+ @required
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ @required
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ @required
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ @required Result dartvm(int pc, String binary, int offset),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return dartvm(pc, binary, offset);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeWhen<Result extends Object>({
+ Result ios(String no, String binary, int pc, String symbol,
+ @nullable int offset, String location),
+ Result android(String no, int pc, String binary, String rest,
+ @nullable String buildId),
+ Result custom(String no, int pc, String binary, @nullable int offset,
+ @nullable String location, @nullable String symbol),
+ Result dartvm(int pc, String binary, int offset),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (dartvm != null) {
+ return dartvm(pc, binary, offset);
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ Result map<Result extends Object>({
+ @required Result ios(IosCrashFrame value),
+ @required Result android(AndroidCrashFrame value),
+ @required Result custom(CustomCrashFrame value),
+ @required Result dartvm(DartvmCrashFrame value),
+ }) {
+ assert(ios != null);
+ assert(android != null);
+ assert(custom != null);
+ assert(dartvm != null);
+ return dartvm(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ Result maybeMap<Result extends Object>({
+ Result ios(IosCrashFrame value),
+ Result android(AndroidCrashFrame value),
+ Result custom(CustomCrashFrame value),
+ Result dartvm(DartvmCrashFrame value),
+ @required Result orElse(),
+ }) {
+ assert(orElse != null);
+ if (dartvm != null) {
+ return dartvm(this);
+ }
+ return orElse();
+ }
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$DartvmCrashFrameToJson(this)..['runtimeType'] = 'dartvm';
+ }
+}
+
+abstract class DartvmCrashFrame implements CrashFrame {
+ factory DartvmCrashFrame(
+ {@required int pc,
+ @required String binary,
+ @required int offset}) = _$DartvmCrashFrame;
+
+ factory DartvmCrashFrame.fromJson(Map<String, dynamic> json) =
+ _$DartvmCrashFrame.fromJson;
+
+ @override
+
+ /// Absolute PC of the frame.
+ int get pc;
+ @override
+
+ /// Binary which contains the given PC.
+ String get binary;
+
+ /// Offset from load base of the binary to the PC.
+ int get offset;
+ @override
+ $DartvmCrashFrameCopyWith<DartvmCrashFrame> get copyWith;
+}
+
+Crash _$CrashFromJson(Map<String, dynamic> json) {
+ return _Crash.fromJson(json);
+}
+
+/// @nodoc
+class _$CrashTearOff {
+ const _$CrashTearOff();
+
+// ignore: unused_element
+ _Crash call(
+ {EngineVariant engineVariant,
+ List<CrashFrame> frames,
+ @required String format,
+ @nullable int androidMajorVersion}) {
+ return _Crash(
+ engineVariant: engineVariant,
+ frames: frames,
+ format: format,
+ androidMajorVersion: androidMajorVersion,
+ );
+ }
+
+// ignore: unused_element
+ Crash fromJson(Map<String, Object> json) {
+ return Crash.fromJson(json);
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $Crash = _$CrashTearOff();
+
+/// @nodoc
+mixin _$Crash {
+ EngineVariant get engineVariant;
+ List<CrashFrame> get frames;
+ String get format;
+ @nullable
+ int get androidMajorVersion;
+
+ Map<String, dynamic> toJson();
+ $CrashCopyWith<Crash> get copyWith;
+}
+
+/// @nodoc
+abstract class $CrashCopyWith<$Res> {
+ factory $CrashCopyWith(Crash value, $Res Function(Crash) then) =
+ _$CrashCopyWithImpl<$Res>;
+ $Res call(
+ {EngineVariant engineVariant,
+ List<CrashFrame> frames,
+ String format,
+ @nullable int androidMajorVersion});
+
+ $EngineVariantCopyWith<$Res> get engineVariant;
+}
+
+/// @nodoc
+class _$CrashCopyWithImpl<$Res> implements $CrashCopyWith<$Res> {
+ _$CrashCopyWithImpl(this._value, this._then);
+
+ final Crash _value;
+ // ignore: unused_field
+ final $Res Function(Crash) _then;
+
+ @override
+ $Res call({
+ Object engineVariant = freezed,
+ Object frames = freezed,
+ Object format = freezed,
+ Object androidMajorVersion = freezed,
+ }) {
+ return _then(_value.copyWith(
+ engineVariant: engineVariant == freezed
+ ? _value.engineVariant
+ : engineVariant as EngineVariant,
+ frames: frames == freezed ? _value.frames : frames as List<CrashFrame>,
+ format: format == freezed ? _value.format : format as String,
+ androidMajorVersion: androidMajorVersion == freezed
+ ? _value.androidMajorVersion
+ : androidMajorVersion as int,
+ ));
+ }
+
+ @override
+ $EngineVariantCopyWith<$Res> get engineVariant {
+ if (_value.engineVariant == null) {
+ return null;
+ }
+ return $EngineVariantCopyWith<$Res>(_value.engineVariant, (value) {
+ return _then(_value.copyWith(engineVariant: value));
+ });
+ }
+}
+
+/// @nodoc
+abstract class _$CrashCopyWith<$Res> implements $CrashCopyWith<$Res> {
+ factory _$CrashCopyWith(_Crash value, $Res Function(_Crash) then) =
+ __$CrashCopyWithImpl<$Res>;
+ @override
+ $Res call(
+ {EngineVariant engineVariant,
+ List<CrashFrame> frames,
+ String format,
+ @nullable int androidMajorVersion});
+
+ @override
+ $EngineVariantCopyWith<$Res> get engineVariant;
+}
+
+/// @nodoc
+class __$CrashCopyWithImpl<$Res> extends _$CrashCopyWithImpl<$Res>
+ implements _$CrashCopyWith<$Res> {
+ __$CrashCopyWithImpl(_Crash _value, $Res Function(_Crash) _then)
+ : super(_value, (v) => _then(v as _Crash));
+
+ @override
+ _Crash get _value => super._value as _Crash;
+
+ @override
+ $Res call({
+ Object engineVariant = freezed,
+ Object frames = freezed,
+ Object format = freezed,
+ Object androidMajorVersion = freezed,
+ }) {
+ return _then(_Crash(
+ engineVariant: engineVariant == freezed
+ ? _value.engineVariant
+ : engineVariant as EngineVariant,
+ frames: frames == freezed ? _value.frames : frames as List<CrashFrame>,
+ format: format == freezed ? _value.format : format as String,
+ androidMajorVersion: androidMajorVersion == freezed
+ ? _value.androidMajorVersion
+ : androidMajorVersion as int,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$_Crash implements _Crash {
+ _$_Crash(
+ {this.engineVariant,
+ this.frames,
+ @required this.format,
+ @nullable this.androidMajorVersion})
+ : assert(format != null);
+
+ factory _$_Crash.fromJson(Map<String, dynamic> json) =>
+ _$_$_CrashFromJson(json);
+
+ @override
+ final EngineVariant engineVariant;
+ @override
+ final List<CrashFrame> frames;
+ @override
+ final String format;
+ @override
+ @nullable
+ final int androidMajorVersion;
+
+ @override
+ String toString() {
+ return 'Crash(engineVariant: $engineVariant, frames: $frames, format: $format, androidMajorVersion: $androidMajorVersion)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _Crash &&
+ (identical(other.engineVariant, engineVariant) ||
+ const DeepCollectionEquality()
+ .equals(other.engineVariant, engineVariant)) &&
+ (identical(other.frames, frames) ||
+ const DeepCollectionEquality().equals(other.frames, frames)) &&
+ (identical(other.format, format) ||
+ const DeepCollectionEquality().equals(other.format, format)) &&
+ (identical(other.androidMajorVersion, androidMajorVersion) ||
+ const DeepCollectionEquality()
+ .equals(other.androidMajorVersion, androidMajorVersion)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(engineVariant) ^
+ const DeepCollectionEquality().hash(frames) ^
+ const DeepCollectionEquality().hash(format) ^
+ const DeepCollectionEquality().hash(androidMajorVersion);
+
+ @override
+ _$CrashCopyWith<_Crash> get copyWith =>
+ __$CrashCopyWithImpl<_Crash>(this, _$identity);
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$_CrashToJson(this);
+ }
+}
+
+abstract class _Crash implements Crash {
+ factory _Crash(
+ {EngineVariant engineVariant,
+ List<CrashFrame> frames,
+ @required String format,
+ @nullable int androidMajorVersion}) = _$_Crash;
+
+ factory _Crash.fromJson(Map<String, dynamic> json) = _$_Crash.fromJson;
+
+ @override
+ EngineVariant get engineVariant;
+ @override
+ List<CrashFrame> get frames;
+ @override
+ String get format;
+ @override
+ @nullable
+ int get androidMajorVersion;
+ @override
+ _$CrashCopyWith<_Crash> get copyWith;
+}
+
+SymbolizationResult _$SymbolizationResultFromJson(Map<String, dynamic> json) {
+ return _SymbolizationResult.fromJson(json);
+}
+
+/// @nodoc
+class _$SymbolizationResultTearOff {
+ const _$SymbolizationResultTearOff();
+
+// ignore: unused_element
+ _SymbolizationResult call(
+ {@required Crash crash,
+ @required @nullable EngineBuild engineBuild,
+ @required @nullable String symbolized,
+ List<SymbolizationNote> notes = const []}) {
+ return _SymbolizationResult(
+ crash: crash,
+ engineBuild: engineBuild,
+ symbolized: symbolized,
+ notes: notes,
+ );
+ }
+
+// ignore: unused_element
+ SymbolizationResult fromJson(Map<String, Object> json) {
+ return SymbolizationResult.fromJson(json);
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $SymbolizationResult = _$SymbolizationResultTearOff();
+
+/// @nodoc
+mixin _$SymbolizationResult {
+ Crash get crash;
+ @nullable
+ EngineBuild get engineBuild;
+
+ /// Symbolization result - not null if symbolization succeeded.
+ @nullable
+ String get symbolized;
+ List<SymbolizationNote> get notes;
+
+ Map<String, dynamic> toJson();
+ $SymbolizationResultCopyWith<SymbolizationResult> get copyWith;
+}
+
+/// @nodoc
+abstract class $SymbolizationResultCopyWith<$Res> {
+ factory $SymbolizationResultCopyWith(
+ SymbolizationResult value, $Res Function(SymbolizationResult) then) =
+ _$SymbolizationResultCopyWithImpl<$Res>;
+ $Res call(
+ {Crash crash,
+ @nullable EngineBuild engineBuild,
+ @nullable String symbolized,
+ List<SymbolizationNote> notes});
+
+ $CrashCopyWith<$Res> get crash;
+ $EngineBuildCopyWith<$Res> get engineBuild;
+}
+
+/// @nodoc
+class _$SymbolizationResultCopyWithImpl<$Res>
+ implements $SymbolizationResultCopyWith<$Res> {
+ _$SymbolizationResultCopyWithImpl(this._value, this._then);
+
+ final SymbolizationResult _value;
+ // ignore: unused_field
+ final $Res Function(SymbolizationResult) _then;
+
+ @override
+ $Res call({
+ Object crash = freezed,
+ Object engineBuild = freezed,
+ Object symbolized = freezed,
+ Object notes = freezed,
+ }) {
+ return _then(_value.copyWith(
+ crash: crash == freezed ? _value.crash : crash as Crash,
+ engineBuild: engineBuild == freezed
+ ? _value.engineBuild
+ : engineBuild as EngineBuild,
+ symbolized:
+ symbolized == freezed ? _value.symbolized : symbolized as String,
+ notes: notes == freezed ? _value.notes : notes as List<SymbolizationNote>,
+ ));
+ }
+
+ @override
+ $CrashCopyWith<$Res> get crash {
+ if (_value.crash == null) {
+ return null;
+ }
+ return $CrashCopyWith<$Res>(_value.crash, (value) {
+ return _then(_value.copyWith(crash: value));
+ });
+ }
+
+ @override
+ $EngineBuildCopyWith<$Res> get engineBuild {
+ if (_value.engineBuild == null) {
+ return null;
+ }
+ return $EngineBuildCopyWith<$Res>(_value.engineBuild, (value) {
+ return _then(_value.copyWith(engineBuild: value));
+ });
+ }
+}
+
+/// @nodoc
+abstract class _$SymbolizationResultCopyWith<$Res>
+ implements $SymbolizationResultCopyWith<$Res> {
+ factory _$SymbolizationResultCopyWith(_SymbolizationResult value,
+ $Res Function(_SymbolizationResult) then) =
+ __$SymbolizationResultCopyWithImpl<$Res>;
+ @override
+ $Res call(
+ {Crash crash,
+ @nullable EngineBuild engineBuild,
+ @nullable String symbolized,
+ List<SymbolizationNote> notes});
+
+ @override
+ $CrashCopyWith<$Res> get crash;
+ @override
+ $EngineBuildCopyWith<$Res> get engineBuild;
+}
+
+/// @nodoc
+class __$SymbolizationResultCopyWithImpl<$Res>
+ extends _$SymbolizationResultCopyWithImpl<$Res>
+ implements _$SymbolizationResultCopyWith<$Res> {
+ __$SymbolizationResultCopyWithImpl(
+ _SymbolizationResult _value, $Res Function(_SymbolizationResult) _then)
+ : super(_value, (v) => _then(v as _SymbolizationResult));
+
+ @override
+ _SymbolizationResult get _value => super._value as _SymbolizationResult;
+
+ @override
+ $Res call({
+ Object crash = freezed,
+ Object engineBuild = freezed,
+ Object symbolized = freezed,
+ Object notes = freezed,
+ }) {
+ return _then(_SymbolizationResult(
+ crash: crash == freezed ? _value.crash : crash as Crash,
+ engineBuild: engineBuild == freezed
+ ? _value.engineBuild
+ : engineBuild as EngineBuild,
+ symbolized:
+ symbolized == freezed ? _value.symbolized : symbolized as String,
+ notes: notes == freezed ? _value.notes : notes as List<SymbolizationNote>,
+ ));
+ }
+}
+
+@JsonSerializable(explicitToJson: true)
+
+/// @nodoc
+class _$_SymbolizationResult implements _SymbolizationResult {
+ _$_SymbolizationResult(
+ {@required this.crash,
+ @required @nullable this.engineBuild,
+ @required @nullable this.symbolized,
+ this.notes = const []})
+ : assert(crash != null),
+ assert(notes != null);
+
+ factory _$_SymbolizationResult.fromJson(Map<String, dynamic> json) =>
+ _$_$_SymbolizationResultFromJson(json);
+
+ @override
+ final Crash crash;
+ @override
+ @nullable
+ final EngineBuild engineBuild;
+ @override
+
+ /// Symbolization result - not null if symbolization succeeded.
+ @nullable
+ final String symbolized;
+ @JsonKey(defaultValue: const [])
+ @override
+ final List<SymbolizationNote> notes;
+
+ @override
+ String toString() {
+ return 'SymbolizationResult(crash: $crash, engineBuild: $engineBuild, symbolized: $symbolized, notes: $notes)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _SymbolizationResult &&
+ (identical(other.crash, crash) ||
+ const DeepCollectionEquality().equals(other.crash, crash)) &&
+ (identical(other.engineBuild, engineBuild) ||
+ const DeepCollectionEquality()
+ .equals(other.engineBuild, engineBuild)) &&
+ (identical(other.symbolized, symbolized) ||
+ const DeepCollectionEquality()
+ .equals(other.symbolized, symbolized)) &&
+ (identical(other.notes, notes) ||
+ const DeepCollectionEquality().equals(other.notes, notes)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(crash) ^
+ const DeepCollectionEquality().hash(engineBuild) ^
+ const DeepCollectionEquality().hash(symbolized) ^
+ const DeepCollectionEquality().hash(notes);
+
+ @override
+ _$SymbolizationResultCopyWith<_SymbolizationResult> get copyWith =>
+ __$SymbolizationResultCopyWithImpl<_SymbolizationResult>(
+ this, _$identity);
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$_SymbolizationResultToJson(this);
+ }
+}
+
+abstract class _SymbolizationResult implements SymbolizationResult {
+ factory _SymbolizationResult(
+ {@required Crash crash,
+ @required @nullable EngineBuild engineBuild,
+ @required @nullable String symbolized,
+ List<SymbolizationNote> notes}) = _$_SymbolizationResult;
+
+ factory _SymbolizationResult.fromJson(Map<String, dynamic> json) =
+ _$_SymbolizationResult.fromJson;
+
+ @override
+ Crash get crash;
+ @override
+ @nullable
+ EngineBuild get engineBuild;
+ @override
+
+ /// Symbolization result - not null if symbolization succeeded.
+ @nullable
+ String get symbolized;
+ @override
+ List<SymbolizationNote> get notes;
+ @override
+ _$SymbolizationResultCopyWith<_SymbolizationResult> get copyWith;
+}
+
+SymbolizationNote _$SymbolizationNoteFromJson(Map<String, dynamic> json) {
+ return _SymbolizationNote.fromJson(json);
+}
+
+/// @nodoc
+class _$SymbolizationNoteTearOff {
+ const _$SymbolizationNoteTearOff();
+
+// ignore: unused_element
+ _SymbolizationNote call(
+ {@required SymbolizationNoteKind kind, @nullable String message}) {
+ return _SymbolizationNote(
+ kind: kind,
+ message: message,
+ );
+ }
+
+// ignore: unused_element
+ SymbolizationNote fromJson(Map<String, Object> json) {
+ return SymbolizationNote.fromJson(json);
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $SymbolizationNote = _$SymbolizationNoteTearOff();
+
+/// @nodoc
+mixin _$SymbolizationNote {
+ SymbolizationNoteKind get kind;
+ @nullable
+ String get message;
+
+ Map<String, dynamic> toJson();
+ $SymbolizationNoteCopyWith<SymbolizationNote> get copyWith;
+}
+
+/// @nodoc
+abstract class $SymbolizationNoteCopyWith<$Res> {
+ factory $SymbolizationNoteCopyWith(
+ SymbolizationNote value, $Res Function(SymbolizationNote) then) =
+ _$SymbolizationNoteCopyWithImpl<$Res>;
+ $Res call({SymbolizationNoteKind kind, @nullable String message});
+}
+
+/// @nodoc
+class _$SymbolizationNoteCopyWithImpl<$Res>
+ implements $SymbolizationNoteCopyWith<$Res> {
+ _$SymbolizationNoteCopyWithImpl(this._value, this._then);
+
+ final SymbolizationNote _value;
+ // ignore: unused_field
+ final $Res Function(SymbolizationNote) _then;
+
+ @override
+ $Res call({
+ Object kind = freezed,
+ Object message = freezed,
+ }) {
+ return _then(_value.copyWith(
+ kind: kind == freezed ? _value.kind : kind as SymbolizationNoteKind,
+ message: message == freezed ? _value.message : message as String,
+ ));
+ }
+}
+
+/// @nodoc
+abstract class _$SymbolizationNoteCopyWith<$Res>
+ implements $SymbolizationNoteCopyWith<$Res> {
+ factory _$SymbolizationNoteCopyWith(
+ _SymbolizationNote value, $Res Function(_SymbolizationNote) then) =
+ __$SymbolizationNoteCopyWithImpl<$Res>;
+ @override
+ $Res call({SymbolizationNoteKind kind, @nullable String message});
+}
+
+/// @nodoc
+class __$SymbolizationNoteCopyWithImpl<$Res>
+ extends _$SymbolizationNoteCopyWithImpl<$Res>
+ implements _$SymbolizationNoteCopyWith<$Res> {
+ __$SymbolizationNoteCopyWithImpl(
+ _SymbolizationNote _value, $Res Function(_SymbolizationNote) _then)
+ : super(_value, (v) => _then(v as _SymbolizationNote));
+
+ @override
+ _SymbolizationNote get _value => super._value as _SymbolizationNote;
+
+ @override
+ $Res call({
+ Object kind = freezed,
+ Object message = freezed,
+ }) {
+ return _then(_SymbolizationNote(
+ kind: kind == freezed ? _value.kind : kind as SymbolizationNoteKind,
+ message: message == freezed ? _value.message : message as String,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$_SymbolizationNote implements _SymbolizationNote {
+ _$_SymbolizationNote({@required this.kind, @nullable this.message})
+ : assert(kind != null);
+
+ factory _$_SymbolizationNote.fromJson(Map<String, dynamic> json) =>
+ _$_$_SymbolizationNoteFromJson(json);
+
+ @override
+ final SymbolizationNoteKind kind;
+ @override
+ @nullable
+ final String message;
+
+ @override
+ String toString() {
+ return 'SymbolizationNote(kind: $kind, message: $message)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _SymbolizationNote &&
+ (identical(other.kind, kind) ||
+ const DeepCollectionEquality().equals(other.kind, kind)) &&
+ (identical(other.message, message) ||
+ const DeepCollectionEquality().equals(other.message, message)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(kind) ^
+ const DeepCollectionEquality().hash(message);
+
+ @override
+ _$SymbolizationNoteCopyWith<_SymbolizationNote> get copyWith =>
+ __$SymbolizationNoteCopyWithImpl<_SymbolizationNote>(this, _$identity);
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$_SymbolizationNoteToJson(this);
+ }
+}
+
+abstract class _SymbolizationNote implements SymbolizationNote {
+ factory _SymbolizationNote(
+ {@required SymbolizationNoteKind kind,
+ @nullable String message}) = _$_SymbolizationNote;
+
+ factory _SymbolizationNote.fromJson(Map<String, dynamic> json) =
+ _$_SymbolizationNote.fromJson;
+
+ @override
+ SymbolizationNoteKind get kind;
+ @override
+ @nullable
+ String get message;
+ @override
+ _$SymbolizationNoteCopyWith<_SymbolizationNote> get copyWith;
+}
+
+/// @nodoc
+class _$BotCommandTearOff {
+ const _$BotCommandTearOff();
+
+// ignore: unused_element
+ _BotCommand call(
+ {@required SymbolizationOverrides overrides,
+ @required bool symbolizeThis,
+ @required Set<String> worklist}) {
+ return _BotCommand(
+ overrides: overrides,
+ symbolizeThis: symbolizeThis,
+ worklist: worklist,
+ );
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $BotCommand = _$BotCommandTearOff();
+
+/// @nodoc
+mixin _$BotCommand {
+ /// Overrides that should be used for symbolization. These overrides
+ /// replace or augment information available in the comments themselves.
+ SymbolizationOverrides get overrides;
+
+ /// [true] if the user requested to symbolize the comment that contains
+ /// command.
+ bool get symbolizeThis;
+
+ /// List of references to comments which need to be symbolized. Each reference
+ /// is either in `issue-id` or in `issuecomment-id` format.
+ Set<String> get worklist;
+
+ $BotCommandCopyWith<BotCommand> get copyWith;
+}
+
+/// @nodoc
+abstract class $BotCommandCopyWith<$Res> {
+ factory $BotCommandCopyWith(
+ BotCommand value, $Res Function(BotCommand) then) =
+ _$BotCommandCopyWithImpl<$Res>;
+ $Res call(
+ {SymbolizationOverrides overrides,
+ bool symbolizeThis,
+ Set<String> worklist});
+
+ $SymbolizationOverridesCopyWith<$Res> get overrides;
+}
+
+/// @nodoc
+class _$BotCommandCopyWithImpl<$Res> implements $BotCommandCopyWith<$Res> {
+ _$BotCommandCopyWithImpl(this._value, this._then);
+
+ final BotCommand _value;
+ // ignore: unused_field
+ final $Res Function(BotCommand) _then;
+
+ @override
+ $Res call({
+ Object overrides = freezed,
+ Object symbolizeThis = freezed,
+ Object worklist = freezed,
+ }) {
+ return _then(_value.copyWith(
+ overrides: overrides == freezed
+ ? _value.overrides
+ : overrides as SymbolizationOverrides,
+ symbolizeThis: symbolizeThis == freezed
+ ? _value.symbolizeThis
+ : symbolizeThis as bool,
+ worklist: worklist == freezed ? _value.worklist : worklist as Set<String>,
+ ));
+ }
+
+ @override
+ $SymbolizationOverridesCopyWith<$Res> get overrides {
+ if (_value.overrides == null) {
+ return null;
+ }
+ return $SymbolizationOverridesCopyWith<$Res>(_value.overrides, (value) {
+ return _then(_value.copyWith(overrides: value));
+ });
+ }
+}
+
+/// @nodoc
+abstract class _$BotCommandCopyWith<$Res> implements $BotCommandCopyWith<$Res> {
+ factory _$BotCommandCopyWith(
+ _BotCommand value, $Res Function(_BotCommand) then) =
+ __$BotCommandCopyWithImpl<$Res>;
+ @override
+ $Res call(
+ {SymbolizationOverrides overrides,
+ bool symbolizeThis,
+ Set<String> worklist});
+
+ @override
+ $SymbolizationOverridesCopyWith<$Res> get overrides;
+}
+
+/// @nodoc
+class __$BotCommandCopyWithImpl<$Res> extends _$BotCommandCopyWithImpl<$Res>
+ implements _$BotCommandCopyWith<$Res> {
+ __$BotCommandCopyWithImpl(
+ _BotCommand _value, $Res Function(_BotCommand) _then)
+ : super(_value, (v) => _then(v as _BotCommand));
+
+ @override
+ _BotCommand get _value => super._value as _BotCommand;
+
+ @override
+ $Res call({
+ Object overrides = freezed,
+ Object symbolizeThis = freezed,
+ Object worklist = freezed,
+ }) {
+ return _then(_BotCommand(
+ overrides: overrides == freezed
+ ? _value.overrides
+ : overrides as SymbolizationOverrides,
+ symbolizeThis: symbolizeThis == freezed
+ ? _value.symbolizeThis
+ : symbolizeThis as bool,
+ worklist: worklist == freezed ? _value.worklist : worklist as Set<String>,
+ ));
+ }
+}
+
+/// @nodoc
+class _$_BotCommand implements _BotCommand {
+ _$_BotCommand(
+ {@required this.overrides,
+ @required this.symbolizeThis,
+ @required this.worklist})
+ : assert(overrides != null),
+ assert(symbolizeThis != null),
+ assert(worklist != null);
+
+ @override
+
+ /// Overrides that should be used for symbolization. These overrides
+ /// replace or augment information available in the comments themselves.
+ final SymbolizationOverrides overrides;
+ @override
+
+ /// [true] if the user requested to symbolize the comment that contains
+ /// command.
+ final bool symbolizeThis;
+ @override
+
+ /// List of references to comments which need to be symbolized. Each reference
+ /// is either in `issue-id` or in `issuecomment-id` format.
+ final Set<String> worklist;
+
+ @override
+ String toString() {
+ return 'BotCommand(overrides: $overrides, symbolizeThis: $symbolizeThis, worklist: $worklist)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _BotCommand &&
+ (identical(other.overrides, overrides) ||
+ const DeepCollectionEquality()
+ .equals(other.overrides, overrides)) &&
+ (identical(other.symbolizeThis, symbolizeThis) ||
+ const DeepCollectionEquality()
+ .equals(other.symbolizeThis, symbolizeThis)) &&
+ (identical(other.worklist, worklist) ||
+ const DeepCollectionEquality()
+ .equals(other.worklist, worklist)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(overrides) ^
+ const DeepCollectionEquality().hash(symbolizeThis) ^
+ const DeepCollectionEquality().hash(worklist);
+
+ @override
+ _$BotCommandCopyWith<_BotCommand> get copyWith =>
+ __$BotCommandCopyWithImpl<_BotCommand>(this, _$identity);
+}
+
+abstract class _BotCommand implements BotCommand {
+ factory _BotCommand(
+ {@required SymbolizationOverrides overrides,
+ @required bool symbolizeThis,
+ @required Set<String> worklist}) = _$_BotCommand;
+
+ @override
+
+ /// Overrides that should be used for symbolization. These overrides
+ /// replace or augment information available in the comments themselves.
+ SymbolizationOverrides get overrides;
+ @override
+
+ /// [true] if the user requested to symbolize the comment that contains
+ /// command.
+ bool get symbolizeThis;
+ @override
+
+ /// List of references to comments which need to be symbolized. Each reference
+ /// is either in `issue-id` or in `issuecomment-id` format.
+ Set<String> get worklist;
+ @override
+ _$BotCommandCopyWith<_BotCommand> get copyWith;
+}
+
+/// @nodoc
+class _$SymbolizationOverridesTearOff {
+ const _$SymbolizationOverridesTearOff();
+
+// ignore: unused_element
+ _SymbolizationOverrides call(
+ {@nullable String engineHash,
+ @nullable String flutterVersion,
+ @nullable String arch,
+ @nullable String mode,
+ bool force = false,
+ @nullable String format,
+ @nullable String os}) {
+ return _SymbolizationOverrides(
+ engineHash: engineHash,
+ flutterVersion: flutterVersion,
+ arch: arch,
+ mode: mode,
+ force: force,
+ format: format,
+ os: os,
+ );
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $SymbolizationOverrides = _$SymbolizationOverridesTearOff();
+
+/// @nodoc
+mixin _$SymbolizationOverrides {
+ @nullable
+ String get engineHash;
+ @nullable
+ String get flutterVersion;
+ @nullable
+ String get arch;
+ @nullable
+ String get mode;
+ bool get force;
+ @nullable
+ String get format;
+ @nullable
+ String get os;
+
+ $SymbolizationOverridesCopyWith<SymbolizationOverrides> get copyWith;
+}
+
+/// @nodoc
+abstract class $SymbolizationOverridesCopyWith<$Res> {
+ factory $SymbolizationOverridesCopyWith(SymbolizationOverrides value,
+ $Res Function(SymbolizationOverrides) then) =
+ _$SymbolizationOverridesCopyWithImpl<$Res>;
+ $Res call(
+ {@nullable String engineHash,
+ @nullable String flutterVersion,
+ @nullable String arch,
+ @nullable String mode,
+ bool force,
+ @nullable String format,
+ @nullable String os});
+}
+
+/// @nodoc
+class _$SymbolizationOverridesCopyWithImpl<$Res>
+ implements $SymbolizationOverridesCopyWith<$Res> {
+ _$SymbolizationOverridesCopyWithImpl(this._value, this._then);
+
+ final SymbolizationOverrides _value;
+ // ignore: unused_field
+ final $Res Function(SymbolizationOverrides) _then;
+
+ @override
+ $Res call({
+ Object engineHash = freezed,
+ Object flutterVersion = freezed,
+ Object arch = freezed,
+ Object mode = freezed,
+ Object force = freezed,
+ Object format = freezed,
+ Object os = freezed,
+ }) {
+ return _then(_value.copyWith(
+ engineHash:
+ engineHash == freezed ? _value.engineHash : engineHash as String,
+ flutterVersion: flutterVersion == freezed
+ ? _value.flutterVersion
+ : flutterVersion as String,
+ arch: arch == freezed ? _value.arch : arch as String,
+ mode: mode == freezed ? _value.mode : mode as String,
+ force: force == freezed ? _value.force : force as bool,
+ format: format == freezed ? _value.format : format as String,
+ os: os == freezed ? _value.os : os as String,
+ ));
+ }
+}
+
+/// @nodoc
+abstract class _$SymbolizationOverridesCopyWith<$Res>
+ implements $SymbolizationOverridesCopyWith<$Res> {
+ factory _$SymbolizationOverridesCopyWith(_SymbolizationOverrides value,
+ $Res Function(_SymbolizationOverrides) then) =
+ __$SymbolizationOverridesCopyWithImpl<$Res>;
+ @override
+ $Res call(
+ {@nullable String engineHash,
+ @nullable String flutterVersion,
+ @nullable String arch,
+ @nullable String mode,
+ bool force,
+ @nullable String format,
+ @nullable String os});
+}
+
+/// @nodoc
+class __$SymbolizationOverridesCopyWithImpl<$Res>
+ extends _$SymbolizationOverridesCopyWithImpl<$Res>
+ implements _$SymbolizationOverridesCopyWith<$Res> {
+ __$SymbolizationOverridesCopyWithImpl(_SymbolizationOverrides _value,
+ $Res Function(_SymbolizationOverrides) _then)
+ : super(_value, (v) => _then(v as _SymbolizationOverrides));
+
+ @override
+ _SymbolizationOverrides get _value => super._value as _SymbolizationOverrides;
+
+ @override
+ $Res call({
+ Object engineHash = freezed,
+ Object flutterVersion = freezed,
+ Object arch = freezed,
+ Object mode = freezed,
+ Object force = freezed,
+ Object format = freezed,
+ Object os = freezed,
+ }) {
+ return _then(_SymbolizationOverrides(
+ engineHash:
+ engineHash == freezed ? _value.engineHash : engineHash as String,
+ flutterVersion: flutterVersion == freezed
+ ? _value.flutterVersion
+ : flutterVersion as String,
+ arch: arch == freezed ? _value.arch : arch as String,
+ mode: mode == freezed ? _value.mode : mode as String,
+ force: force == freezed ? _value.force : force as bool,
+ format: format == freezed ? _value.format : format as String,
+ os: os == freezed ? _value.os : os as String,
+ ));
+ }
+}
+
+/// @nodoc
+class _$_SymbolizationOverrides implements _SymbolizationOverrides {
+ _$_SymbolizationOverrides(
+ {@nullable this.engineHash,
+ @nullable this.flutterVersion,
+ @nullable this.arch,
+ @nullable this.mode,
+ this.force = false,
+ @nullable this.format,
+ @nullable this.os})
+ : assert(force != null);
+
+ @override
+ @nullable
+ final String engineHash;
+ @override
+ @nullable
+ final String flutterVersion;
+ @override
+ @nullable
+ final String arch;
+ @override
+ @nullable
+ final String mode;
+ @JsonKey(defaultValue: false)
+ @override
+ final bool force;
+ @override
+ @nullable
+ final String format;
+ @override
+ @nullable
+ final String os;
+
+ @override
+ String toString() {
+ return 'SymbolizationOverrides(engineHash: $engineHash, flutterVersion: $flutterVersion, arch: $arch, mode: $mode, force: $force, format: $format, os: $os)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _SymbolizationOverrides &&
+ (identical(other.engineHash, engineHash) ||
+ const DeepCollectionEquality()
+ .equals(other.engineHash, engineHash)) &&
+ (identical(other.flutterVersion, flutterVersion) ||
+ const DeepCollectionEquality()
+ .equals(other.flutterVersion, flutterVersion)) &&
+ (identical(other.arch, arch) ||
+ const DeepCollectionEquality().equals(other.arch, arch)) &&
+ (identical(other.mode, mode) ||
+ const DeepCollectionEquality().equals(other.mode, mode)) &&
+ (identical(other.force, force) ||
+ const DeepCollectionEquality().equals(other.force, force)) &&
+ (identical(other.format, format) ||
+ const DeepCollectionEquality().equals(other.format, format)) &&
+ (identical(other.os, os) ||
+ const DeepCollectionEquality().equals(other.os, os)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(engineHash) ^
+ const DeepCollectionEquality().hash(flutterVersion) ^
+ const DeepCollectionEquality().hash(arch) ^
+ const DeepCollectionEquality().hash(mode) ^
+ const DeepCollectionEquality().hash(force) ^
+ const DeepCollectionEquality().hash(format) ^
+ const DeepCollectionEquality().hash(os);
+
+ @override
+ _$SymbolizationOverridesCopyWith<_SymbolizationOverrides> get copyWith =>
+ __$SymbolizationOverridesCopyWithImpl<_SymbolizationOverrides>(
+ this, _$identity);
+}
+
+abstract class _SymbolizationOverrides implements SymbolizationOverrides {
+ factory _SymbolizationOverrides(
+ {@nullable String engineHash,
+ @nullable String flutterVersion,
+ @nullable String arch,
+ @nullable String mode,
+ bool force,
+ @nullable String format,
+ @nullable String os}) = _$_SymbolizationOverrides;
+
+ @override
+ @nullable
+ String get engineHash;
+ @override
+ @nullable
+ String get flutterVersion;
+ @override
+ @nullable
+ String get arch;
+ @override
+ @nullable
+ String get mode;
+ @override
+ bool get force;
+ @override
+ @nullable
+ String get format;
+ @override
+ @nullable
+ String get os;
+ @override
+ _$SymbolizationOverridesCopyWith<_SymbolizationOverrides> get copyWith;
+}
+
+ServerConfig _$ServerConfigFromJson(Map<String, dynamic> json) {
+ return _ServerConfig.fromJson(json);
+}
+
+/// @nodoc
+class _$ServerConfigTearOff {
+ const _$ServerConfigTearOff();
+
+// ignore: unused_element
+ _ServerConfig call(
+ {String githubToken, String sendgridToken, String failureEmail}) {
+ return _ServerConfig(
+ githubToken: githubToken,
+ sendgridToken: sendgridToken,
+ failureEmail: failureEmail,
+ );
+ }
+
+// ignore: unused_element
+ ServerConfig fromJson(Map<String, Object> json) {
+ return ServerConfig.fromJson(json);
+ }
+}
+
+/// @nodoc
+// ignore: unused_element
+const $ServerConfig = _$ServerConfigTearOff();
+
+/// @nodoc
+mixin _$ServerConfig {
+ String get githubToken;
+ String get sendgridToken;
+ String get failureEmail;
+
+ Map<String, dynamic> toJson();
+ $ServerConfigCopyWith<ServerConfig> get copyWith;
+}
+
+/// @nodoc
+abstract class $ServerConfigCopyWith<$Res> {
+ factory $ServerConfigCopyWith(
+ ServerConfig value, $Res Function(ServerConfig) then) =
+ _$ServerConfigCopyWithImpl<$Res>;
+ $Res call({String githubToken, String sendgridToken, String failureEmail});
+}
+
+/// @nodoc
+class _$ServerConfigCopyWithImpl<$Res> implements $ServerConfigCopyWith<$Res> {
+ _$ServerConfigCopyWithImpl(this._value, this._then);
+
+ final ServerConfig _value;
+ // ignore: unused_field
+ final $Res Function(ServerConfig) _then;
+
+ @override
+ $Res call({
+ Object githubToken = freezed,
+ Object sendgridToken = freezed,
+ Object failureEmail = freezed,
+ }) {
+ return _then(_value.copyWith(
+ githubToken:
+ githubToken == freezed ? _value.githubToken : githubToken as String,
+ sendgridToken: sendgridToken == freezed
+ ? _value.sendgridToken
+ : sendgridToken as String,
+ failureEmail: failureEmail == freezed
+ ? _value.failureEmail
+ : failureEmail as String,
+ ));
+ }
+}
+
+/// @nodoc
+abstract class _$ServerConfigCopyWith<$Res>
+ implements $ServerConfigCopyWith<$Res> {
+ factory _$ServerConfigCopyWith(
+ _ServerConfig value, $Res Function(_ServerConfig) then) =
+ __$ServerConfigCopyWithImpl<$Res>;
+ @override
+ $Res call({String githubToken, String sendgridToken, String failureEmail});
+}
+
+/// @nodoc
+class __$ServerConfigCopyWithImpl<$Res> extends _$ServerConfigCopyWithImpl<$Res>
+ implements _$ServerConfigCopyWith<$Res> {
+ __$ServerConfigCopyWithImpl(
+ _ServerConfig _value, $Res Function(_ServerConfig) _then)
+ : super(_value, (v) => _then(v as _ServerConfig));
+
+ @override
+ _ServerConfig get _value => super._value as _ServerConfig;
+
+ @override
+ $Res call({
+ Object githubToken = freezed,
+ Object sendgridToken = freezed,
+ Object failureEmail = freezed,
+ }) {
+ return _then(_ServerConfig(
+ githubToken:
+ githubToken == freezed ? _value.githubToken : githubToken as String,
+ sendgridToken: sendgridToken == freezed
+ ? _value.sendgridToken
+ : sendgridToken as String,
+ failureEmail: failureEmail == freezed
+ ? _value.failureEmail
+ : failureEmail as String,
+ ));
+ }
+}
+
+@JsonSerializable()
+
+/// @nodoc
+class _$_ServerConfig implements _ServerConfig {
+ _$_ServerConfig({this.githubToken, this.sendgridToken, this.failureEmail});
+
+ factory _$_ServerConfig.fromJson(Map<String, dynamic> json) =>
+ _$_$_ServerConfigFromJson(json);
+
+ @override
+ final String githubToken;
+ @override
+ final String sendgridToken;
+ @override
+ final String failureEmail;
+
+ @override
+ String toString() {
+ return 'ServerConfig(githubToken: $githubToken, sendgridToken: $sendgridToken, failureEmail: $failureEmail)';
+ }
+
+ @override
+ bool operator ==(dynamic other) {
+ return identical(this, other) ||
+ (other is _ServerConfig &&
+ (identical(other.githubToken, githubToken) ||
+ const DeepCollectionEquality()
+ .equals(other.githubToken, githubToken)) &&
+ (identical(other.sendgridToken, sendgridToken) ||
+ const DeepCollectionEquality()
+ .equals(other.sendgridToken, sendgridToken)) &&
+ (identical(other.failureEmail, failureEmail) ||
+ const DeepCollectionEquality()
+ .equals(other.failureEmail, failureEmail)));
+ }
+
+ @override
+ int get hashCode =>
+ runtimeType.hashCode ^
+ const DeepCollectionEquality().hash(githubToken) ^
+ const DeepCollectionEquality().hash(sendgridToken) ^
+ const DeepCollectionEquality().hash(failureEmail);
+
+ @override
+ _$ServerConfigCopyWith<_ServerConfig> get copyWith =>
+ __$ServerConfigCopyWithImpl<_ServerConfig>(this, _$identity);
+
+ @override
+ Map<String, dynamic> toJson() {
+ return _$_$_ServerConfigToJson(this);
+ }
+}
+
+abstract class _ServerConfig implements ServerConfig {
+ factory _ServerConfig(
+ {String githubToken,
+ String sendgridToken,
+ String failureEmail}) = _$_ServerConfig;
+
+ factory _ServerConfig.fromJson(Map<String, dynamic> json) =
+ _$_ServerConfig.fromJson;
+
+ @override
+ String get githubToken;
+ @override
+ String get sendgridToken;
+ @override
+ String get failureEmail;
+ @override
+ _$ServerConfigCopyWith<_ServerConfig> get copyWith;
+}
diff --git a/github-label-notifier/symbolizer/lib/model.g.dart b/github-label-notifier/symbolizer/lib/model.g.dart
new file mode 100644
index 0000000..cb3e3af
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/model.g.dart
@@ -0,0 +1,239 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of symbolizer.model;
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+_$_EngineVariant _$_$_EngineVariantFromJson(Map<String, dynamic> json) {
+ return _$_EngineVariant(
+ os: json['os'] as String,
+ arch: json['arch'] as String,
+ mode: json['mode'] as String,
+ );
+}
+
+Map<String, dynamic> _$_$_EngineVariantToJson(_$_EngineVariant instance) =>
+ <String, dynamic>{
+ 'os': instance.os,
+ 'arch': instance.arch,
+ 'mode': instance.mode,
+ };
+
+_$_EngineBuild _$_$_EngineBuildFromJson(Map<String, dynamic> json) {
+ return _$_EngineBuild(
+ engineHash: json['engineHash'] as String,
+ variant: json['variant'] == null
+ ? null
+ : EngineVariant.fromJson(json['variant'] as Map<String, dynamic>),
+ );
+}
+
+Map<String, dynamic> _$_$_EngineBuildToJson(_$_EngineBuild instance) =>
+ <String, dynamic>{
+ 'engineHash': instance.engineHash,
+ 'variant': instance.variant,
+ };
+
+_$IosCrashFrame _$_$IosCrashFrameFromJson(Map<String, dynamic> json) {
+ return _$IosCrashFrame(
+ no: json['no'] as String,
+ binary: json['binary'] as String,
+ pc: json['pc'] as int,
+ symbol: json['symbol'] as String,
+ offset: json['offset'] as int,
+ location: json['location'] as String,
+ );
+}
+
+Map<String, dynamic> _$_$IosCrashFrameToJson(_$IosCrashFrame instance) =>
+ <String, dynamic>{
+ 'no': instance.no,
+ 'binary': instance.binary,
+ 'pc': instance.pc,
+ 'symbol': instance.symbol,
+ 'offset': instance.offset,
+ 'location': instance.location,
+ };
+
+_$AndroidCrashFrame _$_$AndroidCrashFrameFromJson(Map<String, dynamic> json) {
+ return _$AndroidCrashFrame(
+ no: json['no'] as String,
+ pc: json['pc'] as int,
+ binary: json['binary'] as String,
+ rest: json['rest'] as String,
+ buildId: json['buildId'] as String,
+ );
+}
+
+Map<String, dynamic> _$_$AndroidCrashFrameToJson(
+ _$AndroidCrashFrame instance) =>
+ <String, dynamic>{
+ 'no': instance.no,
+ 'pc': instance.pc,
+ 'binary': instance.binary,
+ 'rest': instance.rest,
+ 'buildId': instance.buildId,
+ };
+
+_$CustomCrashFrame _$_$CustomCrashFrameFromJson(Map<String, dynamic> json) {
+ return _$CustomCrashFrame(
+ no: json['no'] as String,
+ pc: json['pc'] as int,
+ binary: json['binary'] as String,
+ offset: json['offset'] as int,
+ location: json['location'] as String,
+ symbol: json['symbol'] as String,
+ );
+}
+
+Map<String, dynamic> _$_$CustomCrashFrameToJson(_$CustomCrashFrame instance) =>
+ <String, dynamic>{
+ 'no': instance.no,
+ 'pc': instance.pc,
+ 'binary': instance.binary,
+ 'offset': instance.offset,
+ 'location': instance.location,
+ 'symbol': instance.symbol,
+ };
+
+_$DartvmCrashFrame _$_$DartvmCrashFrameFromJson(Map<String, dynamic> json) {
+ return _$DartvmCrashFrame(
+ pc: json['pc'] as int,
+ binary: json['binary'] as String,
+ offset: json['offset'] as int,
+ );
+}
+
+Map<String, dynamic> _$_$DartvmCrashFrameToJson(_$DartvmCrashFrame instance) =>
+ <String, dynamic>{
+ 'pc': instance.pc,
+ 'binary': instance.binary,
+ 'offset': instance.offset,
+ };
+
+_$_Crash _$_$_CrashFromJson(Map<String, dynamic> json) {
+ return _$_Crash(
+ engineVariant: json['engineVariant'] == null
+ ? null
+ : EngineVariant.fromJson(json['engineVariant'] as Map<String, dynamic>),
+ frames: (json['frames'] as List)
+ ?.map((e) =>
+ e == null ? null : CrashFrame.fromJson(e as Map<String, dynamic>))
+ ?.toList(),
+ format: json['format'] as String,
+ androidMajorVersion: json['androidMajorVersion'] as int,
+ );
+}
+
+Map<String, dynamic> _$_$_CrashToJson(_$_Crash instance) => <String, dynamic>{
+ 'engineVariant': instance.engineVariant,
+ 'frames': instance.frames,
+ 'format': instance.format,
+ 'androidMajorVersion': instance.androidMajorVersion,
+ };
+
+_$_SymbolizationResult _$_$_SymbolizationResultFromJson(
+ Map<String, dynamic> json) {
+ return _$_SymbolizationResult(
+ crash: json['crash'] == null
+ ? null
+ : Crash.fromJson(json['crash'] as Map<String, dynamic>),
+ engineBuild: json['engineBuild'] == null
+ ? null
+ : EngineBuild.fromJson(json['engineBuild'] as Map<String, dynamic>),
+ symbolized: json['symbolized'] as String,
+ notes: (json['notes'] as List)
+ ?.map((e) => e == null
+ ? null
+ : SymbolizationNote.fromJson(e as Map<String, dynamic>))
+ ?.toList() ??
+ [],
+ );
+}
+
+Map<String, dynamic> _$_$_SymbolizationResultToJson(
+ _$_SymbolizationResult instance) =>
+ <String, dynamic>{
+ 'crash': instance.crash?.toJson(),
+ 'engineBuild': instance.engineBuild?.toJson(),
+ 'symbolized': instance.symbolized,
+ 'notes': instance.notes?.map((e) => e?.toJson())?.toList(),
+ };
+
+_$_SymbolizationNote _$_$_SymbolizationNoteFromJson(Map<String, dynamic> json) {
+ return _$_SymbolizationNote(
+ kind: _$enumDecodeNullable(_$SymbolizationNoteKindEnumMap, json['kind']),
+ message: json['message'] as String,
+ );
+}
+
+Map<String, dynamic> _$_$_SymbolizationNoteToJson(
+ _$_SymbolizationNote instance) =>
+ <String, dynamic>{
+ 'kind': _$SymbolizationNoteKindEnumMap[instance.kind],
+ 'message': instance.message,
+ };
+
+T _$enumDecode<T>(
+ Map<T, dynamic> enumValues,
+ dynamic source, {
+ T unknownValue,
+}) {
+ if (source == null) {
+ throw ArgumentError('A value must be provided. Supported values: '
+ '${enumValues.values.join(', ')}');
+ }
+
+ final value = enumValues.entries
+ .singleWhere((e) => e.value == source, orElse: () => null)
+ ?.key;
+
+ if (value == null && unknownValue == null) {
+ throw ArgumentError('`$source` is not one of the supported values: '
+ '${enumValues.values.join(', ')}');
+ }
+ return value ?? unknownValue;
+}
+
+T _$enumDecodeNullable<T>(
+ Map<T, dynamic> enumValues,
+ dynamic source, {
+ T unknownValue,
+}) {
+ if (source == null) {
+ return null;
+ }
+ return _$enumDecode<T>(enumValues, source, unknownValue: unknownValue);
+}
+
+const _$SymbolizationNoteKindEnumMap = {
+ SymbolizationNoteKind.unknownEngineHash: 'unknownEngineHash',
+ SymbolizationNoteKind.unknownAbi: 'unknownAbi',
+ SymbolizationNoteKind.exceptionWhileGettingEngineHash:
+ 'exceptionWhileGettingEngineHash',
+ SymbolizationNoteKind.exceptionWhileSymbolizing: 'exceptionWhileSymbolizing',
+ SymbolizationNoteKind.exceptionWhileLookingByBuildId:
+ 'exceptionWhileLookingByBuildId',
+ SymbolizationNoteKind.defaultedToReleaseBuildIdUnavailable:
+ 'defaultedToReleaseBuildIdUnavailable',
+ SymbolizationNoteKind.noSymbolsAvailableOnIos: 'noSymbolsAvailableOnIos',
+ SymbolizationNoteKind.buildIdMismatch: 'buildIdMismatch',
+ SymbolizationNoteKind.loadBaseDetected: 'loadBaseDetected',
+};
+
+_$_ServerConfig _$_$_ServerConfigFromJson(Map<String, dynamic> json) {
+ return _$_ServerConfig(
+ githubToken: json['githubToken'] as String,
+ sendgridToken: json['sendgridToken'] as String,
+ failureEmail: json['failureEmail'] as String,
+ );
+}
+
+Map<String, dynamic> _$_$_ServerConfigToJson(_$_ServerConfig instance) =>
+ <String, dynamic>{
+ 'githubToken': instance.githubToken,
+ 'sendgridToken': instance.sendgridToken,
+ 'failureEmail': instance.failureEmail,
+ };
diff --git a/github-label-notifier/symbolizer/lib/ndk.dart b/github-label-notifier/symbolizer/lib/ndk.dart
new file mode 100644
index 0000000..25f56b1
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/ndk.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Wrapper around ndk tools used for symbolization.
+library symbolizer.ndk;
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:meta/meta.dart';
+import 'package:path/path.dart' as p;
+
+class Ndk {
+ /// Return information about .text section from the given [object] file.
+ Future<SectionInfo> getTextSectionInfo(String object) async {
+ final result = await _run(_readelfBinary, ['-lW', object]);
+ for (var match in _loadCommandPattern.allMatches(result)) {
+ if (match.namedGroup('flags').trim() == 'R E') {
+ // Found .text section
+ return SectionInfo(
+ fileOffset: int.parse(match.namedGroup('offset')),
+ fileSize: int.parse(match.namedGroup('filesz')),
+ virtualAddress: int.parse(match.namedGroup('vma')),
+ );
+ }
+ }
+ throw 'Failed to find LOAD command for text section in $object';
+ }
+
+ /// Return build-id of the given [object] file.
+ Future<String> getBuildId(String object) async {
+ final result = await _run(_readelfBinary, ['-nW', object]);
+ final match = _buildIdPattern.firstMatch(result);
+ if (match == null) {
+ throw 'Failed to extract build-id from $object';
+ }
+ return match.namedGroup('id');
+ }
+
+ /// Symbolize given [addresses] using information available for the specified
+ /// [arch] in the given [object] file.
+ Future<List<String>> symbolize(
+ {String object, List<String> addresses, String arch}) async {
+ final result = await _run(_llvmSymbolizerBinary, [
+ if (arch != null) '--default-arch=$arch',
+ '--obj',
+ object,
+ '--inlines',
+ ...addresses
+ ]);
+
+ final symbolized = result.replaceAllMapped(_builderPathPattern, (m) {
+ return p.relative(p.normalize(m[0]),
+ from: (m as RegExpMatch).namedGroup('root'));
+ }).split('\n\n');
+ if (symbolized.last == '') symbolized.length--;
+
+ return symbolized;
+ }
+
+ /// Runs `llvm-objdump` on the given [object] and returns all lines produced
+ /// by it.
+ Stream<String> objdump({
+ @required String object,
+ @required String arch,
+ }) async* {
+ final process =
+ await Process.start(_llvmObjdumpBinary, ['--arch=arm64', '-d', object]);
+
+ await for (var line in process.stdout
+ .transform(utf8.decoder)
+ .transform(const LineSplitter())) {
+ yield line;
+ }
+ }
+
+ /// Run the given binary and return its stdout output if the run is
+ /// successful. Otherwise throw an error.
+ static Future<String> _run(String binary, List<String> args) async {
+ final result = await Process.run(binary, args);
+ if (result.exitCode != 0) {
+ throw 'Failed to run ${p.basename(binary)} (${result.exitCode}):\nstdout:\n${result.stdout}\nstderr:\n${result.stderr}';
+ }
+ return result.stdout;
+ }
+}
+
+/// Information about a section extracted from ELF file.
+class SectionInfo {
+ final int fileOffset;
+ final int fileSize;
+ final int virtualAddress;
+
+ SectionInfo({
+ @required this.fileOffset,
+ @required this.fileSize,
+ @required this.virtualAddress,
+ });
+}
+
+final _platform = Platform.isLinux ? 'linux' : 'darwin';
+final _ndkDir = 'tools/android-ndk';
+final _llvmSymbolizerBinary =
+ '${_ndkDir}/toolchains/llvm/prebuilt/$_platform-x86_64/bin/llvm-symbolizer';
+final _llvmObjdumpBinary =
+ '${_ndkDir}/toolchains/llvm/prebuilt/$_platform-x86_64/bin/llvm-objdump';
+final _readelfBinary =
+ '${_ndkDir}/toolchains/llvm/prebuilt/$_platform-x86_64/bin/x86_64-linux-android-readelf';
+final _buildIdPattern = RegExp(r'Build ID:\s+(?<id>[0-9a-f]+)');
+final _loadCommandPattern = RegExp(
+ r'^\s+LOAD\s+(?<offset>0x[0-9a-f]+)\s+(?<vma>0x[0-9a-f]+)\s+(?<phys>0x[0-9a-f]+)\s+(?<filesz>0x[0-9a-f]+)\s+(?<memsz>0x[0-9a-f]+)\s+(?<flags>[^0]+)\s+0x[0-9a-f]+\s*$',
+ multiLine: true);
+final _builderPathPattern =
+ RegExp(r'^(?<root>/(b|opt)/s/w/[\w/]+/src)/out/\S+', multiLine: true);
diff --git a/github-label-notifier/symbolizer/lib/parser.dart b/github-label-notifier/symbolizer/lib/parser.dart
new file mode 100644
index 0000000..893eac0
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/parser.dart
@@ -0,0 +1,435 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Logic for extracting crashes from text.
+library symbolizer.parser;
+
+import 'package:meta/meta.dart';
+
+import 'package:symbolizer/model.dart';
+
+/// Returns [true] if the given text is likely to contain a crash.
+bool containsCrash(String text) {
+ return text.contains(_CrashExtractor._androidCrashMarker) ||
+ text.contains(_CrashExtractor._iosCrashMarker);
+}
+
+/// Extract all crashes from the given [text] using [overrides].
+List<Crash> extractCrashes(String text, {SymbolizationOverrides overrides}) =>
+ _CrashExtractor(text: text, overrides: overrides).crashes;
+
+class _CrashExtractor {
+ final List<String> lines;
+ final SymbolizationOverrides overrides;
+
+ final List<Crash> crashes = <Crash>[];
+
+ int lineNo = 0;
+
+ String os;
+ String arch;
+ String mode;
+ String format;
+ List<CrashFrame> frames;
+
+ RegExp logLinePattern;
+ bool collectingFrames = false;
+ int androidMajorVersion;
+
+ _CrashExtractor({@required String text, this.overrides})
+ : lines = text.split(_lineEnding) {
+ if (overrides?.format == 'internal' && overrides?.os != null) {
+ parseAsCustomBacktrace(_internalFramePattern, overrides.os);
+ } else if (overrides?.force == true && overrides.os == 'ios') {
+ parseAsIosBacktrace();
+ } else {
+ processLines();
+ }
+ }
+
+ // 0x00000001003cb6b4(ios_prod_global -main.m:35)main
+ // 0x000000010539eb10(Flutter + 0x00312b10)
+ final _internalFramePattern = RegExp(
+ r'(?<pc>0x[a-f0-9]+)\s*\((?<binary>\S+)\s+(\+\s+(?<offset>0x[a-f0-9]+)|(?<location>[^+][^\)]+))\)(?<symbol>.*)');
+
+ /// Extract only stack traces from the text which match the given regexp.
+ /// Used when 'internal' override is in effect.
+ void parseAsCustomBacktrace(RegExp pattern, String os) {
+ for (; lineNo < lines.length; lineNo++) {
+ final line = lines[lineNo];
+ final frameMatch = pattern.firstMatch(line);
+
+ if (frameMatch == null) {
+ if (collectingFrames) {
+ endCrash();
+ }
+ continue;
+ }
+
+ if (!collectingFrames) {
+ startCrash(os);
+ mode = 'release';
+ format = 'custom';
+ collectingFrames = true;
+ }
+
+ frames.add(CrashFrame.custom(
+ no: frames.length.toString().padLeft(2, '0'),
+ binary: frameMatch.namedGroup('binary'),
+ pc: int.parse(frameMatch.namedGroup('pc')),
+ symbol: frameMatch.namedGroup('symbol'),
+ offset: frameMatch.namedGroup('offset') != null
+ ? int.parse(frameMatch.namedGroup('offset'))
+ : null,
+ location: frameMatch.namedGroup('location'),
+ ));
+ }
+ endCrash();
+ }
+
+ /// Extract only iOS like stack traces from the text. Used when
+ /// 'force ios' override is in effect.
+ void parseAsIosBacktrace() {
+ for (; lineNo < lines.length; lineNo++) {
+ final line = lines[lineNo];
+
+ final frame = parseIosFrame(line);
+
+ if (frame == null) {
+ if (collectingFrames) {
+ endCrash();
+ }
+ continue;
+ }
+
+ // Allow frames that miss offset and instead contain `(Missing)`
+ // instead of symbol name. This can happen in crashalytics output.
+ if (frame.offset == null &&
+ frame.symbol != CrashFrame.crashalyticsMissingSymbol) {
+ continue;
+ }
+
+ if (!collectingFrames) {
+ startCrash('ios');
+ mode = 'release';
+ collectingFrames = true;
+ }
+
+ frames.add(frame);
+ }
+ endCrash();
+ }
+
+ IosCrashFrame parseIosFrame(String line) {
+ final frameMatch = _iosFramePattern.firstMatch(line);
+ if (frameMatch == null) {
+ return null;
+ }
+ var rest = frameMatch.namedGroup('rest').trim();
+ var location = '';
+ if (rest.endsWith(')')) {
+ final open = rest.lastIndexOf('(');
+ if (open > 0) {
+ location = rest.substring(open + 1, rest.length - 2);
+ rest = rest.substring(0, open).trim();
+ }
+ }
+ final offsetMatch = _offsetSuffixPattern.firstMatch(rest);
+ String symbol;
+ int offset;
+ if (offsetMatch != null) {
+ offset = int.parse(offsetMatch.namedGroup('offset'));
+ symbol = offsetMatch.namedGroup('symbol').trim();
+ } else {
+ symbol = rest.trim();
+ }
+
+ return CrashFrame.ios(
+ no: frameMatch.namedGroup('no'),
+ binary: frameMatch.namedGroup('binary'),
+ pc: int.parse(frameMatch.namedGroup('pc')),
+ symbol: symbol,
+ offset: offset,
+ location: location,
+ );
+ }
+
+ void processLines() {
+ for (; lineNo < lines.length; lineNo++) {
+ var line = lines[lineNo];
+
+ // Strip markdown quote.
+ if (line.startsWith('> ')) {
+ line = line.substring(2);
+ }
+
+ // If we have an indication that we are processing raw logcat or flutter
+ // verbose output then strip the prefix characteristic for those log
+ // types.
+ if (logLinePattern != null) {
+ final m = logLinePattern.firstMatch(line);
+ if (m != null) {
+ line = m.namedGroup('rest');
+ } else {
+ // No longer in the raw log output. If we started collecting a crash
+ // flush it and continue handling the line.
+ endCrash();
+ }
+ }
+
+ if (line.isEmpty) {
+ continue;
+ }
+
+ // First check for crash markers.
+ if (line.contains(_androidCrashMarker)) {
+ // Start of the Android crash.
+ startCrash('android');
+ continue;
+ }
+
+ if (line.contains(_iosCrashMarker)) {
+ // Start of the iOS crash.
+ startCrash('ios');
+ continue;
+ }
+
+ final dartvmCrashMatch = _dartvmCrashMarker.firstMatch(line);
+ if (dartvmCrashMatch != null) {
+ startCrash(dartvmCrashMatch.namedGroup('os'));
+ format = 'dartvm';
+ arch = dartvmCrashMatch.namedGroup('arch');
+ if (arch == 'ia32') {
+ arch = 'x86';
+ }
+ continue;
+ }
+
+ if (format == 'dartvm') {
+ if (line.contains(_endOfDumpStackTracePattern)) {
+ endCrash();
+ continue;
+ }
+
+ final frameMatch = _dartvmFramePattern.firstMatch(line);
+ if (frameMatch != null) {
+ frames.add(CrashFrame.dartvm(
+ pc: int.parse(frameMatch.namedGroup('pc')),
+ binary: frameMatch.namedGroup('binary'),
+ offset: int.parse(frameMatch.namedGroup('offset')),
+ ));
+ }
+ }
+
+ if (os == 'android') {
+ // Handle `Build fingerprint: '...'` line.
+ final androidVersion = _androidBuildFingerprintPattern
+ .firstMatch(line)
+ ?.namedGroup('version');
+ if (androidVersion != null) {
+ androidMajorVersion = int.tryParse(androidVersion.split('.').first);
+ }
+
+ // Handle `ABI: '...'` line.
+ final abiMatch = _androidAbiPattern.firstMatch(line);
+ if (abiMatch != null) {
+ arch = abiMatch.namedGroup('abi');
+ if (arch == 'x86_64') {
+ arch = 'x64';
+ }
+ continue;
+ }
+
+ // Handle backtrace: start.
+ if (_backtraceStartPattern.hasMatch(line)) {
+ collectingFrames = true;
+ continue;
+ }
+
+ // If backtrace has started then process line corresponding for a frame.
+ if (collectingFrames) {
+ final frameMatch = _androidFramePattern.firstMatch(line);
+ if (frameMatch != null) {
+ final rest = frameMatch.namedGroup('rest');
+ final buildIdMatch = _buildIdPattern.firstMatch(rest);
+ frames.add(CrashFrame.android(
+ no: frameMatch.namedGroup('no'),
+ pc: int.parse(frameMatch.namedGroup('pc'), radix: 16),
+ binary: frameMatch.namedGroup('binary'),
+ rest: rest,
+ buildId: buildIdMatch?.namedGroup('id'),
+ ));
+ } else {
+ endCrash();
+ }
+ }
+ continue;
+ }
+
+ if (os == 'ios') {
+ // Handle EOF marking the end of crash report.
+ if (line.contains(_eofPattern)) {
+ endCrash();
+ continue;
+ }
+
+ // Handle line that describes App.framework binary image.
+ // We use it as a marker to detect release mode builds.
+ if (line.contains(_appFrameworkPattern)) {
+ mode = 'release';
+ continue;
+ }
+
+ // Handle `Code Type: ...` line.
+ final abiMatch = _iosAbiPattern.firstMatch(line);
+ if (abiMatch != null) {
+ arch = abiMatch.namedGroup('abi') == 'ARM-64' ? 'arm64' : 'arm32';
+ continue;
+ }
+
+ // Handle `Thread ... Crashed:` line
+ if (line.contains(_crashedThreadPattern)) {
+ collectingFrames = true;
+ continue;
+ }
+
+ if (collectingFrames) {
+ final frame = parseIosFrame(line);
+ if (frame != null) {
+ frames.add(frame);
+ } else {
+ collectingFrames = false;
+ // Don't flush the crash yet - we want to read report until the
+ // end and check if it is a release build or not.
+ }
+ }
+
+ continue;
+ }
+ }
+
+ endCrash();
+ }
+
+ void startCrash(String os) {
+ endCrash();
+ this.os = os;
+ frames = <CrashFrame>[];
+ arch = mode = null;
+ logLinePattern = null;
+ collectingFrames = false;
+ format = 'native';
+ androidMajorVersion = null;
+ if (os == 'android') {
+ detectAndroidLogFormat();
+ }
+ }
+
+ void endCrash() {
+ // We are not interested in crashes where we did not collect any frames.
+ if (frames != null && frames.isNotEmpty) {
+ crashes.add(Crash(
+ engineVariant: EngineVariant(
+ os: os,
+ arch: overrides?.arch ?? arch,
+ mode: overrides?.mode ?? mode,
+ ),
+ frames: frames,
+ format: format,
+ androidMajorVersion: androidMajorVersion,
+ ));
+ }
+ frames = null;
+ collectingFrames = false;
+ logLinePattern = null;
+ }
+
+ /// Android crashes might come from `adb logcat` or `flutter run -v`
+ /// output. In which case we need to strip prefix characteristic for
+ /// those.
+ void detectAndroidLogFormat() {
+ final line = lines[lineNo];
+ if (line.contains(_flutterLogPattern)) {
+ logLinePattern = _flutterLogPattern;
+ guessLaunchMode();
+ } else if (line.contains(_deviceLabPattern)) {
+ logLinePattern = _deviceLabPattern;
+ guessLaunchMode();
+ } else if (line.contains(_logcatPattern)) {
+ logLinePattern = _logcatPattern;
+ }
+ }
+
+ void guessLaunchMode() {
+ if (overrides?.mode != null) {
+ return;
+ }
+
+ // Try to look backwards through log lines to determine launch mode.
+ for (var i = lineNo - 1; i >= 0; i--) {
+ final logLineMatch = logLinePattern.firstMatch(lines[i]);
+ if (logLineMatch == null) {
+ break;
+ }
+ final modeMatch =
+ _launchModePattern.firstMatch(logLineMatch.namedGroup('rest'));
+ if (modeMatch != null) {
+ mode = modeMatch.namedGroup('mode');
+ return;
+ }
+ }
+ }
+
+ static final _androidCrashMarker =
+ '*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***';
+
+ static final _iosCrashMarker =
+ RegExp(r'Incident Identifier:\s+([A-F0-9]+-?)+');
+
+ static final _dartvmCrashMarker =
+ RegExp(r'version=.*on "(?<os>android)_(?<arch>arm|arm64|ia32|x64)"\s*$');
+
+ static final _lineEnding = RegExp(r'\r?\n');
+ static final _logcatPattern = RegExp(r'^.*?:(?=$|\s)\s*(?<rest>.*)$');
+ static final _flutterLogPattern =
+ RegExp(r'^\s*\[\s*(\+?\s*\d+\s*(s|ms|h))?\]\s+(?<rest>.*)$');
+ static final _deviceLabPattern = RegExp(
+ r'(\d+-\d+-\d+T\d+:\d+:\d+.\d+: )?(stdout|stderr):\s*\[\s*(\+?\s*\d+\s*(s|ms|h))?\]\s+(?<rest>.*)');
+
+ static final _androidAbiPattern =
+ RegExp(r"^\s*ABI: '(?<abi>x86|x86_64|x64|arm|arm64)'\s*$");
+
+ // Android Compatibility Definition mandates build fingerprint format to be:
+ //
+ // $(BRAND)/$(PRODUCT)/$(DEVICE):
+ // $(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)
+ //
+ // For our purposes we are only interested in VERSION.RELEASE component of the
+ // fingerprint.
+ //
+ // See https://source.android.com/compatibility/11/android-11-cdd
+ static final _androidBuildFingerprintPattern =
+ RegExp(r"Build fingerprint: '[^:']+:(?<version>[\d\.]+)/[^']*'");
+ static final _backtraceStartPattern = RegExp(r'^\s*backtrace:\s*$');
+ static final _androidFramePattern = RegExp(
+ r'^\s*#(?<no>\d+)\s+pc\s+(?<pc>[0-9a-f]+)\s+(?<binary>[^\s]+)(?<rest>.*)$');
+ static final _buildIdPattern = RegExp(r'\(BuildId: (?<id>[0-9a-f]+)\)');
+ static final _launchModePattern =
+ RegExp(r'^\s*Launching .* on .* in (?<mode>debug|release|profile) mode');
+
+ static final _eofPattern = RegExp(r'^\s*EOF\s*$');
+ static final _appFrameworkPattern = RegExp(
+ r'^\s*0x[a-f0-9]+\s+-\s+0x[a-f0-9]+\s+App\s+arm\w+\s+<[a-f0-9]+>\s+/var/containers');
+ static final _iosAbiPattern = RegExp(r'\s*Code\s+Type:\s+(?<abi>[\-\w]+)\s+');
+ static final _crashedThreadPattern = RegExp(r'^\s*Thread \d+ Crashed:');
+ static final _iosFramePattern = RegExp(
+ r'^\s*(?<no>\d+)\s+(?<binary>\S+)\s+(?<pc>0x[a-f0-9]+)\s+(?<rest>.*)$',
+ unicode: true);
+ static final _offsetSuffixPattern =
+ RegExp(r'^(?<symbol>.*)\s+\+\s+(?<offset>\d+)$');
+
+ static final _endOfDumpStackTracePattern = '-- End of DumpStackTrace';
+ static final _dartvmFramePattern = RegExp(
+ r'(^|\s+)pc\s+(?<pc>0x[a-f0-9]+)\s+fp\s+(?<fp>0x[a-f0-9]+)\s+(?<binary>[^\s+]+)\+(?<offset>0x[a-f0-9]+)');
+}
diff --git a/github-label-notifier/symbolizer/lib/server.dart b/github-label-notifier/symbolizer/lib/server.dart
new file mode 100644
index 0000000..6b9b897
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/server.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// HTTP API for [symbolizer.bot] and [symbolizer.symbolizer] functionality.
+library symbolizer.server;
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:github/github.dart';
+import 'package:github/hooks.dart';
+import 'package:logging/logging.dart';
+import 'package:meta/meta.dart';
+import 'package:pedantic/pedantic.dart';
+
+import 'package:symbolizer/bot.dart';
+import 'package:symbolizer/symbolizer.dart';
+
+final _log = Logger('server');
+
+typedef _RequestHandler = Future<Object> Function(Map<String, dynamic> request);
+
+Future<void> serve(Object address, int port,
+ {@required Symbolizer symbolizer, @required Bot bot}) async {
+ final handlers = <String, _RequestHandler>{
+ '/symbolize': (issue) => symbolizer.symbolize(issue['body']),
+ '/command': (event) async {
+ final repoOrgMember = const {'MEMBER', 'OWNER'}
+ .contains(event['comment']['author_association']);
+ final commentEvent = IssueCommentEvent.fromJson(event);
+ final repo = RepositorySlug.full(event['repository']['full_name']);
+ await bot.executeCommand(repo, commentEvent.issue, commentEvent.comment,
+ authorized: repoOrgMember);
+ return {'status': 'ok'};
+ },
+ };
+
+ // Start the server.
+ final server = await HttpServer.bind(address, port);
+ _log.info('Listening on ${server.address}:${server.port}');
+
+ // Intentionally not processing requests in parallel to avoid racing
+ // in symbol cache.
+ await for (HttpRequest request in server) {
+ _log.info('Incoming request: ${request.method} ${request.requestedUri}');
+ final handler = handlers[request.requestedUri.path];
+ if (request.method != 'POST' || handler == null) {
+ request.response
+ ..statusCode = 404
+ ..write('Not found');
+ unawaited(request.response.close());
+ continue;
+ }
+ try {
+ final requestObj =
+ await utf8.decoder.bind(request).transform(json.decoder).first;
+ final responseJson = jsonEncode(await handler(requestObj));
+ request.response
+ ..statusCode = HttpStatus.ok
+ ..headers.add(HttpHeaders.contentTypeHeader, 'application/json')
+ ..write(responseJson);
+ } catch (e, st) {
+ request.response
+ ..statusCode = HttpStatus.internalServerError
+ ..headers.add(HttpHeaders.contentTypeHeader, 'application/json')
+ ..write(jsonEncode({
+ 'status': 'error',
+ 'message': e.toString(),
+ 'stacktrace': st.toString(),
+ }));
+ }
+ unawaited(request.response.close());
+ }
+}
diff --git a/github-label-notifier/symbolizer/lib/symbolizer.dart b/github-label-notifier/symbolizer/lib/symbolizer.dart
new file mode 100644
index 0000000..f66c5c5
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/symbolizer.dart
@@ -0,0 +1,713 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Symbolizer functionality
+library symbolizer.symbolizer;
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:http/http.dart' as http;
+import 'package:logging/logging.dart';
+import 'package:meta/meta.dart';
+import 'package:path/path.dart' as p;
+import 'package:github/github.dart';
+
+import 'package:symbolizer/model.dart';
+import 'package:symbolizer/ndk.dart';
+import 'package:symbolizer/parser.dart';
+import 'package:symbolizer/symbols.dart';
+
+final _log = Logger('symbolizer');
+
+class Symbolizer {
+ final SymbolsCache symbols;
+ final Ndk ndk;
+ final GitHub github;
+
+ Symbolizer({
+ @required this.symbols,
+ @required this.ndk,
+ @required this.github,
+ });
+
+ /// Process the given [text] to find all crashes and symbolize them.
+ Future<List<SymbolizationResult>> symbolize(String text,
+ {SymbolizationOverrides overrides}) async {
+ final crashes = extractCrashes(text, overrides: overrides);
+ if (crashes.isEmpty) {
+ return [];
+ }
+
+ // First compute engine hash to use for symbolization.
+ String engineHash;
+ try {
+ engineHash = await _guessEngineHash(text, overrides);
+ } catch (e, st) {
+ return _failedToSymbolizeAll(
+ crashes, SymbolizationNoteKind.exceptionWhileGettingEngineHash,
+ error: '$e\n$st');
+ }
+ if (engineHash == null) {
+ return _failedToSymbolizeAll(
+ crashes, SymbolizationNoteKind.unknownEngineHash);
+ }
+
+ return await Future.wait(
+ crashes.map((crash) => _symbolizeCrash(crash, engineHash, overrides)));
+ }
+
+ Future<String> _guessEngineHash(
+ String text, SymbolizationOverrides overrides) async {
+ // Try to establish engine hash based on the content.
+ var engineHash = overrides?.engineHash ??
+ _reEngineHash.firstMatch(text)?.namedGroup('shortHash');
+ if (engineHash == null && overrides?.flutterVersion != null) {
+ engineHash =
+ await _engineHashFromFlutterVersion(overrides.flutterVersion);
+ }
+ if (engineHash != null) {
+ // Try to expand short hash into full hash.
+ final engineCommit = await github.repositories
+ .getCommit(RepositorySlug('flutter', 'engine'), engineHash);
+ engineHash = engineCommit.sha;
+ }
+ if (engineHash == null) {
+ // Try to establish engineHash based on Flutter version
+ final m = _reFlutterVersion.firstMatch(text);
+ if (m != null && m.namedGroup('channel') != 'master') {
+ // Try to use version tag.
+ final tag = m.namedGroup('version');
+ engineHash = await _engineHashFromFlutterVersion(tag);
+ }
+ }
+ return engineHash;
+ }
+
+ Future<String> _engineHashFromFlutterVersion(String version) async {
+ final response = await http.get(
+ 'https://raw.githubusercontent.com/flutter/flutter/${version}/bin/internal/engine.version');
+ if (response.statusCode == HttpStatus.ok) {
+ return response.body.trim();
+ }
+ return null;
+ }
+
+ Future<SymbolizationResult> _symbolizeCrashWith(
+ Crash crash, EngineBuild engineBuild) async {
+ try {
+ final symbolsDir = await symbols.get(engineBuild);
+ return await _symbolizeCrashWithGivenSymbols(
+ crash, symbolsDir, engineBuild);
+ } catch (e, st) {
+ return _failedToSymbolize(
+ crash, SymbolizationNoteKind.exceptionWhileSymbolizing,
+ error: '{$engineBuild} $e\n$st');
+ }
+ }
+
+ Future<SymbolizationResult> _symbolizeCrash(
+ Crash crash, String engineHash, SymbolizationOverrides overrides) async {
+ // Apply overrides
+ if (crash.engineVariant.arch == null) {
+ return _failedToSymbolize(crash, SymbolizationNoteKind.unknownAbi);
+ }
+
+ EngineBuild engineBuild;
+
+ final buildId = _findBuildIdInFrames(crash.frames);
+ // Even if buildId is available we don't use it for matching
+ // if mode was found heuristically or was specified through overrides
+ // already.
+ if (crash.engineVariant.mode != null ||
+ overrides?.mode != null ||
+ buildId == null) {
+ // Currently on iOS we only have symbols for release builds.
+ if (crash.engineVariant.os == 'ios') {
+ if (crash.engineVariant.mode != 'release') {
+ return _failedToSymbolize(
+ crash, SymbolizationNoteKind.noSymbolsAvailableOnIos);
+ }
+ }
+
+ engineBuild = EngineBuild(
+ engineHash: engineHash,
+ variant: crash.engineVariant.copyWith(
+ mode: crash.engineVariant.mode ?? overrides?.mode ?? 'release'),
+ );
+
+ // Note: on iOS build ids (LC_UUID) don't seem to match between
+ // archived dSYMs and what users report, so we can't rely on them
+ // for matching dSYMs to crash reports.
+ } else {
+ try {
+ engineBuild = await symbols.findVariantByBuildId(
+ variant: crash.engineVariant,
+ engineHash: engineHash,
+ buildId: buildId);
+ } catch (e) {
+ return _failedToSymbolize(
+ crash, SymbolizationNoteKind.exceptionWhileLookingByBuildId,
+ error: '(${buildId}) $e');
+ }
+ }
+
+ var result = await _symbolizeCrashWith(crash, engineBuild);
+
+ if (result.symbolized != null &&
+ buildId == null &&
+ overrides?.mode == null &&
+ (crash.engineVariant.mode == null ||
+ crash.engineVariant.mode != 'release')) {
+ result = result
+ .withNote(SymbolizationNoteKind.defaultedToReleaseBuildIdUnavailable);
+ }
+
+ // We might have used wrong symbols for symbolization (because we were
+ // forced or because our heuristics failed for some reason).
+ if (buildId != null) {
+ final symbolsDir = await symbols.get(engineBuild);
+ final engineBuildId =
+ await ndk.getBuildId(p.join(symbolsDir, 'libflutter.so'));
+ if (engineBuildId != buildId) {
+ result = result.withNote(SymbolizationNoteKind.buildIdMismatch,
+ 'Backtrace refers to ${buildId} but we used engine with ${engineBuildId}');
+ }
+ }
+
+ return result;
+ }
+
+ static String _findBuildIdInFrames(List<CrashFrame> frames) => frames
+ .whereType<AndroidCrashFrame>()
+ .firstWhere(
+ (frame) =>
+ frame.binary.endsWith('libflutter.so') && frame.buildId != null,
+ orElse: () => null)
+ ?.buildId;
+
+ Future<SymbolizationResult> _symbolizeCrashWithGivenSymbols(
+ Crash crash, String symbolsDir, EngineBuild build) {
+ final result =
+ SymbolizationResult(engineBuild: build, crash: crash, symbolized: null);
+ if (crash.format == 'dartvm') {
+ return _symbolizeDartvmFrames(
+ result,
+ crash.frames.cast<DartvmCrashFrame>(),
+ crash.engineVariant.arch,
+ symbolsDir,
+ );
+ } else if (crash.format == 'custom') {
+ return _symbolizeCustomFrames(
+ result,
+ crash.frames.cast<CustomCrashFrame>(),
+ crash.engineVariant.arch,
+ build,
+ symbolsDir,
+ );
+ } else if (crash.engineVariant.os == 'android') {
+ return _symbolizeAndroidFrames(
+ result,
+ crash.frames.cast<AndroidCrashFrame>(),
+ crash.engineVariant.arch,
+ symbolsDir,
+ crash.androidMajorVersion,
+ );
+ } else {
+ return _symbolizeIosFrames(
+ result,
+ crash.frames.cast<IosCrashFrame>(),
+ crash.engineVariant.arch,
+ build,
+ symbolsDir,
+ );
+ }
+ }
+
+ Future<SymbolizationResult> _symbolizeGeneric<FrameType extends CrashFrame>({
+ @required SymbolizationResult result,
+ @required List<FrameType> frames,
+ @required String arch,
+ @required String object,
+ @required bool Function(FrameType) shouldSymbolize,
+ @required int Function(FrameType) getRelativePC,
+ @required FutureOr<int> Function(Iterable<FrameType>) computePCBias,
+ @required String Function(FrameType) frameSuffix,
+ @required bool shouldAdjustInnerPCs,
+ }) async {
+ _log.info('Symbolizing using ${object}');
+
+ final worklist = <int>{};
+
+ // First collect Flutter Engine frames.
+ final binaryName = p.basename(object);
+ for (var i = 0; i < frames.length; i++) {
+ if (frames[i].binary.endsWith(binaryName) && shouldSymbolize(frames[i])) {
+ worklist.add(i);
+ }
+ }
+
+ final symbolized = <int, String>{};
+ if (worklist.isNotEmpty) {
+ final vmaBias = await computePCBias(worklist.map((i) => frames[i]));
+ symbolized.addAll(Map.fromIterables(
+ worklist,
+ await ndk.symbolize(
+ object: object,
+ arch: arch,
+ addresses: worklist
+ .map((i) {
+ return getRelativePC(frames[i]) +
+ vmaBias +
+ (shouldAdjustInnerPCs && i > 0 ? -1 : 0);
+ })
+ .map(_asHex)
+ .toList())));
+ }
+
+ // Assemble the result.
+ final pcSize = _pointerSize(arch);
+ final buf = StringBuffer();
+ for (var i = 0; i < frames.length; i++) {
+ final frame = frames[i];
+ final prefix =
+ '#${i.toString().padLeft(2, '0')} ${_addrHex(frame.pc, pcSize)} ${_shortBinaryName(frame.binary)}';
+ buf.write(prefix);
+ buf.writeln(frameSuffix(frame));
+ if (worklist.contains(i)) {
+ final indent = ' ' * (prefix.length + 1);
+ for (var line in symbolized[i].split('\n')) {
+ buf.write(indent);
+ buf.writeln(line);
+ }
+ }
+ }
+
+ return result.copyWith(symbolized: buf.toString());
+ }
+
+ Future<SymbolizationResult> _symbolizeAndroidFrames(
+ SymbolizationResult result,
+ List<AndroidCrashFrame> frames,
+ String arch,
+ String symbolsDir,
+ int androidMajorVersion,
+ ) async {
+ final flutterSo = p.join(symbolsDir, 'libflutter.so');
+ return _symbolizeGeneric<AndroidCrashFrame>(
+ result: result,
+ frames: frames,
+ arch: arch,
+ object: flutterSo,
+ shouldSymbolize: (_) => true,
+ getRelativePC: (frame) => frame.pc,
+ shouldAdjustInnerPCs: false, // Android unwinder already adjusted it.
+ computePCBias: (frames) async {
+ if ((androidMajorVersion ?? 0) >= 11) {
+ return 0;
+ }
+ // Prior to Android 11 backtraces printed by debuggerd contained PCs
+ // which can't be directly used for symbolization. Very old versions
+ // of Android printed offsets into RX mapping, while newer versions
+ // printed ELF file offsets. We try to differentiate between these two
+ // situations by checking if any PCs are outside of .text section range.
+ // In both cases we can't directly use this PC for symbolization because
+ // it does not necessarily match VMAs used in the ELF file (which is
+ // what llvm-symbolizer would need for symbolization).
+ final textSection = await ndk.getTextSectionInfo(flutterSo);
+ final textStart = textSection.fileOffset;
+ final textEnd = textSection.fileOffset + textSection.fileSize;
+ final likelySectionOffset =
+ !frames.every((f) => textStart <= f.pc && f.pc < textEnd);
+ return likelySectionOffset
+ ? (textSection.virtualAddress & ~0xfff)
+ : (textSection.virtualAddress - textSection.fileOffset);
+ },
+ frameSuffix: (frame) => ' ${frame.rest.trimLeft()}',
+ );
+ }
+
+ Future<SymbolizationResult> _symbolizeDartvmFrames(SymbolizationResult result,
+ List<DartvmCrashFrame> frames, String arch, String symbolsDir) async {
+ final flutterSo = p.join(symbolsDir, 'libflutter.so');
+ return _symbolizeGeneric(
+ result: result,
+ frames: frames,
+ arch: arch,
+ object: flutterSo,
+ shouldSymbolize: (_) => true,
+ getRelativePC: (frame) => frame.offset,
+ shouldAdjustInnerPCs: true,
+ computePCBias: (frames) async {
+ // For now we assume that we only get Dart VM crash stacks from Android.
+ //
+ // There we get output like libflutter.so+offset where offset is
+ // PC minus base of libflutter.so (as returned by dladdr), which
+ // corresponds to the address of the first page mapped from ELF file.
+ //
+ // Important thing to note here is that RX mapping would use aligned
+ // file offset (textSection.fileOffset & ~pageMask). This might increase
+ // the distance between SO base and PC by 1 page if testSection.fileOffset
+ // is not aligned:
+ //
+ // RO RX PC
+ // [ ][ * ]
+ // | |
+ // B B + fileOffset
+ // 0
+ //
+ // If fileOffset is misaligned then subtracting B from PC does not yield
+ // file offset corresponding to the PC, but rather file offset plus
+ // pageSize, so we need to accomodate for that in VMA adjustment.
+ const pageSize = 4096;
+ const pageMask = pageSize - 1;
+
+ final textSection = await ndk.getTextSectionInfo(flutterSo);
+ final loadBias = textSection.virtualAddress - textSection.fileOffset;
+ return loadBias -
+ (((textSection.fileOffset & pageMask) + pageMask) & ~pageMask);
+ },
+ frameSuffix: (frame) => '+${_asHex(frame.offset)}',
+ );
+ }
+
+ /// Pattern for extracting information from ARM64 objdump output.
+ static final _objdumpPattern =
+ RegExp(r'^\s*(?<addr>[a-f0-9]+):\s+([a-f0-9]{2}\s+){4}(?<op>\w+)');
+
+ /// Extract information about calls (branch-link instruction) locations
+ /// in the binary.
+ Future<_CallLocations> _determineCallLocations(EngineBuild build) async {
+ if (build.variant.arch != 'arm64') {
+ return null;
+ }
+
+ final flutterSo = await symbols.getEngineBinary(build);
+ if (flutterSo == null) {
+ return null;
+ }
+
+ int startAddr, endAddr;
+ final isCallAt = <bool>[];
+ await for (var line
+ in ndk.objdump(object: flutterSo, arch: build.variant.arch)) {
+ final m = _objdumpPattern.firstMatch(line);
+ if (m == null) continue;
+
+ final addr = int.parse(m.namedGroup('addr'), radix: 16);
+ startAddr ??= addr;
+ endAddr = addr;
+ final op = m.namedGroup('op');
+ isCallAt.add(op.startsWith('bl'));
+ }
+ final codeSize = endAddr - startAddr + 4;
+ if (codeSize != isCallAt.length * 4) {
+ // Something went wrong.
+ return null;
+ }
+
+ return _CallLocations(startAddr, isCallAt);
+ }
+
+ /// Try to guess load base for flutter engine shared object using
+ /// information about possible call locations in the binary and the
+ /// list of return addresses in the backtrace.
+ ///
+ /// We are going to look through the binary trying to find call locations
+ /// which have the same relative offsets to each other as the given pcs.
+ /// Each such group gives us potential load base.
+ Future<_LoadBase> _tryFindLoadBase(
+ EngineBuild build, List<int> retAddrs) async {
+ _log.info('looking for load base of ${build} based on ${retAddrs}');
+ if (retAddrs.length < 2) {
+ return null; // Need at least two retAddrs.
+ }
+
+ // We don't expect any misaligned retAddrs, but some Crashlytics reports
+ // contain such. Give up for now.
+ if (retAddrs.any((e) => e & 3 != 0)) {
+ return null;
+ }
+
+ final calls = await _determineCallLocations(build);
+ if (calls == null) {
+ return null;
+ }
+
+ var loadBase = _tryFindLoadBaseImpl(build, retAddrs, calls);
+ if (loadBase != null) {
+ return _LoadBase(loadBase: loadBase, pcAdjusted: false);
+ }
+
+ // Maybe unwinder already adjusted return addressed by -4.
+ loadBase = _tryFindLoadBaseImpl(
+ build, retAddrs.map((pc) => pc + 4).toList(), calls);
+ if (loadBase != null) {
+ return _LoadBase(loadBase: loadBase, pcAdjusted: true);
+ }
+
+ return null;
+ }
+
+ int _tryFindLoadBaseImpl(
+ EngineBuild build, List<int> retAddrs, _CallLocations calls) {
+ const arm64InstrSize = 4;
+ const arm64InstrShift = 2;
+ const pageSize = 0x1000;
+ const pageMask = pageSize - 1;
+
+ final retAddr = retAddrs.first;
+ final possibleBases = <int>[];
+
+ // Look through the binary for all calls such that pc - callAddr (which can be
+ // computed as `calls.startAddr + callIdx * arm64InstrSize`) is page aligned
+ // (this difference yields us possible base).
+ // We start by selecting base in such a way that the retAddr falls on the
+ // first page of the .text section and then start moving base down in
+ // pageSize increments.
+ final callVma = retAddr - arm64InstrSize - calls.startAddr;
+ for (var callIdx = (callVma & pageMask) >> arm64InstrShift,
+ base = callVma & ~pageMask;
+ callIdx < calls.size && base >= 0;
+ callIdx += pageSize >> arm64InstrShift, base -= pageSize) {
+ if (calls._isCallAt[callIdx]) {
+ if (retAddrs
+ .every((pc) => calls.isCallAt(pc - arm64InstrSize - base))) {
+ // Possible base: pc - arm64InstrSize - base hits call in the
+ // binary for all retAddrs.
+ possibleBases.add(base);
+ }
+ }
+ }
+
+ // Single possible base found - return it.
+ if (possibleBases.length == 1) {
+ _log.info('found load base of ${build} based on ${retAddrs}: '
+ '${possibleBases.first}');
+ return possibleBases.first;
+ }
+
+ // Either no bases or more than a single possibility found.
+ _log.info(
+ 'found ${possibleBases.isEmpty ? 'no' : 'multiple'} potential load '
+ 'bases of ${build} based on ${retAddrs}: ${possibleBases}');
+ return null;
+ }
+
+ Future<SymbolizationResult> _symbolizeIosFrames(
+ SymbolizationResult result,
+ List<IosCrashFrame> frames,
+ String arch,
+ EngineBuild build,
+ String symbolsDir) async {
+ final object =
+ p.join(symbolsDir, 'Flutter.dSYM/Contents/Resources/DWARF/Flutter');
+
+ // Returns [true] if the given frame is a frame for Flutter
+ // engine binary which misses an offset.
+ bool isFrameMissingOffset(IosCrashFrame frame) {
+ return frame.offset == null &&
+ frame.binary == 'Flutter' &&
+ frame.symbol == CrashFrame.crashalyticsMissingSymbol;
+ }
+
+ var adjustInnerPCs = true;
+
+ // If there are frames with missing offsets found try to guess
+ // load base using a heuristic based on all return addresses from the
+ // backtrace.
+ final framesWithoutOffsets = frames.where(isFrameMissingOffset).toList();
+ if (framesWithoutOffsets.isNotEmpty) {
+ final loadBase = await _tryFindLoadBase(
+ build,
+ framesWithoutOffsets
+ .where((frame) => int.parse(frame.no) > 0)
+ .map((frame) => frame.pc)
+ .toSet()
+ .toList());
+ if (loadBase != null) {
+ // Success: managed to find a single possiblity. Compute relative pcs
+ // using this loadBase and add a note to the symbolization result.
+ adjustInnerPCs = !loadBase.pcAdjusted;
+ result = result.withNote(SymbolizationNoteKind.loadBaseDetected,
+ _addrHex(loadBase.loadBase, _pointerSize(build.variant.arch)));
+ frames = frames.map((frame) {
+ if (isFrameMissingOffset(frame)) {
+ return frame.copyWith(
+ offset: frame.pc - loadBase.loadBase,
+ symbol: 'Flutter',
+ );
+ }
+ return frame;
+ }).toList();
+ }
+ }
+
+ return _symbolizeGeneric<IosCrashFrame>(
+ result: result,
+ frames: frames,
+ arch: arch,
+ object: object,
+ shouldSymbolize: (frame) =>
+ frame.symbol == 'Flutter' || frame.symbol.startsWith('0x'),
+ shouldAdjustInnerPCs: adjustInnerPCs,
+ getRelativePC: (frame) => frame.offset,
+ computePCBias: (frames) => 0,
+ frameSuffix: (frame) => [
+ '',
+ frame.symbol,
+ if (frame.offset != null) '+',
+ if (frame.offset != null) frame.offset,
+ if (frame.location.isNotEmpty) '(${frame.location.trimLeft()})',
+ ].join(' '),
+ );
+ }
+
+ Future<SymbolizationResult> _symbolizeCustomFrames(
+ SymbolizationResult result,
+ List<CustomCrashFrame> frames,
+ String arch,
+ EngineBuild build,
+ String symbolsDir) async {
+ // For now we assuem
+ final object = p.join(
+ symbolsDir,
+ build.variant.os == 'ios'
+ ? 'Flutter.dSYM/Contents/Resources/DWARF/Flutter'
+ : 'libflutter.so');
+
+ // Returns [true] if the given frame is a frame for Flutter
+ // engine binary which misses an offset.
+ bool isFrameMissingOffset(CustomCrashFrame frame) {
+ return /*frame.offset == null &&*/ frame.binary == 'Flutter';
+ }
+
+ var adjustInnerPCs = true;
+
+ // If there are frames with missing offsets found try to guess
+ // load base using a heuristic based on all return addresses from the
+ // backtrace.
+ final framesWithoutOffsets = frames.where(isFrameMissingOffset).toList();
+ if (framesWithoutOffsets.isNotEmpty) {
+ final loadBase = await _tryFindLoadBase(
+ build,
+ framesWithoutOffsets
+ .where((frame) => int.parse(frame.no) > 0)
+ .map((frame) => frame.pc)
+ .toSet()
+ .toList());
+ if (loadBase != null) {
+ // Success: managed to find a single possiblity. Compute relative pcs
+ // using this loadBase and add a note to the symbolization result.
+ adjustInnerPCs = !loadBase.pcAdjusted;
+ result = result.withNote(SymbolizationNoteKind.loadBaseDetected,
+ _addrHex(loadBase.loadBase, _pointerSize(build.variant.arch)));
+ frames = frames.map((frame) {
+ if (isFrameMissingOffset(frame)) {
+ return frame.copyWith(
+ offset: frame.pc - loadBase.loadBase,
+ symbol: 'Flutter',
+ );
+ }
+ return frame;
+ }).toList();
+ }
+ }
+
+ return _symbolizeGeneric<CustomCrashFrame>(
+ result: result,
+ frames: frames,
+ arch: arch,
+ object: object,
+ shouldSymbolize: (frame) => true,
+ shouldAdjustInnerPCs: adjustInnerPCs,
+ getRelativePC: (frame) => frame.offset,
+ computePCBias: (frames) => 0,
+ frameSuffix: (frame) => [
+ '',
+ if (frame.symbol != null && frame.symbol.isNotEmpty)
+ frame.symbol
+ else
+ frame.binary,
+ if (frame.offset != null) '+',
+ if (frame.offset != null) frame.offset,
+ if (frame.location != null) frame.location.trimLeft(),
+ ].join(' '),
+ );
+ }
+}
+
+final _appBinaryPattern = RegExp(r'^/data/app/(~~[^/]+/)?[^/]+/(?<name>.*)$');
+String _shortBinaryName(String binary) {
+ final m = _appBinaryPattern.firstMatch(binary);
+ if (m != null) {
+ return '<...>/${m.namedGroup('name')}';
+ }
+ return binary;
+}
+
+int _pointerSize(String arch) {
+ switch (arch) {
+ case 'arm64':
+ case 'x64':
+ return 8 * 2;
+ default:
+ return 4 * 2;
+ }
+}
+
+String _addrHex(int v, int pointerSize) =>
+ v.toRadixString(16).padLeft(pointerSize, '0');
+
+String _asHex(int v) => '0x${v.toRadixString(16)}';
+
+List<SymbolizationResult> _failedToSymbolizeAll(
+ List<Crash> crashes, SymbolizationNoteKind note, {Object error}) =>
+ crashes
+ .map((crash) => _failedToSymbolize(crash, note, error: error))
+ .toList();
+
+SymbolizationResult _failedToSymbolize(Crash crash, SymbolizationNoteKind note,
+ {Object error}) =>
+ SymbolizationResult(
+ crash: crash,
+ engineBuild: null,
+ symbolized: null,
+ notes: [SymbolizationNote(kind: note, message: error?.toString())],
+ );
+
+final _reEngineHash =
+ RegExp(r'(• Engine|Engine •) revision (?<shortHash>[a-f0-9]+)');
+final _reFlutterVersion = RegExp(
+ r'Flutter \(Channel (?<channel>master|dev|beta|stable), (?<version>[^,]+),');
+
+/// Information about call locations within the flutter engine binary.
+/// Used to heuristically guess load base for flutter engine when it is
+/// not available in the output.
+///
+/// Currently heuristics only work on ARM64, which allows us to assume
+/// fixed instruction size (4 bytes).
+class _CallLocations {
+ /// Base VMA for the .text section.
+ final int startAddr;
+
+ /// Contains [true] if instruction with the given index is a branch-link (bl).
+ final List<bool> _isCallAt;
+
+ _CallLocations(this.startAddr, this._isCallAt);
+
+ int get size => _isCallAt.length;
+
+ bool isCallAt(int addr) {
+ if (addr < startAddr) return false;
+ final i = (addr - startAddr) >> 2;
+ return i < size && _isCallAt[i];
+ }
+}
+
+class _LoadBase {
+ final int loadBase;
+ final bool pcAdjusted;
+ _LoadBase({this.loadBase, this.pcAdjusted});
+}
diff --git a/github-label-notifier/symbolizer/lib/symbols.dart b/github-label-notifier/symbolizer/lib/symbols.dart
new file mode 100644
index 0000000..be82d9f
--- /dev/null
+++ b/github-label-notifier/symbolizer/lib/symbols.dart
@@ -0,0 +1,298 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Utilities for downloading and locally caching symbol files.
+library symbolizer.symbols;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:logging/logging.dart';
+import 'package:meta/meta.dart';
+import 'package:path/path.dart' as p;
+
+import 'package:symbolizer/model.dart';
+import 'package:symbolizer/ndk.dart';
+
+final _log = Logger('symbols');
+
+/// Local cache of symbol files downloaded from Cloud Storage bucket.
+class SymbolsCache {
+ final Ndk _ndk;
+
+ /// Local path at which this cache is located.
+ final String _path;
+
+ /// Number of entries in the cache after which we will start trying to
+ /// evict all entries which were not touched for longer than
+ /// [evictionThreshold].
+ final int _sizeThreshold;
+
+ /// Threshold past which an unused entry in the cache is considered evictable.
+ final Duration _evictionThreshold;
+
+ /// Map describing when symbols for the given [EngineBuild] were used
+ /// last time.
+ final Map<String, int> _lastUsedTimestamp = {};
+
+ /// Cache mapping Build-Id's values to corresponding engine builds.
+ final Map<String, EngineBuild> _buildIdCache = {};
+
+ /// Pending downloads by [EngineBuild].
+ final Map<String, Future<String>> _downloads = {};
+
+ /// Constructs cache at the given [path], which is assumed to be a directory.
+ /// If destination does not exist it will be created.
+ SymbolsCache({
+ @required Ndk ndk,
+ @required String path,
+ int sizeThreshold = 20,
+ Duration evictionThreshold = const Duration(minutes: 5),
+ }) : _ndk = ndk,
+ _path = path,
+ _sizeThreshold = sizeThreshold,
+ _evictionThreshold = evictionThreshold {
+ if (!Directory(path).existsSync()) {
+ Directory(path).createSync();
+ }
+ _loadState();
+ }
+
+ /// If necessary download symbols for the given [build] and return path to
+ /// the folder containing them.
+ Future<String> get(EngineBuild build) => _get(build, '', _downloadSymbols);
+
+ /// If necessary download engine binary (libflutter.so or Flutter) for the
+ /// given build and return path to the binary itself.
+ Future<String> getEngineBinary(EngineBuild build) async {
+ final dir = await _get(build, 'libflutter', _downloadEngine);
+ return p.join(dir, p.basename(_libflutterPath(build)));
+ }
+
+ /// Download an artifact from Cloud Storage using the given [downloader] and
+ /// cache result in the path using the given [suffix].
+ Future<String> _get(
+ EngineBuild build,
+ String suffix,
+ Future<void> Function(Directory, EngineBuild) downloader,
+ ) {
+ final cacheDir = _cacheDirectoryFor(build, suffix: suffix);
+ if (!_downloads.containsKey(cacheDir)) {
+ _downloads[cacheDir] = _getImpl(cacheDir, build, downloader);
+ _downloads[cacheDir].then((_) => _downloads.remove(cacheDir));
+ }
+ return _downloads[cacheDir];
+ }
+
+ /// Given the [engineHash] and [EngineVariant] which specifies OS and
+ /// architecture look at symbols for all possible build modes and
+ /// find the one matching the given [buildId].
+ ///
+ /// Currently only used for Android symbols because on iOS LC_UUID
+ /// is unreliable.
+ Future<EngineBuild> findVariantByBuildId({
+ @required String engineHash,
+ @required EngineVariant variant,
+ @required String buildId,
+ }) async {
+ _log.info('looking for ${buildId} among ${variant} engines');
+ if (variant.os != 'android') {
+ throw ArgumentError(
+ 'LC_UUID is unreliable on iOS and can not be used for mode matching');
+ }
+
+ // Check if we already have a match in the Build-Id cache.
+ if (_buildIdCache.containsKey(buildId)) {
+ final build = _buildIdCache[buildId];
+ if (build.variant.os == variant.os &&
+ build.variant.arch == variant.arch) {
+ return build;
+ }
+ }
+
+ for (var potentialVariant in EngineVariant.allModesFor(variant)) {
+ final engineBuild =
+ EngineBuild(engineHash: engineHash, variant: potentialVariant);
+ final dir = await get(engineBuild);
+ final thisBuildId = await _ndk.getBuildId(p.join(dir, 'libflutter.so'));
+ _buildIdCache[thisBuildId] = engineBuild;
+ if (thisBuildId == buildId) {
+ return engineBuild;
+ }
+ }
+ throw 'Failed to find build with matching buildId (${buildId})';
+ }
+
+ File get _cacheStateFile => File(p.join(_path, 'cache.json'));
+
+ void _loadState() {
+ if (!_cacheStateFile.existsSync()) return;
+
+ final Map<String, dynamic> cacheState =
+ jsonDecode(_cacheStateFile.readAsStringSync());
+ final timestamps = cacheState['lastUsedTimestamp'] as List<dynamic>;
+ _lastUsedTimestamp.clear();
+ for (var i = 0; i < timestamps.length; i += 2) {
+ _lastUsedTimestamp[timestamps[i]] = timestamps[i + 1];
+ }
+ _buildIdCache.addAll((cacheState['buildIdCache'] as Map<String, dynamic>)
+ .map((key, value) => MapEntry(key, EngineBuild.fromJson(value))));
+ }
+
+ void _saveState() {
+ _cacheStateFile.writeAsStringSync(jsonEncode({
+ 'lastUsedTimestamp':
+ _lastUsedTimestamp.entries.expand((e) => [e.key, e.value]).toList(),
+ 'buildIdCache': _buildIdCache
+ }));
+ }
+
+ String _cacheDirectoryFor(EngineBuild build, {String suffix = ''}) =>
+ 'symbols-cache/${build.engineHash}-${build.variant.toArtifactPath()}'
+ '${suffix.isNotEmpty ? '-' : ''}${suffix}';
+
+ Future<String> _getImpl(String targetDir, EngineBuild build,
+ Future<void> Function(Directory, EngineBuild) downloader) async {
+ final dir = Directory(targetDir);
+ if (dir.existsSync()) {
+ _touch(dir.path);
+ return dir.path;
+ }
+
+ // Make sure we have some space.
+ _evictOldEntriesIfNecessary();
+ _log.info('downloading ${targetDir} for ${build}');
+
+ // Download symbols into a temporary directory, once we successfully
+ // unpack them we will rename this directory.
+ final tempDir = await Directory.systemTemp.createTemp();
+ try {
+ await downloader(tempDir, build);
+ // Now move the directory into the cache.
+ final renamed = await tempDir.rename(dir.path);
+ if (build.variant.os == 'android') {
+ // Fetch Build-Id from the library and add it to the cache.
+ final buildId =
+ await _ndk.getBuildId(p.join(renamed.path, 'libflutter.so'));
+ _buildIdCache[buildId] = build;
+ }
+ _touch(renamed.path);
+ return renamed.path;
+ } finally {
+ if (tempDir.existsSync()) {
+ tempDir.deleteSync(recursive: true);
+ }
+ }
+ }
+
+ Future<void> _downloadSymbols(Directory tempDir, EngineBuild build) async {
+ final symbolsFile =
+ build.variant.os == 'ios' ? 'Flutter.dSYM.zip' : 'symbols.zip';
+
+ await _run('gsutil', [
+ 'cp',
+ 'gs://flutter_infra/flutter/${build.engineHash}/${build.variant.toArtifactPath()}/${symbolsFile}',
+ p.join(tempDir.path, symbolsFile)
+ ]);
+ await _run('unzip', [symbolsFile], workingDirectory: tempDir.path);
+
+ // Delete downloaded ZIP file.
+ await File(p.join(tempDir.path, symbolsFile)).delete();
+ }
+
+ Future<void> _downloadEngine(Directory tempDir, EngineBuild build) async {
+ final artifactsFile = 'artifacts.zip';
+ await _run('gsutil', [
+ 'cp',
+ 'gs://flutter_infra/flutter/${build.engineHash}/${build.variant.toArtifactPath()}/${artifactsFile}',
+ p.join(tempDir.path, artifactsFile)
+ ]);
+
+ final nestedZip =
+ build.variant.os == 'ios' ? 'Flutter.framework.zip' : 'flutter.jar';
+
+ await _run('unzip', [artifactsFile, nestedZip],
+ workingDirectory: tempDir.path);
+
+ final libraryPath = _libflutterPath(build);
+ await _run('unzip', [nestedZip, libraryPath],
+ workingDirectory: tempDir.path);
+
+ if (p.dirname(libraryPath) != '.') {
+ await File(p.join(tempDir.path, libraryPath))
+ .rename(p.join(tempDir.path, p.basename(libraryPath)));
+ await Directory(p.join(tempDir.path, p.dirname(libraryPath)))
+ .delete(recursive: true);
+ }
+
+ // Delete downloaded ZIP file.
+ await File(p.join(tempDir.path, artifactsFile)).delete();
+ await File(p.join(tempDir.path, nestedZip)).delete();
+ }
+
+ static String _libflutterPath(EngineBuild build) {
+ switch (build.variant.os) {
+ case 'ios':
+ return 'Flutter';
+ case 'android':
+ switch (build.variant.arch) {
+ case 'arm64':
+ return 'lib/arm64-v8a/libflutter.so';
+ case 'arm':
+ return 'lib/armeabi-v7a/libflutter.so';
+ }
+ break;
+ }
+ throw 'Unsupported combination of architecture and OS: ${build.variant}';
+ }
+
+ Future<void> _run(String executable, List<String> args,
+ {String workingDirectory}) async {
+ final result =
+ await Process.run(executable, args, workingDirectory: workingDirectory);
+ if (result.exitCode != 0) {
+ throw 'Failed to run ${executable} ${args.join(' ')} '
+ '(exit code ${result.exitCode}): ${result.stdout} ${result.stderr}';
+ }
+ }
+
+ void _touch(String path) {
+ _lastUsedTimestamp[path] = DateTime.now().millisecondsSinceEpoch;
+ _saveState();
+ }
+
+ /// If the cache is too big then evict all entries outside of the given
+ /// interval.
+ void _evictOldEntriesIfNecessary() {
+ if (_lastUsedTimestamp.length < _sizeThreshold) {
+ return;
+ }
+
+ final fiveMinutesAgo =
+ DateTime.now().subtract(_evictionThreshold).millisecondsSinceEpoch;
+ for (var path in _lastUsedTimestamp.entries
+ .where((e) => e.value < fiveMinutesAgo)
+ .map((e) => e.key)
+ .toList()) {
+ final dir = Directory(path);
+ if (dir.existsSync()) {
+ dir.deleteSync(recursive: true);
+ }
+ _lastUsedTimestamp.remove(path);
+ }
+ _saveState();
+ }
+}
+
+extension on EngineVariant {
+ String toArtifactPath() {
+ final modeSuffix = (mode == 'debug') ? '' : '-${mode}';
+ if (os == 'ios') {
+ return '${os}${modeSuffix}';
+ } else {
+ return '${os}-${arch}${modeSuffix}';
+ }
+ }
+}
diff --git a/github-label-notifier/symbolizer/pubspec.yaml b/github-label-notifier/symbolizer/pubspec.yaml
new file mode 100644
index 0000000..16368a6
--- /dev/null
+++ b/github-label-notifier/symbolizer/pubspec.yaml
@@ -0,0 +1,30 @@
+name: symbolizer
+description: >-
+ Symbolization tooling capable of extracting Android and iOS crashes from
+ plain text comments on GitHub and then automatically symbolize these crash
+ reports using Flutter Engine symbols stored in the Cloud Storage.
+version: 0.0.1
+publish_to: none
+
+environment:
+ sdk: '>=2.8.0 <3.0.0'
+
+dependencies:
+ args: ^1.6.0
+ corsac_jwt: ^0.2.2
+ freezed_annotation: ^0.12.0
+ github: ^7.0.3
+ http: ^0.12.2
+ json_annotation: ^3.1.0
+ logging: ^0.11.4
+ path: ^1.6.0
+ pedantic: ^1.9.2
+ sendgrid_mailer: ^0.1.2
+
+dev_dependencies:
+ build_runner: ^1.10.0
+ freezed: ^0.12.2
+ json_serializable: ^3.5.0
+ meta: ^1.2.3
+ mockito: ^4.1.2
+ test: ^1.15.4
diff --git a/github-label-notifier/symbolizer/test/bot_test.dart b/github-label-notifier/symbolizer/test/bot_test.dart
new file mode 100644
index 0000000..4cd2d45
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/bot_test.dart
@@ -0,0 +1,208 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:github/github.dart';
+import 'package:mockito/mockito.dart';
+import 'package:path/path.dart' as p;
+import 'package:symbolizer/bot.dart';
+import 'package:symbolizer/config.dart';
+import 'package:symbolizer/model.dart';
+import 'package:symbolizer/ndk.dart';
+import 'package:symbolizer/symbols.dart';
+import 'package:test/test.dart';
+
+import 'package:symbolizer/symbolizer.dart';
+
+class MockGitHub extends Mock implements GitHub {}
+
+class MockIssuesService extends Mock implements IssuesService {}
+
+class SymbolsCacheProxy implements SymbolsCache {
+ final SymbolsCache impl;
+ final bool shouldThrow;
+ SymbolsCacheProxy(this.impl, {this.shouldThrow = false});
+
+ @override
+ Future<EngineBuild> findVariantByBuildId(
+ {String engineHash, EngineVariant variant, String buildId}) {
+ return impl.findVariantByBuildId(
+ engineHash: engineHash, variant: variant, buildId: buildId);
+ }
+
+ @override
+ Future<String> get(EngineBuild build) {
+ if (shouldThrow) {
+ throw 'Failed to download ${build}';
+ }
+ return impl.get(build);
+ }
+
+ @override
+ Future<String> getEngineBinary(EngineBuild build) =>
+ impl.getEngineBinary(build);
+}
+
+final regenerateExpectations =
+ bool.fromEnvironment('REGENERATE_EXPECTATIONS') ||
+ Platform.environment['REGENERATE_EXPECTATIONS'] == 'true';
+
+final config = loadConfigFromFile();
+
+void main() {
+ group('command parsing', () {
+ test('nothing to do', () {
+ expect(Bot.parseCommand(0, 'x64'), isNull);
+ expect(Bot.parseCommand(0, 'x64 debug'), isNull);
+ expect(Bot.parseCommand(0, 'x64\n@flutter-symbolizer-bot'), isNull);
+ });
+ test('simple', () {
+ expect(
+ Bot.parseCommand(0, '@flutter-symbolizer-bot'),
+ equals(BotCommand(
+ overrides: SymbolizationOverrides(),
+ symbolizeThis: false,
+ worklist: <String>{},
+ )));
+ });
+ test('with arch', () {
+ for (var arch in ['arm', 'arm64', 'x86', 'x64']) {
+ expect(
+ Bot.parseCommand(0, '@flutter-symbolizer-bot $arch'),
+ equals(BotCommand(
+ overrides: SymbolizationOverrides(arch: arch),
+ symbolizeThis: false,
+ worklist: <String>{},
+ )));
+ }
+ });
+ test('with mode', () {
+ for (var mode in ['profile', 'release', 'debug']) {
+ expect(
+ Bot.parseCommand(0, '@flutter-symbolizer-bot $mode'),
+ equals(BotCommand(
+ overrides: SymbolizationOverrides(mode: mode),
+ symbolizeThis: false,
+ worklist: <String>{},
+ )));
+ }
+ });
+ test('with engine hash', () {
+ expect(
+ Bot.parseCommand(
+ 0, '@flutter-symbolizer-bot arm64 engine#aaabbb debug'),
+ equals(BotCommand(
+ overrides: SymbolizationOverrides(
+ arch: 'arm64', engineHash: 'aaabbb', mode: 'debug'),
+ symbolizeThis: false,
+ worklist: <String>{},
+ )));
+ });
+ test('with links', () {
+ expect(
+ Bot.parseCommand(
+ 0,
+ '@flutter-symbolizer-bot '
+ 'https://github.com/flutter/flutter/issues/0#issue-1 '
+ 'engine#aaabbb '
+ 'https://github.com/flutter/flutter/issues/0#issuecomment-2'),
+ equals(BotCommand(
+ overrides: SymbolizationOverrides(engineHash: 'aaabbb'),
+ symbolizeThis: false,
+ worklist: <String>{'issue-1', 'issuecomment-2'},
+ )));
+ });
+ });
+
+ group('end-to-end', () {
+ SymbolsCache symbols;
+ Ndk ndk;
+ GitHub github;
+ final files = Directory('test/data').listSync();
+
+ setUpAll(() {
+ ndk = Ndk();
+ symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
+ github = GitHub(auth: Authentication.withToken(config.githubToken));
+ });
+
+ for (var inputFile in files
+ .where((f) => p.basename(f.path).endsWith('.input.txt'))
+ .cast<File>()) {
+ final testName = p.basename(inputFile.path).split('.').first;
+ final expectationFile = File('test/data/$testName.expected.github.txt');
+ test(testName, () async {
+ final input = await inputFile.readAsString();
+
+ final authorized = !input.contains('/unauthorized');
+ final shouldThrow = input.contains('/throw');
+
+ final symbolsProxy =
+ SymbolsCacheProxy(symbols, shouldThrow: shouldThrow);
+
+ final symbolizer =
+ Symbolizer(symbols: symbolsProxy, ndk: ndk, github: github);
+
+ final mockGitHub = MockGitHub();
+ final mockIssues = MockIssuesService();
+ final repo = RepositorySlug('flutter', 'flutter');
+ final bot = Bot(
+ github: mockGitHub,
+ symbolizer: symbolizer,
+ failuresEmail: null,
+ mailer: null,
+ );
+
+ final command = Bot.isCommand(input)
+ ? Bot.parseCommand(0, input).symbolizeThis
+ ? input
+ : input.split('\n').first
+ : Bot.accountMention;
+
+ final somebody = User(login: 'somebody');
+ final commandComment =
+ IssueComment(id: 1001, body: command, user: somebody);
+
+ when(mockGitHub.issues).thenAnswer((realInvocation) => mockIssues);
+ when(mockIssues.listCommentsByIssue(repo, 42))
+ .thenAnswer((realInvocation) async* {
+ yield IssueComment(id: 1002, body: 'something', user: somebody);
+ yield IssueComment(id: 1042, body: input, user: somebody);
+ yield commandComment;
+ });
+
+ when(mockIssues.createComment(repo, 42, any))
+ .thenAnswer((realInvocation) async {
+ return null;
+ });
+
+ throwOnMissingStub(mockGitHub);
+ throwOnMissingStub(mockIssues);
+ await bot.executeCommand(
+ repo,
+ Issue(id: 1000, body: 'something', number: 42),
+ commandComment,
+ authorized: authorized,
+ );
+
+ final result = verify(mockIssues.createComment(repo, 42, captureAny))
+ .captured
+ .single;
+
+ if (regenerateExpectations) {
+ await expectationFile.writeAsString(result);
+ } else {
+ final expected = await expectationFile.readAsString();
+
+ expect(result, equals(expected));
+ }
+ });
+ }
+
+ tearDownAll(() {
+ github.dispose();
+ });
+ });
+}
diff --git a/github-label-notifier/symbolizer/test/data/test01.expected.github.txt b/github-label-notifier/symbolizer/test/data/test01.expected.github.txt
new file mode 100644
index 0000000..7a0f468
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test01.expected.github.txt
@@ -0,0 +1,21 @@
+crash from null symbolized using symbols for `75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d` `android-arm-release`
+```
+#00 96a85449 <...>/lib/arm/libflutter.so+0x1384449
+ ??
+ ??:0:0
+#01 969c0e81 <...>/lib/arm/libflutter.so+0x12bfe81
+ ??
+ ??:0:0
+
+```
+_(Defaulted to release engine because build-id is unavailable or unreliable)_
+crash from null symbolized using symbols for `75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d` `android-arm-release`
+```
+#00 0001a43c /system/lib/libc.so (abort+63)
+#01 002bce85 <...>/lib/arm/libflutter.so (offset 0x1002000)
+ EllipticalRRectOp::EllipticalRRectOp(GrSimpleMeshDrawOpHelper::MakeArgs, SkRGBA4f<(SkAlphaType)2> const&, SkMatrix const&, SkRect const&, float, float, SkPoint, bool)
+ third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp:2896:18
+
+```
+_(Defaulted to release engine because build-id is unavailable or unreliable)_
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test01.expected.txt b/github-label-notifier/symbolizer/test/data/test01.expected.txt
new file mode 100644
index 0000000..b5a0a76
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test01.expected.txt
@@ -0,0 +1,86 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": null
+ },
+ "frames": [
+ {
+ "pc": 2527614025,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "offset": 20464713,
+ "runtimeType": "dartvm"
+ },
+ {
+ "pc": 2526809729,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "offset": 19660417,
+ "runtimeType": "dartvm"
+ }
+ ],
+ "format": "dartvm",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d",
+ "variant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 96a85449 <...>/lib/arm/libflutter.so+0x1384449\n ??\n ??:0:0\n#01 969c0e81 <...>/lib/arm/libflutter.so+0x12bfe81\n ??\n ??:0:0\n",
+ "notes": [
+ {
+ "kind": "defaultedToReleaseBuildIdUnavailable",
+ "message": null
+ }
+ ]
+ },
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": null
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 107580,
+ "binary": "/system/lib/libc.so",
+ "rest": " (abort+63)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 2870917,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "rest": " (offset 0x1002000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 8
+ },
+ "engineBuild": {
+ "engineHash": "75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d",
+ "variant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 0001a43c /system/lib/libc.so (abort+63)\n#01 002bce85 <...>/lib/arm/libflutter.so (offset 0x1002000)\n EllipticalRRectOp::EllipticalRRectOp(GrSimpleMeshDrawOpHelper::MakeArgs, SkRGBA4f<(SkAlphaType)2> const&, SkMatrix const&, SkRect const&, float, float, SkPoint, bool)\n third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp:2896:18\n",
+ "notes": [
+ {
+ "kind": "defaultedToReleaseBuildIdUnavailable",
+ "message": null
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test01.input.txt b/github-label-notifier/symbolizer/test/data/test01.input.txt
new file mode 100644
index 0000000..346690a
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test01.input.txt
@@ -0,0 +1,30 @@
+# By default symbolizer would use release build and produce incorrect result
+
+```bash
+0000-00-00 00:00:00.000 11111-22222/? E/Dart: ../../third_party/dart/runtime/vm/zone.cc: 94: error: Out of memory.
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: version=2.10.1 (stable) (Mon Jan 1 00:00:00 XXXX +0000) on "android_arm"
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: pid=11111, thread=22222, isolate_group=main(0x9550b600), isolate=main(0x933c4000)
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: isolate_instructions=969c0e00, vm_instructions=969c0e00
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: pc 0x96a85449 fp 0x885fef58 /data/app/com.example.app/lib/arm/libflutter.so+0x1384449
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: pc 0x969c0e81 fp 0x885ff014 /data/app/com.example.app/lib/arm/libflutter.so+0x12bfe81
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: -- End of DumpStackTrace
+0000-00-00 00:00:00.000 11111-22222/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 22222 (DartWorker), pid 11111 (example.app)
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Build fingerprint: '...:8.1.0/.../...:...'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Revision: '0'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ABI: 'arm'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: pid: 11111, tid: 22222, name: DartWorker >>> com.example.app <<<
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r0 00000000 r1 00000000 r2 00000000 r3 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r4 00000000 r5 00000000 r6 00000000 r7 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r8 00000000 r9 00000000 sl 00000000 fp 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ip 00000000 sp 00000000 lr 00000000 pc 00000000 cpsr 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: backtrace:
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #00 pc 0001a43c /system/lib/libc.so (abort+63)
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #01 pc 002bce85 /data/app/com.example.app/lib/arm/libflutter.so (offset 0x1002000)
+```
+
+```bash
+Doctor summary (to see all details, run flutter doctor -v):
+[✓] Flutter (Channel stable, 1.22.1, on xxxx, locale xxxx)
+```
diff --git a/github-label-notifier/symbolizer/test/data/test02.expected.github.txt b/github-label-notifier/symbolizer/test/data/test02.expected.github.txt
new file mode 100644
index 0000000..70e1c12
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test02.expected.github.txt
@@ -0,0 +1,23 @@
+crash from null symbolized using symbols for `75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d` `android-arm-debug`
+```
+#00 96a85449 <...>/lib/arm/libflutter.so+0x1384449
+ dart::Profiler::DumpStackTrace(bool)
+ third_party/dart/runtime/vm/profiler.cc:1110:18
+ dart::Profiler::DumpStackTrace(void*)
+ third_party/dart/runtime/vm/profiler.cc:1077:5
+#01 969c0e81 <...>/lib/arm/libflutter.so+0x12bfe81
+ dart::Assert::Fail(char const*, ...)
+ third_party/dart/runtime/platform/assert.cc:43:3
+
+```
+
+crash from null symbolized using symbols for `75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d` `android-arm-debug`
+```
+#00 0001a43c /system/lib/libc.so (abort+63)
+#01 002bce85 <...>/lib/arm/libflutter.so (offset 0x1002000)
+ dart::Assert::Fail(char const*, ...)
+ third_party/dart/runtime/platform/assert.cc:44:3
+
+```
+
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test02.expected.txt b/github-label-notifier/symbolizer/test/data/test02.expected.txt
new file mode 100644
index 0000000..494e220
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test02.expected.txt
@@ -0,0 +1,76 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "debug"
+ },
+ "frames": [
+ {
+ "pc": 2527614025,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "offset": 20464713,
+ "runtimeType": "dartvm"
+ },
+ {
+ "pc": 2526809729,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "offset": 19660417,
+ "runtimeType": "dartvm"
+ }
+ ],
+ "format": "dartvm",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d",
+ "variant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "debug"
+ }
+ },
+ "symbolized": "#00 96a85449 <...>/lib/arm/libflutter.so+0x1384449\n dart::Profiler::DumpStackTrace(bool)\n third_party/dart/runtime/vm/profiler.cc:1110:18\n dart::Profiler::DumpStackTrace(void*)\n third_party/dart/runtime/vm/profiler.cc:1077:5\n#01 969c0e81 <...>/lib/arm/libflutter.so+0x12bfe81\n dart::Assert::Fail(char const*, ...)\n third_party/dart/runtime/platform/assert.cc:43:3\n",
+ "notes": []
+ },
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "debug"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 107580,
+ "binary": "/system/lib/libc.so",
+ "rest": " (abort+63)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 2870917,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "rest": " (offset 0x1002000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 8
+ },
+ "engineBuild": {
+ "engineHash": "75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d",
+ "variant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "debug"
+ }
+ },
+ "symbolized": "#00 0001a43c /system/lib/libc.so (abort+63)\n#01 002bce85 <...>/lib/arm/libflutter.so (offset 0x1002000)\n dart::Assert::Fail(char const*, ...)\n third_party/dart/runtime/platform/assert.cc:44:3\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test02.input.txt b/github-label-notifier/symbolizer/test/data/test02.input.txt
new file mode 100644
index 0000000..d241b30
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test02.input.txt
@@ -0,0 +1,30 @@
+@flutter-symbolizer-bot debug
+
+```bash
+0000-00-00 00:00:00.000 11111-22222/? E/Dart: ../../third_party/dart/runtime/vm/zone.cc: 94: error: Out of memory.
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: version=2.10.1 (stable) (Mon Jan 1 00:00:00 XXXX +0000) on "android_arm"
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: pid=11111, thread=22222, isolate_group=main(0x9550b600), isolate=main(0x933c4000)
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: isolate_instructions=969c0e00, vm_instructions=969c0e00
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: pc 0x96a85449 fp 0x885fef58 /data/app/com.example.app/lib/arm/libflutter.so+0x1384449
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: pc 0x969c0e81 fp 0x885ff014 /data/app/com.example.app/lib/arm/libflutter.so+0x12bfe81
+0000-00-00 00:00:00.000 11111-22222/? E/DartVM: -- End of DumpStackTrace
+0000-00-00 00:00:00.000 11111-22222/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 22222 (DartWorker), pid 11111 (example.app)
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Build fingerprint: '...:8.1.0/.../...:...'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Revision: '0'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ABI: 'arm'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: pid: 11111, tid: 22222, name: DartWorker >>> com.example.app <<<
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r0 00000000 r1 00000000 r2 00000000 r3 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r4 00000000 r5 00000000 r6 00000000 r7 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r8 00000000 r9 00000000 sl 00000000 fp 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ip 00000000 sp 00000000 lr 00000000 pc 00000000 cpsr 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: backtrace:
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #00 pc 0001a43c /system/lib/libc.so (abort+63)
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #01 pc 002bce85 /data/app/com.example.app/lib/arm/libflutter.so (offset 0x1002000)
+```
+
+```bash
+Doctor summary (to see all details, run flutter doctor -v):
+[✓] Flutter (Channel stable, 1.22.1, on xxxx, locale xxxx)
+```
diff --git a/github-label-notifier/symbolizer/test/data/test03.expected.github.txt b/github-label-notifier/symbolizer/test/data/test03.expected.github.txt
new file mode 100644
index 0000000..722593d
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test03.expected.github.txt
@@ -0,0 +1,49 @@
+crash from null symbolized using symbols for `5babba6c4d25fa237bbf755ab85c9a0c50b3c6ec` `android-arm-debug`
+```
+#00 0107f1b6 <...>/lib/arm/libflutter.so (offset 0x102f000)
+ neon::HLGish_k(skcms_TransferFunction const*, unsigned int, unsigned int, unsigned int, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&)::'lambda'(float vector[4])::operator()(float vector[4]) const
+ third_party/skia/src/opts/SkRasterPipeline_opts.h:0:9
+#01 0107f2bb <...>/lib/arm/libflutter.so (offset 0x102f000)
+ neon::approx_pow2(float vector[4])
+ third_party/skia/src/opts/SkRasterPipeline_opts.h:967:52
+ neon::approx_powf(float vector[4], float vector[4])
+ third_party/skia/src/opts/SkRasterPipeline_opts.h:977:44
+ neon::HLGinvish_k(skcms_TransferFunction const*, unsigned int, unsigned int, unsigned int, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&)::'lambda'(float vector[4])::operator()(float vector[4]) const
+ third_party/skia/src/opts/SkRasterPipeline_opts.h:1900:40
+#02 010d077d <...>/lib/arm/libflutter.so (offset 0x102f000)
+ SkDashImpl::flatten(SkWriteBuffer&) const
+ third_party/skia/src/effects/SkDashPathEffect.cpp:372:12
+#03 01049053 <...>/lib/arm/libflutter.so (offset 0x102f000)
+ SkBitmap::allocPixels(SkBitmap::Allocator*)
+ third_party/skia/src/core/SkBitmap.cpp:233:9
+#04 01049ce9 <...>/lib/arm/libflutter.so (offset 0x102f000)
+ SkBitmapController::State::State(SkImage_Base const*, SkMatrix const&, SkFilterQuality)
+ third_party/skia/src/core/SkBitmapController.cpp:109:22
+#05 0103dbf9 <...>/lib/arm/libflutter.so (offset 0x102f000)
+ flutter::Shell::NotifyLowMemoryWarning() const::$_12::$_12($_12&&)
+ flutter/shell/common/shell.cc:449:7
+ std::__1::__compressed_pair_elem<flutter::Shell::NotifyLowMemoryWarning() const::$_12, 0, false>::__compressed_pair_elem<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, 0u>(std::__1::piecewise_construct_t, std::__1::tuple<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&>, std::__1::__tuple_indices<0u>)
+ third_party/libcxx/include/memory:2155:9
+ std::__1::__compressed_pair<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12> >::__compressed_pair<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&>(std::__1::piecewise_construct_t, std::__1::tuple<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&>, std::__1::tuple<std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&>)
+ third_party/libcxx/include/memory:2256:9
+ std::__1::__function::__alloc_func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>, void ()>::__alloc_func(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&)
+ third_party/libcxx/include/functional:1524:11
+ std::__1::__function::__func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>, void ()>::__func(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&)
+ third_party/libcxx/include/functional:1652:11
+ std::__1::__function::__value_func<void ()>::__value_func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12> >(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12> const&)
+ third_party/libcxx/include/functional:1773:45
+ std::__1::__function::__value_func<void ()>::__value_func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, void>(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&)
+ third_party/libcxx/include/functional:1782:11
+ std::__1::function<void ()>::function<flutter::Shell::NotifyLowMemoryWarning() const::$_12, void>(flutter::Shell::NotifyLowMemoryWarning() const::$_12)
+ third_party/libcxx/include/functional:2362:50
+ flutter::Shell::NotifyLowMemoryWarning() const
+ flutter/shell/common/shell.cc:449:7
+#06 0103dfc3 <...>/lib/arm/libflutter.so (offset 0x102f000)
+ flutter::Shell::OnPlatformViewCreated(std::__1::unique_ptr<flutter::Surface, std::__1::default_delete<flutter::Surface> >)
+ flutter/shell/common/shell.cc:712:3
+#07 00047507 /system/lib/libc.so (__pthread_start(void*)+22)
+#08 0001af75 /system/lib/libc.so (__start_thread+32)
+
+```
+_(Defaulted to release engine because build-id is unavailable or unreliable)_
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test03.expected.txt b/github-label-notifier/symbolizer/test/data/test03.expected.txt
new file mode 100644
index 0000000..049bd6a
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test03.expected.txt
@@ -0,0 +1,102 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "debug"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 17297846,
+ "binary": "/data/app/com.example.app-/lib/arm/libflutter.so",
+ "rest": " (offset 0x102f000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 17298107,
+ "binary": "/data/app/com.example.app-/lib/arm/libflutter.so",
+ "rest": " (offset 0x102f000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "02",
+ "pc": 17631101,
+ "binary": "/data/app/com.example.app-/lib/arm/libflutter.so",
+ "rest": " (offset 0x102f000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "03",
+ "pc": 17076307,
+ "binary": "/data/app/com.example.app-/lib/arm/libflutter.so",
+ "rest": " (offset 0x102f000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "04",
+ "pc": 17079529,
+ "binary": "/data/app/com.example.app-/lib/arm/libflutter.so",
+ "rest": " (offset 0x102f000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "05",
+ "pc": 17030137,
+ "binary": "/data/app/com.example.app-/lib/arm/libflutter.so",
+ "rest": " (offset 0x102f000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "06",
+ "pc": 17031107,
+ "binary": "/data/app/com.example.app-/lib/arm/libflutter.so",
+ "rest": " (offset 0x102f000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "07",
+ "pc": 292103,
+ "binary": "/system/lib/libc.so",
+ "rest": " (__pthread_start(void*)+22)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "08",
+ "pc": 110453,
+ "binary": "/system/lib/libc.so",
+ "rest": " (__start_thread+32)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 8
+ },
+ "engineBuild": {
+ "engineHash": "5babba6c4d25fa237bbf755ab85c9a0c50b3c6ec",
+ "variant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "debug"
+ }
+ },
+ "symbolized": "#00 0107f1b6 <...>/lib/arm/libflutter.so (offset 0x102f000)\n neon::HLGish_k(skcms_TransferFunction const*, unsigned int, unsigned int, unsigned int, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&)::'lambda'(float vector[4])::operator()(float vector[4]) const\n third_party/skia/src/opts/SkRasterPipeline_opts.h:0:9\n#01 0107f2bb <...>/lib/arm/libflutter.so (offset 0x102f000)\n neon::approx_pow2(float vector[4])\n third_party/skia/src/opts/SkRasterPipeline_opts.h:967:52\n neon::approx_powf(float vector[4], float vector[4])\n third_party/skia/src/opts/SkRasterPipeline_opts.h:977:44\n neon::HLGinvish_k(skcms_TransferFunction const*, unsigned int, unsigned int, unsigned int, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&, float vector[4]&)::'lambda'(float vector[4])::operator()(float vector[4]) const\n third_party/skia/src/opts/SkRasterPipeline_opts.h:1900:40\n#02 010d077d <...>/lib/arm/libflutter.so (offset 0x102f000)\n SkDashImpl::flatten(SkWriteBuffer&) const\n third_party/skia/src/effects/SkDashPathEffect.cpp:372:12\n#03 01049053 <...>/lib/arm/libflutter.so (offset 0x102f000)\n SkBitmap::allocPixels(SkBitmap::Allocator*)\n third_party/skia/src/core/SkBitmap.cpp:233:9\n#04 01049ce9 <...>/lib/arm/libflutter.so (offset 0x102f000)\n SkBitmapController::State::State(SkImage_Base const*, SkMatrix const&, SkFilterQuality)\n third_party/skia/src/core/SkBitmapController.cpp:109:22\n#05 0103dbf9 <...>/lib/arm/libflutter.so (offset 0x102f000)\n flutter::Shell::NotifyLowMemoryWarning() const::$_12::$_12($_12&&)\n flutter/shell/common/shell.cc:449:7\n std::__1::__compressed_pair_elem<flutter::Shell::NotifyLowMemoryWarning() const::$_12, 0, false>::__compressed_pair_elem<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, 0u>(std::__1::piecewise_construct_t, std::__1::tuple<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&>, std::__1::__tuple_indices<0u>)\n third_party/libcxx/include/memory:2155:9\n std::__1::__compressed_pair<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12> >::__compressed_pair<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&>(std::__1::piecewise_construct_t, std::__1::tuple<flutter::Shell::NotifyLowMemoryWarning() const::$_12&&>, std::__1::tuple<std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&>)\n third_party/libcxx/include/memory:2256:9\n std::__1::__function::__alloc_func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>, void ()>::__alloc_func(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&)\n third_party/libcxx/include/functional:1524:11\n std::__1::__function::__func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>, void ()>::__func(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12>&&)\n third_party/libcxx/include/functional:1652:11\n std::__1::__function::__value_func<void ()>::__value_func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12> >(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&, std::__1::allocator<flutter::Shell::NotifyLowMemoryWarning() const::$_12> const&)\n third_party/libcxx/include/functional:1773:45\n std::__1::__function::__value_func<void ()>::__value_func<flutter::Shell::NotifyLowMemoryWarning() const::$_12, void>(flutter::Shell::NotifyLowMemoryWarning() const::$_12&&)\n third_party/libcxx/include/functional:1782:11\n std::__1::function<void ()>::function<flutter::Shell::NotifyLowMemoryWarning() const::$_12, void>(flutter::Shell::NotifyLowMemoryWarning() const::$_12)\n third_party/libcxx/include/functional:2362:50\n flutter::Shell::NotifyLowMemoryWarning() const\n flutter/shell/common/shell.cc:449:7\n#06 0103dfc3 <...>/lib/arm/libflutter.so (offset 0x102f000)\n flutter::Shell::OnPlatformViewCreated(std::__1::unique_ptr<flutter::Surface, std::__1::default_delete<flutter::Surface> >)\n flutter/shell/common/shell.cc:712:3\n#07 00047507 /system/lib/libc.so (__pthread_start(void*)+22)\n#08 0001af75 /system/lib/libc.so (__start_thread+32)\n",
+ "notes": [
+ {
+ "kind": "defaultedToReleaseBuildIdUnavailable",
+ "message": null
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test03.input.txt b/github-label-notifier/symbolizer/test/data/test03.input.txt
new file mode 100644
index 0000000..d2f2492
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test03.input.txt
@@ -0,0 +1,29 @@
+```
+[ +54 ms] Launching lib\main.dart on Something XYZ in debug mode...
+[ +114 ms] F/libc (12964): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 13108 (example.app), pid 12964 (example.app)
+[+1325 ms] *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+[ +1 ms] Build fingerprint: 'xiaomi/cactus/cactus:8.1.0/O11019/V10.3.8.0.OCBMIXM:user/release-keys'
+[ +1 ms] Revision: '0'
+[ +1 ms] ABI: 'arm'
+[ ] pid: 12964, tid: 13108, name: example.app >>> com.example.app <<<
+[ ] signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
+[ ] Cause: null pointer dereference
+[ +7 ms] backtrace:
+[ +1 ms] #00 pc 0107f1b6 /data/app/com.example.app-/lib/arm/libflutter.so (offset 0x102f000)
+[ +1 ms] #01 pc 0107f2bb /data/app/com.example.app-/lib/arm/libflutter.so (offset 0x102f000)
+[ +1 ms] #02 pc 010d077d /data/app/com.example.app-/lib/arm/libflutter.so (offset 0x102f000)
+[ +1 ms] #03 pc 01049053 /data/app/com.example.app-/lib/arm/libflutter.so (offset 0x102f000)
+[ +1 ms] #04 pc 01049ce9 /data/app/com.example.app-/lib/arm/libflutter.so (offset 0x102f000)
+[ +1 ms] #05 pc 0103dbf9 /data/app/com.example.app-/lib/arm/libflutter.so (offset 0x102f000)
+[ +2 ms] #06 pc 0103dfc3 /data/app/com.example.app-/lib/arm/libflutter.so (offset 0x102f000)
+[ ] #07 pc 00047507 /system/lib/libc.so (__pthread_start(void*)+22)
+[ ] #08 pc 0001af75 /system/lib/libc.so (__start_thread+32)
+```
+
+```
+[√] Flutter (Channel stable, 1.22.0, on Microsoft Windows [Version 10.0.18363.1082], locale en-US)
+ • Flutter version 1.22.0 at ...
+ • Framework revision d408d302e2 (12 days ago), 2020-09-29 11:49:17 -0700
+ • Engine revision 5babba6c4d
+ • Dart version 2.10.0
+```
diff --git a/github-label-notifier/symbolizer/test/data/test04.expected.github.txt b/github-label-notifier/symbolizer/test/data/test04.expected.github.txt
new file mode 100644
index 0000000..58c8910
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test04.expected.github.txt
@@ -0,0 +1,9 @@
+crash from null symbolized using symbols for `07e2520d5d8f837da439317adab4ecd7bff2f72d` `android-arm64-debug`
+```
+#00 00000000013461f4 <...>/lib/arm64/libflutter.so (BuildId: ed61359865ec8404e21864594776b9dcbe60a137)
+ SkImage::peekPixels(SkPixmap*) const
+ third_party/skia/src/image/SkImage.cpp:50:25
+
+```
+
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test04.expected.txt b/github-label-notifier/symbolizer/test/data/test04.expected.txt
new file mode 100644
index 0000000..e4279d0
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test04.expected.txt
@@ -0,0 +1,33 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": null
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 20210164,
+ "binary": "/data/app/com.example.app/lib/arm64/libflutter.so",
+ "rest": " (BuildId: ed61359865ec8404e21864594776b9dcbe60a137)",
+ "buildId": "ed61359865ec8404e21864594776b9dcbe60a137",
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 10
+ },
+ "engineBuild": {
+ "engineHash": "07e2520d5d8f837da439317adab4ecd7bff2f72d",
+ "variant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": "debug"
+ }
+ },
+ "symbolized": "#00 00000000013461f4 <...>/lib/arm64/libflutter.so (BuildId: ed61359865ec8404e21864594776b9dcbe60a137)\n SkImage::peekPixels(SkPixmap*) const\n third_party/skia/src/image/SkImage.cpp:50:25\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test04.input.txt b/github-label-notifier/symbolizer/test/data/test04.input.txt
new file mode 100644
index 0000000..e207cc1
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test04.input.txt
@@ -0,0 +1,21 @@
+```
+[ +206 ms] *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+[ ] Build fingerprint: 'motorola/river_amz/river:10/QPUS30.52-23-4/6de4a:user/release-keys'
+[ ] Revision: 'PVT'
+[ ] ABI: 'arm64'
+[ +1 ms] Timestamp: 2020-09-12 08:54:59-0400
+[ +23 ms] pid: 6901, tid: 7008, name: com.example.app >>> com.example.app <<<
+[ +1 ms] uid: 10266
+[ ] signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
+[ +49 ms] Cause: null pointer dereference
+[ ] backtrace:
+[ +1 ms] #00 pc 00000000013461f4 /data/app/com.example.app/lib/arm64/libflutter.so (BuildId: ed61359865ec8404e21864594776b9dcbe60a137)
+```
+
+```
+[√] Flutter (Channel dev, 1.22.0-9.0.pre, on Microsoft Windows [Version ...], locale en-US)
+ • Flutter version 1.22.0-9.0.pre at ...
+ • Framework revision 7a43175198 (2 weeks ago), 2020-08-28 23:18:04 -0400
+ • Engine revision 07e2520d5d
+ • Dart version 2.10.0 (build 2.10.0-73.0.dev)
+```
diff --git a/github-label-notifier/symbolizer/test/data/test05.expected.github.txt b/github-label-notifier/symbolizer/test/data/test05.expected.github.txt
new file mode 100644
index 0000000..66dff72
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test05.expected.github.txt
@@ -0,0 +1,14 @@
+crash from null symbolized using symbols for `d1bc06f032f9d6c148ea6b96b48261d6f545004f` `android-arm64-debug`
+```
+#00 0000000000633dbc <...>/lib/arm64/libflutter.so (offset 0x1240000)
+ dart::KernelProgramInfo::string_offsets() const
+ third_party/dart/runtime/vm/object.h:5091:48
+ dart::kernel::TranslationHelper::InitFromKernelProgramInfo(dart::KernelProgramInfo const&)
+ third_party/dart/runtime/vm/compiler/frontend/kernel_translation_helper.cc:79:46
+#01 000000000051cca0 <...>/lib/arm64/libflutter.so (offset 0x1240000)
+ dart::DartCompilationPipeline::BuildFlowGraph(dart::Zone*, dart::ParsedFunction*, dart::ZoneGrowableArray<dart::ICData const*>*, long, bool)
+ third_party/dart/runtime/vm/compiler/jit/compiler.cc:138:28
+
+```
+
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test05.expected.txt b/github-label-notifier/symbolizer/test/data/test05.expected.txt
new file mode 100644
index 0000000..88961f9
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test05.expected.txt
@@ -0,0 +1,41 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": "debug"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 6503868,
+ "binary": "/data/app/com.example.app-2OHRSaHLPfIforBPzoBjfQ==/lib/arm64/libflutter.so",
+ "rest": " (offset 0x1240000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 5360800,
+ "binary": "/data/app/com.example.app-2OHRSaHLPfIforBPzoBjfQ==/lib/arm64/libflutter.so",
+ "rest": " (offset 0x1240000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "d1bc06f032f9d6c148ea6b96b48261d6f545004f",
+ "variant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": "debug"
+ }
+ },
+ "symbolized": "#00 0000000000633dbc <...>/lib/arm64/libflutter.so (offset 0x1240000)\n dart::KernelProgramInfo::string_offsets() const\n third_party/dart/runtime/vm/object.h:5091:48\n dart::kernel::TranslationHelper::InitFromKernelProgramInfo(dart::KernelProgramInfo const&)\n third_party/dart/runtime/vm/compiler/frontend/kernel_translation_helper.cc:79:46\n#01 000000000051cca0 <...>/lib/arm64/libflutter.so (offset 0x1240000)\n dart::DartCompilationPipeline::BuildFlowGraph(dart::Zone*, dart::ParsedFunction*, dart::ZoneGrowableArray<dart::ICData const*>*, long, bool)\n third_party/dart/runtime/vm/compiler/jit/compiler.cc:138:28\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test05.input.txt b/github-label-notifier/symbolizer/test/data/test05.input.txt
new file mode 100644
index 0000000..9f494d4
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test05.input.txt
@@ -0,0 +1,22 @@
+@flutter-symbolizer-bot debug
+
+```
+F/libc (18690): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x36013f in tid 22036 (2.ui)
+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+Revision: '0'
+ABI: 'arm64'
+pid: 18690, tid: 22036, name: 2.ui >>> com.example.app <<<
+backtrace:
+ #00 pc 0000000000633dbc /data/app/com.example.app-2OHRSaHLPfIforBPzoBjfQ==/lib/arm64/libflutter.so (offset 0x1240000)
+ #01 pc 000000000051cca0 /data/app/com.example.app-2OHRSaHLPfIforBPzoBjfQ==/lib/arm64/libflutter.so (offset 0x1240000)
+```
+
+```
+Flutter 1.20.4 • channel stable • https://github.com/flutter/flutter.git
+Framework • revision fba99f6cf9 (5 days ago) • 2020-09-14 15:32:52 -0700
+Engine • revision d1bc06f032
+Tools • Dart 2.9.2
+```
+
+
+
diff --git a/github-label-notifier/symbolizer/test/data/test06.expected.github.txt b/github-label-notifier/symbolizer/test/data/test06.expected.github.txt
new file mode 100644
index 0000000..8dd9b8c
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test06.expected.github.txt
@@ -0,0 +1,87 @@
+crash from null symbolized using symbols for `499a70f5e21b2d2ee2fd360f2f58579fc29e0c55` `android-arm64-profile`
+```
+#00 00000000012de4ec <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#01 00000000012dcbb4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#02 00000000012dca70 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#03 00000000012cf0d4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#04 00000000012cf9ac <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#05 00000000012d033c <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#06 00000000012cf410 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#07 00000000012cf1e4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#08 00000000012d0598 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#09 0000000001298e74 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#10 000000000129df34 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ ??
+ ??:0:0
+#11 0000000000019d8c /system/lib64/libutils.so (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+#12 0000000000019990 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+#13 0000000000110f74 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+#14 000000000020fadc /system/framework/arm64/boot-framework.oat (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+#15 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#16 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#17 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#18 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#19 000000000067d794 /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#20 000000000012d914 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#21 00000000003975ae /system/framework/framework.jar (offset 0x92b000) (android.os.MessageQueue.next+34)
+#22 000000000067b3b8 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#23 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#24 0000000000396964 /system/framework/framework.jar (offset 0x92b000) (android.os.Looper.loop+156)
+#25 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#26 000000000030dc24 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#27 000000000030f00c /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#28 0000000000177f40 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#29 000000000013f7d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#30 00000000001a1698 /system/framework/framework.jar (android.app.ActivityThread.main)
+#31 0000000000305d3c /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#32 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#33 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#34 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#35 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#36 000000000055431c /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#37 00000000004d3b28 /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#38 00000000000896f4 /apex/com.android.art/javalib/arm64/boot.oat (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)
+#39 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#40 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#41 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#42 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#43 000000000067b118 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#44 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#45 00000000004492be /system/framework/framework.jar (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)
+#46 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#47 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#48 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#49 0000000000897668 /system/framework/arm64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+#50 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#51 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#52 0000000000552d58 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#53 000000000055320c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#54 000000000043811c /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#55 0000000000099424 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+#56 00000000000a08b0 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+#57 0000000000003580 /system/bin/app_process64 (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)
+#58 0000000000049418 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)
+
+```
+_(Build-ID mismatch: Backtrace refers to bad8640c836d37c147451a3a6ff5fbc721467212 but we used engine with 212dfb5693ad13476239acde23c8ce47d1d91a3a)_
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test06.expected.txt b/github-label-notifier/symbolizer/test/data/test06.expected.txt
new file mode 100644
index 0000000..fa32971
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test06.expected.txt
@@ -0,0 +1,502 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": "profile"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 19784940,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 19778484,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "02",
+ "pc": 19778160,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "03",
+ "pc": 19722452,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "04",
+ "pc": 19724716,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "05",
+ "pc": 19727164,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "06",
+ "pc": 19723280,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "07",
+ "pc": 19722724,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "08",
+ "pc": 19727768,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "09",
+ "pc": 19500660,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "10",
+ "pc": 19521332,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "11",
+ "pc": 105868,
+ "binary": "/system/lib64/libutils.so",
+ "rest": " (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)",
+ "buildId": "dfbf9171cc06645d34e6cd7beb8516d6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "12",
+ "pc": 104848,
+ "binary": "/system/lib64/libutils.so",
+ "rest": " (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)",
+ "buildId": "dfbf9171cc06645d34e6cd7beb8516d6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "13",
+ "pc": 1118068,
+ "binary": "/system/lib64/libandroid_runtime.so",
+ "rest": " (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)",
+ "buildId": "d3ad3cbe4c6876e3de4e909ccf51f0b6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "14",
+ "pc": 2161372,
+ "binary": "/system/framework/arm64/boot-framework.oat",
+ "rest": " (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)",
+ "buildId": "c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3",
+ "runtimeType": "android"
+ },
+ {
+ "no": "15",
+ "pc": 1258852,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "16",
+ "pc": 1739384,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "17",
+ "pc": 3244812,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "18",
+ "pc": 3204664,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "19",
+ "pc": 6805396,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "20",
+ "pc": 1235220,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "21",
+ "pc": 3765678,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (offset 0x92b000) (android.os.MessageQueue.next+34)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "22",
+ "pc": 6796216,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "23",
+ "pc": 1234964,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "24",
+ "pc": 3762532,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (offset 0x92b000) (android.os.Looper.loop+156)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "25",
+ "pc": 3169332,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "26",
+ "pc": 3202084,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "27",
+ "pc": 3207180,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "28",
+ "pc": 1539904,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "29",
+ "pc": 1308632,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "30",
+ "pc": 1709720,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (android.app.ActivityThread.main)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "31",
+ "pc": 3169596,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "32",
+ "pc": 6725152,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "33",
+ "pc": 1298424,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "34",
+ "pc": 1259496,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "35",
+ "pc": 1739412,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "36",
+ "pc": 5587740,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "37",
+ "pc": 5061416,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "38",
+ "pc": 562932,
+ "binary": "/apex/com.android.art/javalib/arm64/boot.oat",
+ "rest": " (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)",
+ "buildId": "13577ce71153c228ecf0eb73fc39f45010d487f8",
+ "runtimeType": "android"
+ },
+ {
+ "no": "39",
+ "pc": 1258852,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "40",
+ "pc": 1739384,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "41",
+ "pc": 3244812,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "42",
+ "pc": 3204664,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "43",
+ "pc": 6795544,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "44",
+ "pc": 1234964,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "45",
+ "pc": 4494014,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "46",
+ "pc": 3169332,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "47",
+ "pc": 6725152,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "48",
+ "pc": 1298424,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "49",
+ "pc": 9008744,
+ "binary": "/system/framework/arm64/boot-framework.oat",
+ "rest": " (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)",
+ "buildId": "c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3",
+ "runtimeType": "android"
+ },
+ {
+ "no": "50",
+ "pc": 1259496,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "51",
+ "pc": 1739412,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "52",
+ "pc": 5582168,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "53",
+ "pc": 5583372,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "54",
+ "pc": 4423964,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "55",
+ "pc": 627748,
+ "binary": "/system/lib64/libandroid_runtime.so",
+ "rest": " (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)",
+ "buildId": "d3ad3cbe4c6876e3de4e909ccf51f0b6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "56",
+ "pc": 657584,
+ "binary": "/system/lib64/libandroid_runtime.so",
+ "rest": " (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)",
+ "buildId": "d3ad3cbe4c6876e3de4e909ccf51f0b6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "57",
+ "pc": 13696,
+ "binary": "/system/bin/app_process64",
+ "rest": " (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)",
+ "buildId": "3254c0fd94c1b04edc39169c6c635aac",
+ "runtimeType": "android"
+ },
+ {
+ "no": "58",
+ "pc": 300056,
+ "binary": "/apex/com.android.runtime/lib64/bionic/libc.so",
+ "rest": " (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)",
+ "buildId": "03452a4a418e14ff93948f26561eace6",
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 11
+ },
+ "engineBuild": {
+ "engineHash": "499a70f5e21b2d2ee2fd360f2f58579fc29e0c55",
+ "variant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": "profile"
+ }
+ },
+ "symbolized": "#00 00000000012de4ec <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#01 00000000012dcbb4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#02 00000000012dca70 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#03 00000000012cf0d4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#04 00000000012cf9ac <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#05 00000000012d033c <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#06 00000000012cf410 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#07 00000000012cf1e4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#08 00000000012d0598 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#09 0000000001298e74 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#10 000000000129df34 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n ??\n ??:0:0\n#11 0000000000019d8c /system/lib64/libutils.so (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)\n#12 0000000000019990 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)\n#13 0000000000110f74 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)\n#14 000000000020fadc /system/framework/arm64/boot-framework.oat (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)\n#15 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#16 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#17 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#18 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#19 000000000067d794 /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#20 000000000012d914 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#21 00000000003975ae /system/framework/framework.jar (offset 0x92b000) (android.os.MessageQueue.next+34)\n#22 000000000067b3b8 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#23 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#24 0000000000396964 /system/framework/framework.jar (offset 0x92b000) (android.os.Looper.loop+156)\n#25 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#26 000000000030dc24 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#27 000000000030f00c /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#28 0000000000177f40 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#29 000000000013f7d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#30 00000000001a1698 /system/framework/framework.jar (android.app.ActivityThread.main)\n#31 0000000000305d3c /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#32 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#33 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#34 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#35 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#36 000000000055431c /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#37 00000000004d3b28 /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#38 00000000000896f4 /apex/com.android.art/javalib/arm64/boot.oat (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)\n#39 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#40 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#41 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#42 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#43 000000000067b118 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#44 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#45 00000000004492be /system/framework/framework.jar (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)\n#46 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#47 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#48 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#49 0000000000897668 /system/framework/arm64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)\n#50 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#51 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#52 0000000000552d58 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#53 000000000055320c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#54 000000000043811c /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#55 0000000000099424 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)\n#56 00000000000a08b0 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)\n#57 0000000000003580 /system/bin/app_process64 (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)\n#58 0000000000049418 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)\n",
+ "notes": [
+ {
+ "kind": "buildIdMismatch",
+ "message": "Backtrace refers to bad8640c836d37c147451a3a6ff5fbc721467212 but we used engine with 212dfb5693ad13476239acde23c8ce47d1d91a3a"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test06.input.txt b/github-label-notifier/symbolizer/test/data/test06.input.txt
new file mode 100644
index 0000000..023b674
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test06.input.txt
@@ -0,0 +1,90 @@
+@flutter-symbolizer-bot engine#499a70f profile
+
+```
+10-18 11:05:50.120 617 617 I hwservicemanager: getTransport: Cannot find entry android.hardware.graphics.allocator@4.0::IAllocator/default in either framework or device manifest.
+10-18 11:05:50.120 22568 22568 W Gralloc4: allocator 3.x is not supported
+10-18 11:05:50.173 22568 22568 F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 22568 (n.platformviews), pid 22568 (n.platformviews)
+10-18 11:05:50.227 22656 22656 I crash_dump64: obtaining output fd from tombstoned, type: kDebuggerdTombstone
+10-18 11:05:50.228 892 892 I tombstoned: received crash request for pid 22568
+10-18 11:05:50.228 22656 22656 I crash_dump64: performing dump of process 22568 (target tid = 22568)
+10-18 11:05:50.234 22656 22656 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+10-18 11:05:50.234 22656 22656 F DEBUG : Build fingerprint: 'google/flame/flame:11/RP1A.200720.009/6720564:user/release-keys'
+10-18 11:05:50.234 22656 22656 F DEBUG : Revision: 'MP1.0'
+10-18 11:05:50.234 22656 22656 F DEBUG : ABI: 'arm64'
+10-18 11:05:50.234 22656 22656 F DEBUG : Timestamp: 2020-10-18 11:05:50-0700
+10-18 11:05:50.234 22656 22656 F DEBUG : pid: 22568, tid: 22568, name: n.platformviews >>> io.flutter.integration.platformviews <<<
+10-18 11:05:50.234 22656 22656 F DEBUG : uid: 10466
+10-18 11:05:50.234 22656 22656 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
+10-18 11:05:50.234 22656 22656 F DEBUG : Cause: null pointer dereference
+10-18 11:05:50.234 22656 22656 F DEBUG : x0 0000000000000000 x1 0000000000000000 x2 0000007fee1c8ad0 x3 0000007fee1c8ac0
+10-18 11:05:50.234 22656 22656 F DEBUG : x4 0000007fee1c8ab0 x5 00000076aefffc4d x6 0000000000000339 x7 0000000000000437
+10-18 11:05:50.234 22656 22656 F DEBUG : x8 0000000000000000 x9 0000000000000000 x10 0000000000000000 x11 0000000000000000
+10-18 11:05:50.234 22656 22656 F DEBUG : x12 0000000000000000 x13 0000000000000000 x14 0000000000000002 x15 00000079ad34a090
+10-18 11:05:50.234 22656 22656 F DEBUG : x16 00000076a9833178 x17 00000079ac09fad4 x18 00000079ae724000 x19 00000077482eccd0
+10-18 11:05:50.234 22656 22656 F DEBUG : x20 000000779832e6b0 x21 0000007fee1c8ae0 x22 00000077482eccd8 x23 0000007fee1c8ac0
+10-18 11:05:50.234 22656 22656 F DEBUG : x24 0000007fee1c8ab0 x25 000000779832e6b0 x26 0000000000000438 x27 0000000000000339
+10-18 11:05:50.234 22656 22656 F DEBUG : x28 0000000000000437 x29 0000000000000339
+10-18 11:05:50.234 22656 22656 F DEBUG : lr 00000076a90e64cc sp 0000007fee1c8920 pc 00000076a90e64ec pst 0000000060000000
+10-18 11:05:50.420 22656 22656 F DEBUG : backtrace:
+10-18 11:05:50.420 22656 22656 F DEBUG : #00 pc 00000000012de4ec /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.420 22656 22656 F DEBUG : #01 pc 00000000012dcbb4 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #02 pc 00000000012dca70 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #03 pc 00000000012cf0d4 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #04 pc 00000000012cf9ac /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #05 pc 00000000012d033c /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #06 pc 00000000012cf410 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #07 pc 00000000012cf1e4 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #08 pc 00000000012d0598 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #09 pc 0000000001298e74 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #10 pc 000000000129df34 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #11 pc 0000000000019d8c /system/lib64/libutils.so (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #12 pc 0000000000019990 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #13 pc 0000000000110f74 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #14 pc 000000000020fadc /system/framework/arm64/boot-framework.oat (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+10-18 11:05:50.421 22656 22656 F DEBUG : #15 pc 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #16 pc 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #17 pc 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #18 pc 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #19 pc 000000000067d794 /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #20 pc 000000000012d914 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #21 pc 00000000003975ae /system/framework/framework.jar (offset 0x92b000) (android.os.MessageQueue.next+34)
+10-18 11:05:50.421 22656 22656 F DEBUG : #22 pc 000000000067b3b8 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #23 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #24 pc 0000000000396964 /system/framework/framework.jar (offset 0x92b000) (android.os.Looper.loop+156)
+10-18 11:05:50.421 22656 22656 F DEBUG : #25 pc 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #26 pc 000000000030dc24 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #27 pc 000000000030f00c /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #28 pc 0000000000177f40 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #29 pc 000000000013f7d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #30 pc 00000000001a1698 /system/framework/framework.jar (android.app.ActivityThread.main)
+10-18 11:05:50.421 22656 22656 F DEBUG : #31 pc 0000000000305d3c /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #32 pc 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #33 pc 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #34 pc 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #35 pc 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #36 pc 000000000055431c /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #37 pc 00000000004d3b28 /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #38 pc 00000000000896f4 /apex/com.android.art/javalib/arm64/boot.oat (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)
+10-18 11:05:50.421 22656 22656 F DEBUG : #39 pc 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #40 pc 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #41 pc 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #42 pc 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #43 pc 000000000067b118 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #44 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #45 pc 00000000004492be /system/framework/framework.jar (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)
+10-18 11:05:50.421 22656 22656 F DEBUG : #46 pc 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #47 pc 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #48 pc 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #49 pc 0000000000897668 /system/framework/arm64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+10-18 11:05:50.421 22656 22656 F DEBUG : #50 pc 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #51 pc 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #52 pc 0000000000552d58 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #53 pc 000000000055320c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #54 pc 000000000043811c /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #55 pc 0000000000099424 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #56 pc 00000000000a08b0 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #57 pc 0000000000003580 /system/bin/app_process64 (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)
+10-18 11:05:50.421 22656 22656 F DEBUG : #58 pc 0000000000049418 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)
+10-18 11:05:50.432 938 1052 D VSC : @ 2171979.791: [WO] tilt angle 89
+
+```
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test07.expected.github.txt b/github-label-notifier/symbolizer/test/data/test07.expected.github.txt
new file mode 100644
index 0000000..e60ad19
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test07.expected.github.txt
@@ -0,0 +1,109 @@
+crash from null symbolized using symbols for `499a70f5e21b2d2ee2fd360f2f58579fc29e0c55` `android-arm64-debug`
+```
+#00 00000000012de4ec <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::SurfacePool::GetLayer(GrDirectContext*, std::__1::shared_ptr<flutter::AndroidContext>, std::__1::shared_ptr<flutter::PlatformViewAndroidJNI>, std::__1::shared_ptr<flutter::AndroidSurfaceFactory>)
+ flutter/shell/platform/android/external_view_embedder/surface_pool.cc:36:26
+#01 00000000012dcbb4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::AndroidExternalViewEmbedder::CreateSurfaceIfNeeded(GrDirectContext*, long, sk_sp<SkPicture>, SkRect const&)
+ flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:192:56
+#02 00000000012dca70 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::AndroidExternalViewEmbedder::SubmitFrame(GrDirectContext*, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)
+ flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:174:11
+#03 00000000012cf0d4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::Rasterizer::DrawToSurface(flutter::LayerTree&)
+ flutter/shell/common/rasterizer.cc:473:31
+#04 00000000012cf9ac <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::Rasterizer::DoDraw(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)
+ flutter/shell/common/rasterizer.cc:338:32
+#05 00000000012d033c <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const
+ flutter/shell/common/rasterizer.cc:172:27
+ decltype(std::__1::forward<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&>(fp)(std::__1::forward<std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(fp0))) std::__1::__invoke<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ third_party/libcxx/include/type_traits:3530:1
+ void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ third_party/libcxx/include/__functional_base:348:9
+ std::__1::__function::__alloc_func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ third_party/libcxx/include/functional:1533:16
+ std::__1::__function::__func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ third_party/libcxx/include/functional:1707:12
+#06 00000000012cf410 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const
+ third_party/libcxx/include/functional:2419:12
+ flutter::Pipeline<flutter::LayerTree>::Consume(std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)> const&)
+ flutter/shell/common/pipeline.h:161:7
+#07 00000000012cf1e4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)
+ flutter/shell/common/rasterizer.cc:176:52
+#08 00000000012d0598 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2::operator()() const
+ flutter/shell/common/rasterizer.cc:207:26
+ decltype(std::__1::forward<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&>(fp)()) std::__1::__invoke<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&>(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&)
+ third_party/libcxx/include/type_traits:3530:1
+ void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&>(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&)
+ third_party/libcxx/include/__functional_base:348:9
+ std::__1::__function::__alloc_func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2>, void ()>::operator()()
+ third_party/libcxx/include/functional:1533:16
+ std::__1::__function::__func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2>, void ()>::operator()()
+ third_party/libcxx/include/functional:1707:12
+#09 0000000001298e74 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ std::__1::function<void ()>::operator()() const
+ third_party/libcxx/include/functional:2419:12
+ fml::MessageLoopImpl::FlushTasks(fml::FlushType)
+ flutter/fml/message_loop_impl.cc:130:5
+#10 000000000129df34 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+ fml::MessageLoopAndroid::MessageLoopAndroid()::$_0::operator()(int, int, void*) const
+ flutter/fml/platform/android/message_loop_android.cc:42:52
+ fml::MessageLoopAndroid::MessageLoopAndroid()::$_0::__invoke(int, int, void*)
+ flutter/fml/platform/android/message_loop_android.cc:40:40
+#11 0000000000019d8c /system/lib64/libutils.so (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+#12 0000000000019990 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+#13 0000000000110f74 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+#14 000000000020fadc /system/framework/arm64/boot-framework.oat (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+#15 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#16 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#17 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#18 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#19 000000000067d794 /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#20 000000000012d914 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#21 00000000003975ae /system/framework/framework.jar (offset 0x92b000) (android.os.MessageQueue.next+34)
+#22 000000000067b3b8 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#23 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#24 0000000000396964 /system/framework/framework.jar (offset 0x92b000) (android.os.Looper.loop+156)
+#25 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#26 000000000030dc24 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#27 000000000030f00c /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#28 0000000000177f40 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#29 000000000013f7d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#30 00000000001a1698 /system/framework/framework.jar (android.app.ActivityThread.main)
+#31 0000000000305d3c /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#32 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#33 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#34 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#35 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#36 000000000055431c /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#37 00000000004d3b28 /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#38 00000000000896f4 /apex/com.android.art/javalib/arm64/boot.oat (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)
+#39 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#40 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#41 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#42 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#43 000000000067b118 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#44 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#45 00000000004492be /system/framework/framework.jar (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)
+#46 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#47 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#48 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#49 0000000000897668 /system/framework/arm64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+#50 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#51 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#52 0000000000552d58 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#53 000000000055320c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#54 000000000043811c /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+#55 0000000000099424 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+#56 00000000000a08b0 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+#57 0000000000003580 /system/bin/app_process64 (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)
+#58 0000000000049418 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)
+
+```
+
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test07.expected.txt b/github-label-notifier/symbolizer/test/data/test07.expected.txt
new file mode 100644
index 0000000..05a519f
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test07.expected.txt
@@ -0,0 +1,497 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": null
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 19784940,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 19778484,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "02",
+ "pc": 19778160,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "03",
+ "pc": 19722452,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "04",
+ "pc": 19724716,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "05",
+ "pc": 19727164,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "06",
+ "pc": 19723280,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "07",
+ "pc": 19722724,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "08",
+ "pc": 19727768,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "09",
+ "pc": 19500660,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "10",
+ "pc": 19521332,
+ "binary": "/data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)",
+ "buildId": "bad8640c836d37c147451a3a6ff5fbc721467212",
+ "runtimeType": "android"
+ },
+ {
+ "no": "11",
+ "pc": 105868,
+ "binary": "/system/lib64/libutils.so",
+ "rest": " (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)",
+ "buildId": "dfbf9171cc06645d34e6cd7beb8516d6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "12",
+ "pc": 104848,
+ "binary": "/system/lib64/libutils.so",
+ "rest": " (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)",
+ "buildId": "dfbf9171cc06645d34e6cd7beb8516d6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "13",
+ "pc": 1118068,
+ "binary": "/system/lib64/libandroid_runtime.so",
+ "rest": " (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)",
+ "buildId": "d3ad3cbe4c6876e3de4e909ccf51f0b6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "14",
+ "pc": 2161372,
+ "binary": "/system/framework/arm64/boot-framework.oat",
+ "rest": " (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)",
+ "buildId": "c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3",
+ "runtimeType": "android"
+ },
+ {
+ "no": "15",
+ "pc": 1258852,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "16",
+ "pc": 1739384,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "17",
+ "pc": 3244812,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "18",
+ "pc": 3204664,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "19",
+ "pc": 6805396,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "20",
+ "pc": 1235220,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "21",
+ "pc": 3765678,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (offset 0x92b000) (android.os.MessageQueue.next+34)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "22",
+ "pc": 6796216,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "23",
+ "pc": 1234964,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "24",
+ "pc": 3762532,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (offset 0x92b000) (android.os.Looper.loop+156)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "25",
+ "pc": 3169332,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "26",
+ "pc": 3202084,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "27",
+ "pc": 3207180,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "28",
+ "pc": 1539904,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "29",
+ "pc": 1308632,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "30",
+ "pc": 1709720,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (android.app.ActivityThread.main)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "31",
+ "pc": 3169596,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "32",
+ "pc": 6725152,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "33",
+ "pc": 1298424,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "34",
+ "pc": 1259496,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "35",
+ "pc": 1739412,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "36",
+ "pc": 5587740,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "37",
+ "pc": 5061416,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "38",
+ "pc": 562932,
+ "binary": "/apex/com.android.art/javalib/arm64/boot.oat",
+ "rest": " (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)",
+ "buildId": "13577ce71153c228ecf0eb73fc39f45010d487f8",
+ "runtimeType": "android"
+ },
+ {
+ "no": "39",
+ "pc": 1258852,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "40",
+ "pc": 1739384,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "41",
+ "pc": 3244812,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "42",
+ "pc": 3204664,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "43",
+ "pc": 6795544,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "44",
+ "pc": 1234964,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "45",
+ "pc": 4494014,
+ "binary": "/system/framework/framework.jar",
+ "rest": " (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "46",
+ "pc": 3169332,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "47",
+ "pc": 6725152,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "48",
+ "pc": 1298424,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "49",
+ "pc": 9008744,
+ "binary": "/system/framework/arm64/boot-framework.oat",
+ "rest": " (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)",
+ "buildId": "c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3",
+ "runtimeType": "android"
+ },
+ {
+ "no": "50",
+ "pc": 1259496,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "51",
+ "pc": 1739412,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "52",
+ "pc": 5582168,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "53",
+ "pc": 5583372,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "54",
+ "pc": 4423964,
+ "binary": "/apex/com.android.art/lib64/libart.so",
+ "rest": " (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)",
+ "buildId": "0252adff22f4c0297f97cb35735c7649",
+ "runtimeType": "android"
+ },
+ {
+ "no": "55",
+ "pc": 627748,
+ "binary": "/system/lib64/libandroid_runtime.so",
+ "rest": " (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)",
+ "buildId": "d3ad3cbe4c6876e3de4e909ccf51f0b6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "56",
+ "pc": 657584,
+ "binary": "/system/lib64/libandroid_runtime.so",
+ "rest": " (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)",
+ "buildId": "d3ad3cbe4c6876e3de4e909ccf51f0b6",
+ "runtimeType": "android"
+ },
+ {
+ "no": "57",
+ "pc": 13696,
+ "binary": "/system/bin/app_process64",
+ "rest": " (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)",
+ "buildId": "3254c0fd94c1b04edc39169c6c635aac",
+ "runtimeType": "android"
+ },
+ {
+ "no": "58",
+ "pc": 300056,
+ "binary": "/apex/com.android.runtime/lib64/bionic/libc.so",
+ "rest": " (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)",
+ "buildId": "03452a4a418e14ff93948f26561eace6",
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 11
+ },
+ "engineBuild": {
+ "engineHash": "499a70f5e21b2d2ee2fd360f2f58579fc29e0c55",
+ "variant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": "debug"
+ }
+ },
+ "symbolized": "#00 00000000012de4ec <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::SurfacePool::GetLayer(GrDirectContext*, std::__1::shared_ptr<flutter::AndroidContext>, std::__1::shared_ptr<flutter::PlatformViewAndroidJNI>, std::__1::shared_ptr<flutter::AndroidSurfaceFactory>)\n flutter/shell/platform/android/external_view_embedder/surface_pool.cc:36:26\n#01 00000000012dcbb4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::AndroidExternalViewEmbedder::CreateSurfaceIfNeeded(GrDirectContext*, long, sk_sp<SkPicture>, SkRect const&)\n flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:192:56\n#02 00000000012dca70 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::AndroidExternalViewEmbedder::SubmitFrame(GrDirectContext*, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)\n flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:174:11\n#03 00000000012cf0d4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::Rasterizer::DrawToSurface(flutter::LayerTree&)\n flutter/shell/common/rasterizer.cc:473:31\n#04 00000000012cf9ac <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::Rasterizer::DoDraw(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)\n flutter/shell/common/rasterizer.cc:338:32\n#05 00000000012d033c <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const\n flutter/shell/common/rasterizer.cc:172:27\n decltype(std::__1::forward<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&>(fp)(std::__1::forward<std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(fp0))) std::__1::__invoke<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n third_party/libcxx/include/type_traits:3530:1\n void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n third_party/libcxx/include/__functional_base:348:9\n std::__1::__function::__alloc_func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n third_party/libcxx/include/functional:1533:16\n std::__1::__function::__func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n third_party/libcxx/include/functional:1707:12\n#06 00000000012cf410 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const\n third_party/libcxx/include/functional:2419:12\n flutter::Pipeline<flutter::LayerTree>::Consume(std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)> const&)\n flutter/shell/common/pipeline.h:161:7\n#07 00000000012cf1e4 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)\n flutter/shell/common/rasterizer.cc:176:52\n#08 00000000012d0598 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2::operator()() const\n flutter/shell/common/rasterizer.cc:207:26\n decltype(std::__1::forward<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&>(fp)()) std::__1::__invoke<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&>(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&)\n third_party/libcxx/include/type_traits:3530:1\n void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&>(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2&)\n third_party/libcxx/include/__functional_base:348:9\n std::__1::__function::__alloc_func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2>, void ()>::operator()()\n third_party/libcxx/include/functional:1533:16\n std::__1::__function::__func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_2>, void ()>::operator()()\n third_party/libcxx/include/functional:1707:12\n#09 0000000001298e74 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n std::__1::function<void ()>::operator()() const\n third_party/libcxx/include/functional:2419:12\n fml::MessageLoopImpl::FlushTasks(fml::FlushType)\n flutter/fml/message_loop_impl.cc:130:5\n#10 000000000129df34 <...>/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)\n fml::MessageLoopAndroid::MessageLoopAndroid()::$_0::operator()(int, int, void*) const\n flutter/fml/platform/android/message_loop_android.cc:42:52\n fml::MessageLoopAndroid::MessageLoopAndroid()::$_0::__invoke(int, int, void*)\n flutter/fml/platform/android/message_loop_android.cc:40:40\n#11 0000000000019d8c /system/lib64/libutils.so (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)\n#12 0000000000019990 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)\n#13 0000000000110f74 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)\n#14 000000000020fadc /system/framework/arm64/boot-framework.oat (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)\n#15 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#16 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#17 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#18 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#19 000000000067d794 /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#20 000000000012d914 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#21 00000000003975ae /system/framework/framework.jar (offset 0x92b000) (android.os.MessageQueue.next+34)\n#22 000000000067b3b8 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#23 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#24 0000000000396964 /system/framework/framework.jar (offset 0x92b000) (android.os.Looper.loop+156)\n#25 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#26 000000000030dc24 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#27 000000000030f00c /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#28 0000000000177f40 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#29 000000000013f7d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#30 00000000001a1698 /system/framework/framework.jar (android.app.ActivityThread.main)\n#31 0000000000305d3c /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#32 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#33 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#34 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#35 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#36 000000000055431c /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#37 00000000004d3b28 /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#38 00000000000896f4 /apex/com.android.art/javalib/arm64/boot.oat (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)\n#39 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#40 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#41 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#42 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#43 000000000067b118 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#44 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#45 00000000004492be /system/framework/framework.jar (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)\n#46 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#47 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#48 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#49 0000000000897668 /system/framework/arm64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)\n#50 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#51 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#52 0000000000552d58 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#53 000000000055320c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#54 000000000043811c /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)\n#55 0000000000099424 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)\n#56 00000000000a08b0 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)\n#57 0000000000003580 /system/bin/app_process64 (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)\n#58 0000000000049418 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test07.input.txt b/github-label-notifier/symbolizer/test/data/test07.input.txt
new file mode 100644
index 0000000..74be1de
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test07.input.txt
@@ -0,0 +1,90 @@
+@flutter-symbolizer-bot engine#499a70f
+
+```
+10-18 11:05:50.120 617 617 I hwservicemanager: getTransport: Cannot find entry android.hardware.graphics.allocator@4.0::IAllocator/default in either framework or device manifest.
+10-18 11:05:50.120 22568 22568 W Gralloc4: allocator 3.x is not supported
+10-18 11:05:50.173 22568 22568 F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 22568 (n.platformviews), pid 22568 (n.platformviews)
+10-18 11:05:50.227 22656 22656 I crash_dump64: obtaining output fd from tombstoned, type: kDebuggerdTombstone
+10-18 11:05:50.228 892 892 I tombstoned: received crash request for pid 22568
+10-18 11:05:50.228 22656 22656 I crash_dump64: performing dump of process 22568 (target tid = 22568)
+10-18 11:05:50.234 22656 22656 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+10-18 11:05:50.234 22656 22656 F DEBUG : Build fingerprint: 'google/flame/flame:11/RP1A.200720.009/6720564:user/release-keys'
+10-18 11:05:50.234 22656 22656 F DEBUG : Revision: 'MP1.0'
+10-18 11:05:50.234 22656 22656 F DEBUG : ABI: 'arm64'
+10-18 11:05:50.234 22656 22656 F DEBUG : Timestamp: 2020-10-18 11:05:50-0700
+10-18 11:05:50.234 22656 22656 F DEBUG : pid: 22568, tid: 22568, name: n.platformviews >>> io.flutter.integration.platformviews <<<
+10-18 11:05:50.234 22656 22656 F DEBUG : uid: 10466
+10-18 11:05:50.234 22656 22656 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
+10-18 11:05:50.234 22656 22656 F DEBUG : Cause: null pointer dereference
+10-18 11:05:50.234 22656 22656 F DEBUG : x0 0000000000000000 x1 0000000000000000 x2 0000007fee1c8ad0 x3 0000007fee1c8ac0
+10-18 11:05:50.234 22656 22656 F DEBUG : x4 0000007fee1c8ab0 x5 00000076aefffc4d x6 0000000000000339 x7 0000000000000437
+10-18 11:05:50.234 22656 22656 F DEBUG : x8 0000000000000000 x9 0000000000000000 x10 0000000000000000 x11 0000000000000000
+10-18 11:05:50.234 22656 22656 F DEBUG : x12 0000000000000000 x13 0000000000000000 x14 0000000000000002 x15 00000079ad34a090
+10-18 11:05:50.234 22656 22656 F DEBUG : x16 00000076a9833178 x17 00000079ac09fad4 x18 00000079ae724000 x19 00000077482eccd0
+10-18 11:05:50.234 22656 22656 F DEBUG : x20 000000779832e6b0 x21 0000007fee1c8ae0 x22 00000077482eccd8 x23 0000007fee1c8ac0
+10-18 11:05:50.234 22656 22656 F DEBUG : x24 0000007fee1c8ab0 x25 000000779832e6b0 x26 0000000000000438 x27 0000000000000339
+10-18 11:05:50.234 22656 22656 F DEBUG : x28 0000000000000437 x29 0000000000000339
+10-18 11:05:50.234 22656 22656 F DEBUG : lr 00000076a90e64cc sp 0000007fee1c8920 pc 00000076a90e64ec pst 0000000060000000
+10-18 11:05:50.420 22656 22656 F DEBUG : backtrace:
+10-18 11:05:50.420 22656 22656 F DEBUG : #00 pc 00000000012de4ec /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.420 22656 22656 F DEBUG : #01 pc 00000000012dcbb4 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #02 pc 00000000012dca70 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #03 pc 00000000012cf0d4 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #04 pc 00000000012cf9ac /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #05 pc 00000000012d033c /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #06 pc 00000000012cf410 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #07 pc 00000000012cf1e4 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #08 pc 00000000012d0598 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #09 pc 0000000001298e74 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #10 pc 000000000129df34 /data/app/~~26h8wU6-ipZ3oX50ip-uBA==/io.flutter.integration.platformviews-SzfN5V-3ue43jUkolPPxKw==/lib/arm64/libflutter.so (BuildId: bad8640c836d37c147451a3a6ff5fbc721467212)
+10-18 11:05:50.421 22656 22656 F DEBUG : #11 pc 0000000000019d8c /system/lib64/libutils.so (android::Looper::pollInner(int)+916) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #12 pc 0000000000019990 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: dfbf9171cc06645d34e6cd7beb8516d6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #13 pc 0000000000110f74 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #14 pc 000000000020fadc /system/framework/arm64/boot-framework.oat (art_jni_trampoline+140) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+10-18 11:05:50.421 22656 22656 F DEBUG : #15 pc 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #16 pc 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #17 pc 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #18 pc 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #19 pc 000000000067d794 /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+576) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #20 pc 000000000012d914 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #21 pc 00000000003975ae /system/framework/framework.jar (offset 0x92b000) (android.os.MessageQueue.next+34)
+10-18 11:05:50.421 22656 22656 F DEBUG : #22 pc 000000000067b3b8 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #23 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #24 pc 0000000000396964 /system/framework/framework.jar (offset 0x92b000) (android.os.Looper.loop+156)
+10-18 11:05:50.421 22656 22656 F DEBUG : #25 pc 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #26 pc 000000000030dc24 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #27 pc 000000000030f00c /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1772) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #28 pc 0000000000177f40 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+57848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #29 pc 000000000013f7d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #30 pc 00000000001a1698 /system/framework/framework.jar (android.app.ActivityThread.main)
+10-18 11:05:50.421 22656 22656 F DEBUG : #31 pc 0000000000305d3c /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+532) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #32 pc 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #33 pc 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #34 pc 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #35 pc 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #36 pc 000000000055431c /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1364) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #37 pc 00000000004d3b28 /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #38 pc 00000000000896f4 /apex/com.android.art/javalib/arm64/boot.oat (art_jni_trampoline+180) (BuildId: 13577ce71153c228ecf0eb73fc39f45010d487f8)
+10-18 11:05:50.421 22656 22656 F DEBUG : #39 pc 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #40 pc 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #41 pc 000000000031830c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #42 pc 000000000030e638 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+996) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #43 pc 000000000067b118 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+848) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #44 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #45 pc 00000000004492be /system/framework/framework.jar (offset 0x125d000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)
+10-18 11:05:50.421 22656 22656 F DEBUG : #46 pc 0000000000305c34 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16249794272548105830)+268) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #47 pc 0000000000669e20 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #48 pc 000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #49 pc 0000000000897668 /system/framework/arm64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2280) (BuildId: c0c6ddca30ccdc4ccaf4b39f4e24792c1ce6f6d3)
+10-18 11:05:50.421 22656 22656 F DEBUG : #50 pc 00000000001337e8 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #51 pc 00000000001a8a94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #52 pc 0000000000552d58 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #53 pc 000000000055320c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #54 pc 000000000043811c /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656) (BuildId: 0252adff22f4c0297f97cb35735c7649)
+10-18 11:05:50.421 22656 22656 F DEBUG : #55 pc 0000000000099424 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #56 pc 00000000000a08b0 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+836) (BuildId: d3ad3cbe4c6876e3de4e909ccf51f0b6)
+10-18 11:05:50.421 22656 22656 F DEBUG : #57 pc 0000000000003580 /system/bin/app_process64 (main+1336) (BuildId: 3254c0fd94c1b04edc39169c6c635aac)
+10-18 11:05:50.421 22656 22656 F DEBUG : #58 pc 0000000000049418 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+108) (BuildId: 03452a4a418e14ff93948f26561eace6)
+10-18 11:05:50.432 938 1052 D VSC : @ 2171979.791: [WO] tilt angle 89
+
+```
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test08.expected.github.txt b/github-label-notifier/symbolizer/test/data/test08.expected.github.txt
new file mode 100644
index 0000000..5ab32ae
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test08.expected.github.txt
@@ -0,0 +1,16 @@
+crash from null symbolized using symbols for `499a70f5e21b2d2ee2fd360f2f58579fc29e0c55` `android-arm64-profile`
+```
+#00 0000000000b92598 <...>/lib/arm64/libflutter.so (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)
+ OUTLINED_FUNCTION_7710
+ ??:0:0
+#01 00000000006e083c <...>/lib/arm64/libflutter.so (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)
+ flutter::SurfacePool::GetLayer(GrDirectContext*, std::__1::shared_ptr<flutter::AndroidContext>, std::__1::shared_ptr<flutter::PlatformViewAndroidJNI>, std::__1::shared_ptr<flutter::AndroidSurfaceFactory>)
+ flutter/shell/platform/android/external_view_embedder/surface_pool.cc:0:7
+ flutter::AndroidExternalViewEmbedder::CreateSurfaceIfNeeded(GrDirectContext*, long, sk_sp<SkPicture>, SkRect const&)
+ flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:192:56
+ flutter::AndroidExternalViewEmbedder::SubmitFrame(GrDirectContext*, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)
+ flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:174:11
+
+```
+
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test08.expected.txt b/github-label-notifier/symbolizer/test/data/test08.expected.txt
new file mode 100644
index 0000000..e278f4c
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test08.expected.txt
@@ -0,0 +1,41 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": null
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 12133784,
+ "binary": "/data/app/io.flutter.integration.platformviews-Uh7C5I-KFJChGzUncdxDdw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)",
+ "buildId": "212dfb5693ad13476239acde23c8ce47d1d91a3a",
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 7211068,
+ "binary": "/data/app/io.flutter.integration.platformviews-Uh7C5I-KFJChGzUncdxDdw==/lib/arm64/libflutter.so",
+ "rest": " (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)",
+ "buildId": "212dfb5693ad13476239acde23c8ce47d1d91a3a",
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 10
+ },
+ "engineBuild": {
+ "engineHash": "499a70f5e21b2d2ee2fd360f2f58579fc29e0c55",
+ "variant": {
+ "os": "android",
+ "arch": "arm64",
+ "mode": "profile"
+ }
+ },
+ "symbolized": "#00 0000000000b92598 <...>/lib/arm64/libflutter.so (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)\n OUTLINED_FUNCTION_7710\n ??:0:0\n#01 00000000006e083c <...>/lib/arm64/libflutter.so (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)\n flutter::SurfacePool::GetLayer(GrDirectContext*, std::__1::shared_ptr<flutter::AndroidContext>, std::__1::shared_ptr<flutter::PlatformViewAndroidJNI>, std::__1::shared_ptr<flutter::AndroidSurfaceFactory>)\n flutter/shell/platform/android/external_view_embedder/surface_pool.cc:0:7\n flutter::AndroidExternalViewEmbedder::CreateSurfaceIfNeeded(GrDirectContext*, long, sk_sp<SkPicture>, SkRect const&)\n flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:192:56\n flutter::AndroidExternalViewEmbedder::SubmitFrame(GrDirectContext*, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)\n flutter/shell/platform/android/external_view_embedder/external_view_embedder.cc:174:11\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test08.input.txt b/github-label-notifier/symbolizer/test/data/test08.input.txt
new file mode 100644
index 0000000..8e57d71
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test08.input.txt
@@ -0,0 +1,24 @@
+@flutter-symbolizer-bot engine#499a70f
+
+10-20 16:25:11.188 4954 4954 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+10-20 16:25:11.188 4954 4954 F DEBUG : Build fingerprint: 'google/sargo/sargo:10/QQ1A.200205.003/6293851:userdebug/dev-keys'
+10-20 16:25:11.188 4954 4954 F DEBUG : Revision: 'MP1.0'
+10-20 16:25:11.188 4954 4954 F DEBUG : ABI: 'arm64'
+10-20 16:25:11.189 4954 4954 F DEBUG : Timestamp: 2020-10-20 16:25:11+0200
+10-20 16:25:11.190 4954 4954 F DEBUG : pid: 4825, tid: 4825, name: n.platformviews >>> io.flutter.integration.platformviews <<<
+10-20 16:25:11.190 4954 4954 F DEBUG : uid: 10250
+10-20 16:25:11.190 4954 4954 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
+10-20 16:25:11.190 4954 4954 F DEBUG : Cause: null pointer dereference
+10-20 16:25:11.190 4954 4954 F DEBUG : x0 0000007601449a70 x1 0000007febd2eed8 x2 0000000000000000 x3 0000000000000004
+10-20 16:25:11.190 4954 4954 F DEBUG : x4 0000007febd2ebb8 x5 000000756c1b205c x6 0000000000000339 x7 0000000000000437
+10-20 16:25:11.190 4954 4954 F DEBUG : x8 0000000000000000 x9 0000000000000000 x10 0000000000000000 x11 0000000000000000
+10-20 16:25:11.190 4954 4954 F DEBUG : x12 0000000000000000 x13 0000000000000001 x14 0000000000000000 x15 0000007600ffb090
+10-20 16:25:11.190 4954 4954 F DEBUG : x16 00000075fedd18f0 x17 00000075fedc38c0 x18 0000007602152000 x19 0000007febd2eed8
+10-20 16:25:11.190 4954 4954 F DEBUG : x20 000000756bd67218 x21 0000000000000438 x22 0000000000000001 x23 00000074fc362fc0
+10-20 16:25:11.190 4954 4954 F DEBUG : x24 00000075126b06d8 x25 0000007570899600 x26 00000074fc6dc998 x27 000000756bc6e940
+10-20 16:25:11.190 4954 4954 F DEBUG : x28 0000007601449a88 x29 0000000000000000
+10-20 16:25:11.190 4954 4954 F DEBUG : sp 0000007febd2ee60 lr 0000007512ca7840 pc 0000007513159598
+10-20 16:25:11.190 4954 4954 F DEBUG :
+10-20 16:25:11.190 4954 4954 F DEBUG : backtrace:
+10-20 16:25:11.190 4954 4954 F DEBUG : #00 pc 0000000000b92598 /data/app/io.flutter.integration.platformviews-Uh7C5I-KFJChGzUncdxDdw==/lib/arm64/libflutter.so (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)
+10-20 16:25:11.190 4954 4954 F DEBUG : #01 pc 00000000006e083c /data/app/io.flutter.integration.platformviews-Uh7C5I-KFJChGzUncdxDdw==/lib/arm64/libflutter.so (BuildId: 212dfb5693ad13476239acde23c8ce47d1d91a3a)
diff --git a/github-label-notifier/symbolizer/test/data/test09.expected.github.txt b/github-label-notifier/symbolizer/test/data/test09.expected.github.txt
new file mode 100644
index 0000000..3a02f3e
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test09.expected.github.txt
@@ -0,0 +1,772 @@
+crash from null symbolized using symbols for `45b66b722e1275c47dccbe6b002c8e4cb13ea983` `android-x64-debug`
+```
+#00 000000000009b80e /system/lib64/libc.so (je_arena_ralloc+142)
+#01 00000000000b098b /system/lib64/libc.so (je_realloc+283)
+#02 0000000000ed47a5 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ sk_realloc_throw(void*, unsigned long)
+ third_party/skia/src/ports/SkMemory_malloc.cpp:57:35
+#03 0000000000dfd565 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkTDArray<unsigned char>::resizeStorageToAtLeast(int)
+ third_party/skia/include/private/SkTDArray.h:364:22
+#04 0000000000dfd532 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkTDArray<unsigned char>::setCount(int)
+ third_party/skia/include/private/SkTDArray.h:145:19
+#05 0000000000dfd4eb <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkTDArray<unsigned char>::adjustCount(int)
+ third_party/skia/include/private/SkTDArray.h:343:15
+#06 0000000000dfd4a4 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkTDArray<unsigned char>::append(int, unsigned char const*)
+ third_party/skia/include/private/SkTDArray.h:176:19
+#07 0000000000f61ead <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrQuadBuffer<(anonymous namespace)::FillRectOp::ColorAndAA>::concat(GrQuadBuffer<(anonymous namespace)::FillRectOp::ColorAndAA> const&)
+ third_party/skia/src/gpu/geometry/GrQuadBuffer.h:308:11
+ (anonymous namespace)::FillRectOp::onCombineIfPossible(GrOp*, GrCaps const&)
+ third_party/skia/src/gpu/ops/GrFillRectOp.cpp:275:0
+#08 0000000000f6591f <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrOp::combineIfPossible(GrOp*, GrCaps const&)
+ third_party/skia/src/gpu/ops/GrOp.cpp:38:25
+#09 0000000000f403f7 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetOpList::OpChain::tryConcat(GrRenderTargetOpList::OpChain::List*, GrProcessorSet::Analysis, GrXferProcessor::DstProxy const&, GrAppliedClip const*, SkRect const&, GrCaps const&, GrOpMemoryPool*, GrAuditTrail*)
+ third_party/skia/src/gpu/GrRenderTargetOpList.cpp:258:31
+#10 0000000000f406bd <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetOpList::OpChain::appendOp(std::__1::unique_ptr<GrOp, std::__1::default_delete<GrOp> >, GrProcessorSet::Analysis, GrXferProcessor::DstProxy const*, GrAppliedClip const*, GrCaps const&, GrOpMemoryPool*, GrAuditTrail*)
+ third_party/skia/src/gpu/GrRenderTargetOpList.cpp:325:16
+#11 0000000000f410b2 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetOpList::recordOp(std::__1::unique_ptr<GrOp, std::__1::default_delete<GrOp> >, GrProcessorSet::Analysis, GrAppliedClip*, GrXferProcessor::DstProxy const*, GrCaps const&)
+ third_party/skia/src/gpu/GrRenderTargetOpList.cpp:696:28
+#12 0000000000f3f287 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetOpList::addDrawOp(std::__1::unique_ptr<GrDrawOp, std::__1::default_delete<GrDrawOp> >, GrProcessorSet::Analysis const&, GrAppliedClip&&, GrXferProcessor::DstProxy const&, GrCaps const&)
+ third_party/skia/src/gpu/GrRenderTargetOpList.h:91:15
+#13 0000000000f378ce <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetContext::addDrawOp(GrClip const&, std::__1::unique_ptr<GrDrawOp, std::__1::default_delete<GrDrawOp> >, std::__1::function<void (GrOp*, unsigned int)> const&)
+ third_party/skia/src/gpu/GrRenderTargetContext.cpp:2632:13
+#14 0000000000f389d9 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetContext::drawFilledQuad(GrClip const&, GrPaint&&, GrAA, GrQuadAAFlags, GrQuad const&, GrQuad const&, GrUserStencilSettings const*)
+ third_party/skia/src/gpu/GrRenderTargetContext.cpp:717:15
+#15 0000000000e26a7c <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetContext::fillRectToRect(GrClip const&, GrPaint&&, GrAA, SkMatrix const&, SkRect const&, SkRect const&)
+ third_party/skia/src/gpu/GrRenderTargetContext.h:120:15
+#16 0000000000f38b85 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ GrRenderTargetContext::drawRect(GrClip const&, GrPaint&&, GrAA, SkMatrix const&, SkRect const&, GrStyle const*)
+ third_party/skia/src/gpu/GrRenderTargetContext.cpp:745:15
+#17 0000000000fb3e9c <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkGpuDevice::drawRect(SkRect const&, SkPaint const&)
+ third_party/skia/src/gpu/SkGpuDevice.cpp:410:27
+#18 0000000000e0bb07 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawRect(SkRect const&, SkPaint const&)
+ third_party/skia/src/core/SkCanvas.cpp:2126:27
+#19 0000000000e0a42b <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawRect(SkRect const&, SkPaint const&)
+ third_party/skia/src/core/SkCanvas.cpp:1731:11
+#20 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#21 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#22 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#23 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#24 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#25 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#26 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#27 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#28 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#29 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#30 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#31 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#32 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#33 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#34 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#35 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#36 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#37 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#38 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#39 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#40 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#41 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#42 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#43 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#44 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#45 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#46 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#47 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#48 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#49 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#50 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#51 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#52 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#53 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#54 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#55 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#56 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#57 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#58 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#59 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#60 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#61 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#62 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#63 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#64 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#65 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#66 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#67 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#68 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#69 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#70 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#71 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#72 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#73 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#74 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#75 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#76 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#77 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#78 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#79 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#80 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#81 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#82 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#83 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#84 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#85 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#86 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#87 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#88 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#89 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#90 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#91 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#92 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#93 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#94 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#95 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#96 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#97 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#98 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#99 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#100 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#101 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#102 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#103 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#104 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#105 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#106 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#107 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#108 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#109 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#110 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#111 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#112 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#113 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#114 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#115 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#116 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#117 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#118 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#119 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#120 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#121 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#122 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#123 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#124 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#125 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#126 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#127 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#128 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#129 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#130 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#131 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#132 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#133 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#134 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#135 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#136 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#137 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#138 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#139 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#140 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#141 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#142 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#143 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#144 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#145 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#146 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#147 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#148 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#149 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#150 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#151 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#152 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#153 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#154 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#155 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#156 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#157 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#158 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#159 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#160 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#161 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#162 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#163 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#164 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#165 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#166 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#167 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#168 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#169 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#170 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#171 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#172 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#173 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#174 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#175 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#176 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#177 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#178 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#179 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#180 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#181 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#182 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#183 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#184 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#185 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#186 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#187 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#188 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#189 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#190 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#191 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#192 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#193 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#194 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#195 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#196 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#197 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#198 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#199 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#200 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#201 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#202 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#203 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#204 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#205 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#206 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#207 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#208 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#209 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#210 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#211 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#212 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#213 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#214 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#215 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#216 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#217 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#218 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#219 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#220 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#221 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#222 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#223 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#224 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#225 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#226 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#227 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#228 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#229 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#230 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#231 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#232 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#233 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#234 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#235 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#236 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#237 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#238 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#239 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#240 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#241 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#242 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#243 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#244 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#245 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#246 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#247 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#248 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#249 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#250 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#251 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+#252 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)
+ third_party/skia/src/core/SkRecordDraw.cpp:53:20
+#253 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const
+ third_party/skia/src/core/SkBigPicture.cpp:33:5
+#254 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2863:14
+#255 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)
+ SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)
+ third_party/skia/src/core/SkCanvas.cpp:2843:15
+
+```
+_(Defaulted to release engine because build-id is unavailable or unreliable)_
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test09.expected.txt b/github-label-notifier/symbolizer/test/data/test09.expected.txt
new file mode 100644
index 0000000..44a7c89
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test09.expected.txt
@@ -0,0 +1,2078 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "x64",
+ "mode": "debug"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 636942,
+ "binary": "/system/lib64/libc.so",
+ "rest": " (je_arena_ralloc+142)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 723339,
+ "binary": "/system/lib64/libc.so",
+ "rest": " (je_realloc+283)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "02",
+ "pc": 15550373,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "03",
+ "pc": 14669157,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "04",
+ "pc": 14669106,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "05",
+ "pc": 14669035,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "06",
+ "pc": 14668964,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "07",
+ "pc": 16129709,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "08",
+ "pc": 16144671,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "09",
+ "pc": 15991799,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "10",
+ "pc": 15992509,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "11",
+ "pc": 15995058,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "12",
+ "pc": 15987335,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "13",
+ "pc": 15956174,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "14",
+ "pc": 15960537,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "15",
+ "pc": 14838396,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "16",
+ "pc": 15960965,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "17",
+ "pc": 16465564,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "18",
+ "pc": 14727943,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "19",
+ "pc": 14722091,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "20",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "21",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "22",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "23",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "24",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "25",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "26",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "27",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "28",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "29",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "30",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "31",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "32",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "33",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "34",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "35",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "36",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "37",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "38",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "39",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "40",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "41",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "42",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "43",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "44",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "45",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "46",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "47",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "48",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "49",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "50",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "51",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "52",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "53",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "54",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "55",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "56",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "57",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "58",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "59",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "60",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "61",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "62",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "63",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "64",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "65",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "66",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "67",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "68",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "69",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "70",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "71",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "72",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "73",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "74",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "75",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "76",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "77",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "78",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "79",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "80",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "81",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "82",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "83",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "84",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "85",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "86",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "87",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "88",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "89",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "90",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "91",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "92",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "93",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "94",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "95",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "96",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "97",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "98",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "99",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "100",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "101",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "102",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "103",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "104",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "105",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "106",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "107",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "108",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "109",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "110",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "111",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "112",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "113",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "114",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "115",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "116",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "117",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "118",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "119",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "120",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "121",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "122",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "123",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "124",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "125",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "126",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "127",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "128",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "129",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "130",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "131",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "132",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "133",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "134",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "135",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "136",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "137",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "138",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "139",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "140",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "141",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "142",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "143",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "144",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "145",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "146",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "147",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "148",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "149",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "150",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "151",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "152",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "153",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "154",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "155",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "156",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "157",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "158",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "159",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "160",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "161",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "162",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "163",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "164",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "165",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "166",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "167",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "168",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "169",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "170",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "171",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "172",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "173",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "174",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "175",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "176",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "177",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "178",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "179",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "180",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "181",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "182",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "183",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "184",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "185",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "186",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "187",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "188",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "189",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "190",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "191",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "192",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "193",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "194",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "195",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "196",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "197",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "198",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "199",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "200",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "201",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "202",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "203",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "204",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "205",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "206",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "207",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "208",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "209",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "210",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "211",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "212",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "213",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "214",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "215",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "216",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "217",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "218",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "219",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "220",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "221",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "222",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "223",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "224",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "225",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "226",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "227",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "228",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "229",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "230",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "231",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "232",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "233",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "234",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "235",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "236",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "237",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "238",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "239",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "240",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "241",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "242",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "243",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "244",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "245",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "246",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "247",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "248",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "249",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "250",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "251",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "252",
+ "pc": 14989229,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "253",
+ "pc": 15232841,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "254",
+ "pc": 14736380,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "255",
+ "pc": 14736192,
+ "binary": "/data/app/com.example.app/lib/x86_64/libflutter.so",
+ "rest": " (offset 0xdb0000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 9
+ },
+ "engineBuild": {
+ "engineHash": "45b66b722e1275c47dccbe6b002c8e4cb13ea983",
+ "variant": {
+ "os": "android",
+ "arch": "x64",
+ "mode": "debug"
+ }
+ },
+ "symbolized": "#00 000000000009b80e /system/lib64/libc.so (je_arena_ralloc+142)\n#01 00000000000b098b /system/lib64/libc.so (je_realloc+283)\n#02 0000000000ed47a5 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n sk_realloc_throw(void*, unsigned long)\n third_party/skia/src/ports/SkMemory_malloc.cpp:57:35\n#03 0000000000dfd565 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkTDArray<unsigned char>::resizeStorageToAtLeast(int)\n third_party/skia/include/private/SkTDArray.h:364:22\n#04 0000000000dfd532 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkTDArray<unsigned char>::setCount(int)\n third_party/skia/include/private/SkTDArray.h:145:19\n#05 0000000000dfd4eb <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkTDArray<unsigned char>::adjustCount(int)\n third_party/skia/include/private/SkTDArray.h:343:15\n#06 0000000000dfd4a4 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkTDArray<unsigned char>::append(int, unsigned char const*)\n third_party/skia/include/private/SkTDArray.h:176:19\n#07 0000000000f61ead <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrQuadBuffer<(anonymous namespace)::FillRectOp::ColorAndAA>::concat(GrQuadBuffer<(anonymous namespace)::FillRectOp::ColorAndAA> const&)\n third_party/skia/src/gpu/geometry/GrQuadBuffer.h:308:11\n (anonymous namespace)::FillRectOp::onCombineIfPossible(GrOp*, GrCaps const&)\n third_party/skia/src/gpu/ops/GrFillRectOp.cpp:275:0\n#08 0000000000f6591f <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrOp::combineIfPossible(GrOp*, GrCaps const&)\n third_party/skia/src/gpu/ops/GrOp.cpp:38:25\n#09 0000000000f403f7 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetOpList::OpChain::tryConcat(GrRenderTargetOpList::OpChain::List*, GrProcessorSet::Analysis, GrXferProcessor::DstProxy const&, GrAppliedClip const*, SkRect const&, GrCaps const&, GrOpMemoryPool*, GrAuditTrail*)\n third_party/skia/src/gpu/GrRenderTargetOpList.cpp:258:31\n#10 0000000000f406bd <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetOpList::OpChain::appendOp(std::__1::unique_ptr<GrOp, std::__1::default_delete<GrOp> >, GrProcessorSet::Analysis, GrXferProcessor::DstProxy const*, GrAppliedClip const*, GrCaps const&, GrOpMemoryPool*, GrAuditTrail*)\n third_party/skia/src/gpu/GrRenderTargetOpList.cpp:325:16\n#11 0000000000f410b2 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetOpList::recordOp(std::__1::unique_ptr<GrOp, std::__1::default_delete<GrOp> >, GrProcessorSet::Analysis, GrAppliedClip*, GrXferProcessor::DstProxy const*, GrCaps const&)\n third_party/skia/src/gpu/GrRenderTargetOpList.cpp:696:28\n#12 0000000000f3f287 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetOpList::addDrawOp(std::__1::unique_ptr<GrDrawOp, std::__1::default_delete<GrDrawOp> >, GrProcessorSet::Analysis const&, GrAppliedClip&&, GrXferProcessor::DstProxy const&, GrCaps const&)\n third_party/skia/src/gpu/GrRenderTargetOpList.h:91:15\n#13 0000000000f378ce <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetContext::addDrawOp(GrClip const&, std::__1::unique_ptr<GrDrawOp, std::__1::default_delete<GrDrawOp> >, std::__1::function<void (GrOp*, unsigned int)> const&)\n third_party/skia/src/gpu/GrRenderTargetContext.cpp:2632:13\n#14 0000000000f389d9 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetContext::drawFilledQuad(GrClip const&, GrPaint&&, GrAA, GrQuadAAFlags, GrQuad const&, GrQuad const&, GrUserStencilSettings const*)\n third_party/skia/src/gpu/GrRenderTargetContext.cpp:717:15\n#15 0000000000e26a7c <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetContext::fillRectToRect(GrClip const&, GrPaint&&, GrAA, SkMatrix const&, SkRect const&, SkRect const&)\n third_party/skia/src/gpu/GrRenderTargetContext.h:120:15\n#16 0000000000f38b85 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n GrRenderTargetContext::drawRect(GrClip const&, GrPaint&&, GrAA, SkMatrix const&, SkRect const&, GrStyle const*)\n third_party/skia/src/gpu/GrRenderTargetContext.cpp:745:15\n#17 0000000000fb3e9c <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkGpuDevice::drawRect(SkRect const&, SkPaint const&)\n third_party/skia/src/gpu/SkGpuDevice.cpp:410:27\n#18 0000000000e0bb07 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawRect(SkRect const&, SkPaint const&)\n third_party/skia/src/core/SkCanvas.cpp:2126:27\n#19 0000000000e0a42b <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawRect(SkRect const&, SkPaint const&)\n third_party/skia/src/core/SkCanvas.cpp:1731:11\n#20 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#21 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#22 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#23 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#24 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#25 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#26 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#27 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#28 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#29 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#30 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#31 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#32 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#33 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#34 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#35 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#36 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#37 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#38 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#39 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#40 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#41 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#42 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#43 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#44 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#45 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#46 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#47 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#48 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#49 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#50 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#51 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#52 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#53 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#54 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#55 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#56 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#57 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#58 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#59 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#60 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#61 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#62 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#63 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#64 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#65 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#66 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#67 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#68 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#69 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#70 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#71 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#72 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#73 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#74 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#75 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#76 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#77 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#78 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#79 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#80 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#81 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#82 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#83 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#84 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#85 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#86 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#87 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#88 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#89 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#90 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#91 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#92 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#93 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#94 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#95 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#96 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#97 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#98 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#99 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#100 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#101 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#102 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#103 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#104 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#105 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#106 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#107 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#108 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#109 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#110 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#111 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#112 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#113 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#114 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#115 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#116 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#117 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#118 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#119 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#120 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#121 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#122 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#123 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#124 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#125 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#126 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#127 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#128 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#129 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#130 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#131 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#132 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#133 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#134 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#135 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#136 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#137 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#138 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#139 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#140 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#141 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#142 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#143 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#144 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#145 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#146 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#147 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#148 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#149 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#150 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#151 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#152 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#153 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#154 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#155 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#156 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#157 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#158 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#159 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#160 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#161 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#162 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#163 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#164 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#165 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#166 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#167 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#168 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#169 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#170 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#171 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#172 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#173 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#174 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#175 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#176 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#177 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#178 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#179 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#180 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#181 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#182 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#183 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#184 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#185 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#186 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#187 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#188 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#189 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#190 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#191 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#192 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#193 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#194 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#195 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#196 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#197 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#198 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#199 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#200 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#201 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#202 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#203 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#204 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#205 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#206 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#207 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#208 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#209 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#210 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#211 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#212 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#213 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#214 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#215 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#216 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#217 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#218 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#219 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#220 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#221 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#222 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#223 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#224 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#225 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#226 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#227 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#228 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#229 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#230 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#231 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#232 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#233 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#234 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#235 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#236 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#237 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#238 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#239 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#240 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#241 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#242 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#243 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#244 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#245 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#246 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#247 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#248 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#249 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#250 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#251 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n#252 0000000000e4b7ad <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*)\n third_party/skia/src/core/SkRecordDraw.cpp:53:20\n#253 0000000000e86f49 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkBigPicture::playback(SkCanvas*, SkPicture::AbortCallback*) const\n third_party/skia/src/core/SkBigPicture.cpp:33:5\n#254 0000000000e0dbfc <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2863:14\n#255 0000000000e0db40 <...>/lib/x86_64/libflutter.so (offset 0xdb0000)\n SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*)\n third_party/skia/src/core/SkCanvas.cpp:2843:15\n",
+ "notes": [
+ {
+ "kind": "defaultedToReleaseBuildIdUnavailable",
+ "message": null
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test09.input.txt b/github-label-notifier/symbolizer/test/data/test09.input.txt
new file mode 100644
index 0000000..e16eebe
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test09.input.txt
@@ -0,0 +1,274 @@
+```
+[ +15 ms] Launching lib/main.dart on Android SDK built for x86 64 in debug mode...
+[ +54 ms] *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+[ ] Build fingerprint: 'google/sdk_gphone_x86_64/generic_x86_64:9/PSR1.180720.075/5124027:userdebug/dev-keys'
+[ ] Revision: '0'
+[ ] ABI: 'x86_64'
+[ ] pid: 25633, tid: 25655, name: 1.gpu >>> com.example.app <<<
+[ ] signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7bc78465aff8
+[ +9 ms] backtrace:
+[ ] #00 pc 000000000009b80e /system/lib64/libc.so (je_arena_ralloc+142)
+[ ] #01 pc 00000000000b098b /system/lib64/libc.so (je_realloc+283)
+[ ] #02 pc 0000000000ed47a5 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #03 pc 0000000000dfd565 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #04 pc 0000000000dfd532 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #05 pc 0000000000dfd4eb /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #06 pc 0000000000dfd4a4 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #07 pc 0000000000f61ead /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #08 pc 0000000000f6591f /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #09 pc 0000000000f403f7 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #10 pc 0000000000f406bd /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #11 pc 0000000000f410b2 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #12 pc 0000000000f3f287 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #13 pc 0000000000f378ce /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #14 pc 0000000000f389d9 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #15 pc 0000000000e26a7c /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #16 pc 0000000000f38b85 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #17 pc 0000000000fb3e9c /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #18 pc 0000000000e0bb07 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #19 pc 0000000000e0a42b /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #20 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #21 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #22 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #23 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #24 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #25 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #26 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #27 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #28 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #29 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #30 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #31 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #32 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #33 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #34 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #35 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #36 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #37 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #38 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #39 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #40 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #41 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #42 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #43 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #44 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #45 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #46 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #47 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #48 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #49 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #50 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #51 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #52 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #53 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #54 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #55 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #56 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #57 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #58 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #59 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #60 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #61 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #62 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #63 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #64 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #65 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #66 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #67 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #68 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #69 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #70 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #71 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #72 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #73 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #74 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #75 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #76 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #77 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #78 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #79 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #80 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #81 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #82 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #83 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #84 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #85 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #86 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #87 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #88 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #89 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #90 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #91 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #92 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #93 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #94 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #95 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #96 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #97 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #98 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #99 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ +1 ms] #100 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #101 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #102 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #103 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #104 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #105 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #106 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #107 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #108 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #109 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #110 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #111 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #112 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #113 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #114 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #115 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #116 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #117 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #118 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #119 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #120 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #121 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #122 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #123 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #124 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #125 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #126 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #127 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #128 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #129 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #130 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #131 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #132 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #133 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #134 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #135 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #136 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #137 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #138 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #139 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #140 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #141 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #142 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #143 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #144 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #145 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #146 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #147 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #148 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #149 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #150 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #151 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #152 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #153 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #154 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #155 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #156 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #157 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #158 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #159 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #160 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #161 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #162 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #163 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #164 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #165 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #166 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #167 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #168 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #169 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #170 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #171 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #172 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #173 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #174 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #175 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #176 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #177 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #178 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #179 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #180 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #181 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #182 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #183 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #184 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #185 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #186 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #187 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #188 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #189 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #190 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #191 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #192 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #193 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #194 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #195 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #196 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #197 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #198 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #199 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #200 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #201 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #202 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ +1 ms] #203 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #204 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #205 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #206 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #207 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #208 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #209 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #210 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #211 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #212 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #213 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #214 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #215 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #216 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #217 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #218 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #219 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #220 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #221 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #222 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #223 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #224 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #225 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #226 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #227 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #228 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #229 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #230 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #231 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #232 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #233 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #234 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #235 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #236 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #237 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #238 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #239 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #240 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #241 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #242 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #243 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #244 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #245 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #246 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #247 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #248 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #249 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #250 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #251 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #252 pc 0000000000e4b7ad /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #253 pc 0000000000e86f49 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #254 pc 0000000000e0dbfc /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+[ ] #255 pc 0000000000e0db40 /data/app/com.example.app/lib/x86_64/libflutter.so (offset 0xdb0000)
+```
+
+```
+[✓] Flutter (Channel master, v1.8.1-pre.2, on Linux, locale en_US.UTF-8)
+ • Flutter version 1.8.1-pre.2 at ...
+ • Framework revision 1a374d820d (9 days ago), 2019-07-01 16:17:11 -0700
+ • Engine revision 45b66b722e
+ • Dart version 2.4.0
+```
diff --git a/github-label-notifier/symbolizer/test/data/test10.expected.github.txt b/github-label-notifier/symbolizer/test/data/test10.expected.github.txt
new file mode 100644
index 0000000..e262dfb
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test10.expected.github.txt
@@ -0,0 +1,179 @@
+crash from null symbolized using symbols for `b8752bbfff0419c8bf616b602bc59fd28f6a3d1b` `ios-arm64-release`
+```
+#00 000000019007e5c0 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 1185216
+#01 00000001a416c42c libobjc.A.dylib objc_exception_throw + 60
+#02 000000018ff7aa9c CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 121500
+#03 0000000102419508 XX XX + 1742088
+#04 00000001d7f6927c libsystem_platform.dylib 79AAC6D7-C39F-3B6B-882F-AA494B891C56 + 21116
+#05 00000001029708c0 Flutter Flutter + 952512
+ SkArenaAlloc::RunDtorsOnBlock(char*)
+ third_party/skia/src/core/SkArenaAlloc.cpp:61:21
+ SkArenaAlloc::~SkArenaAlloc()
+ third_party/skia/src/core/SkArenaAlloc.cpp:36:0
+ SkArenaAlloc::~SkArenaAlloc()
+ third_party/skia/src/core/SkArenaAlloc.cpp:35:0
+ SkRecord::~SkRecord()
+ third_party/skia/src/core/SkRecord.cpp:17:0
+#06 00000001029708c0 Flutter Flutter + 952512
+ SkArenaAlloc::RunDtorsOnBlock(char*)
+ third_party/skia/src/core/SkArenaAlloc.cpp:61:21
+ SkArenaAlloc::~SkArenaAlloc()
+ third_party/skia/src/core/SkArenaAlloc.cpp:36:0
+ SkArenaAlloc::~SkArenaAlloc()
+ third_party/skia/src/core/SkArenaAlloc.cpp:35:0
+ SkRecord::~SkRecord()
+ third_party/skia/src/core/SkRecord.cpp:17:0
+#07 0000000102970848 Flutter Flutter + 952392
+ SkRecord::~SkRecord()
+ third_party/skia/src/core/SkRecord.cpp:12:23
+ SkRecord::~SkRecord()
+ third_party/skia/src/core/SkRecord.cpp:12:0
+#08 00000001029c0b68 Flutter Flutter + 1280872
+ SkRefCntBase::unref() const
+ third_party/skia/include/core/SkRefCnt.h:77:19
+ void SkSafeUnref<SkRecord const>(SkRecord const*)
+ third_party/skia/include/core/SkRefCnt.h:150:0
+ sk_sp<SkRecord const>::~sk_sp()
+ third_party/skia/include/core/SkRefCnt.h:251:0
+ sk_sp<SkRecord const>::~sk_sp()
+ third_party/skia/include/core/SkRefCnt.h:250:0
+ SkBigPicture::~SkBigPicture()
+ third_party/skia/src/core/SkBigPicture.h:22:0
+ SkBigPicture::~SkBigPicture()
+ third_party/skia/src/core/SkBigPicture.h:22:0
+ SkBigPicture::~SkBigPicture()
+ third_party/skia/src/core/SkBigPicture.h:22:0
+#09 0000000102914a40 Flutter Flutter + 576064
+ SkRefCntBase::unref() const
+ third_party/skia/include/core/SkRefCnt.h:77:19
+ flutter::SkiaUnrefQueue::Drain()
+ flutter/flow/skia_gpu_object.cc:44:0
+#10 00000001028c344c Flutter Flutter + 242764
+ std::__1::__function::__value_func<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16
+ std::__1::function<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0
+ fml::MessageLoopImpl::FlushTasks(fml::FlushType)
+ flutter/fml/message_loop_impl.cc:130:0
+#11 00000001028c53c0 Flutter Flutter + 250816
+ fml::MessageLoopImpl::RunExpiredTasksNow()
+ flutter/fml/message_loop_impl.cc:143:3
+ fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)
+ flutter/fml/platform/darwin/message_loop_darwin.mm:75:0
+#12 000000018fffc050 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 651344
+#13 000000018fffbc50 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 650320
+#14 000000018fffb0c4 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 647364
+#15 000000018fff5178 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 622968
+#16 000000018fff44bc CoreFoundation CFRunLoopRunSpecific + 600
+#17 00000001028c529c Flutter Flutter + 250524
+ fml::MessageLoopDarwin::Run()
+ flutter/fml/platform/darwin/message_loop_darwin.mm:46:20
+#18 00000001028c4c24 Flutter Flutter + 248868
+ fml::MessageLoopImpl::DoRun()
+ flutter/fml/message_loop_impl.cc:96:3
+ fml::MessageLoop::Run()
+ flutter/fml/message_loop.cc:49:0
+ fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const
+ flutter/fml/thread.cc:36:0
+ decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:0
+ void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:0
+#19 00000001d7f6dca8 libsystem_pthread.dylib _pthread_start + 320
+#20 00000001d7f76788 libsystem_pthread.dylib thread_start + 8
+
+```
+
+crash from null symbolized using symbols for `b8752bbfff0419c8bf616b602bc59fd28f6a3d1b` `ios-arm64-release`
+```
+#00 0000000192b825c0 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 1185216
+#01 00000001a6bfc42c libobjc.A.dylib objc_exception_throw + 60
+#02 0000000192a7ea9c CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 121500
+#03 00000001044ed508 XX XX + 1742088
+#04 00000001da0d627c libsystem_platform.dylib DAE36DD6-F44A-39F4-9924-261898BD82CC + 21116
+#05 00000001da0dbc74 libsystem_pthread.dylib pthread_kill + 272
+#06 000000019bc84bb4 libsystem_c.dylib abort + 104
+#07 00000001a1bd24dc libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 124124
+#08 00000001a1bd2768 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 124776
+#09 00000001a1bbde84 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 40580
+#10 00000001a1bbaeb8 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 28344
+#11 00000001a1bbbf30 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 32560
+#12 0000000104d577d0 Flutter Flutter + 5634000
+ dart::FinalizablePersistentHandle::Finalize(dart::IsolateGroup*, dart::FinalizablePersistentHandle*)
+ third_party/dart/runtime/vm/dart_api_impl.cc:729:5
+ dart::FinalizablePersistentHandle::UpdateUnreachable(dart::IsolateGroup*)
+ third_party/dart/runtime/vm/dart_api_state.h:273:0
+ dart::ScavengerWeakVisitor::VisitHandle(unsigned long)
+ third_party/dart/runtime/vm/heap/scavenger.cc:454:0
+#13 0000000104d5859c Flutter Flutter + 5637532
+ dart::Handles<5, 64, 0>::HandlesBlock::Visit(dart::HandleVisitor*)
+ third_party/dart/runtime/vm/handles_impl.h:302:14
+ dart::Handles<5, 64, 0>::Visit(dart::HandleVisitor*)
+ third_party/dart/runtime/vm/handles_impl.h:55:0
+ dart::FinalizablePersistentHandles::VisitHandles(dart::HandleVisitor*)
+ third_party/dart/runtime/vm/dart_api_state.h:581:0
+ dart::ApiState::VisitWeakHandlesUnlocked(dart::HandleVisitor*)
+ third_party/dart/runtime/vm/dart_api_state.h:792:0
+ dart::IsolateGroup::VisitWeakPersistentHandles(dart::HandleVisitor*)
+ third_party/dart/runtime/vm/isolate.cc:2952:0
+ dart::Scavenger::MournWeakHandles()
+ third_party/dart/runtime/vm/heap/scavenger.cc:1131:0
+ dart::Scavenger::Scavenge()
+ third_party/dart/runtime/vm/heap/scavenger.cc:1516:0
+#14 0000000104d4cd64 Flutter Flutter + 5590372
+ dart::Heap::CollectNewSpaceGarbage(dart::Thread*, dart::Heap::GCReason)
+ third_party/dart/runtime/vm/heap/heap.cc:467:18
+#15 0000000104d4e280 Flutter Flutter + 5595776
+ dart::Heap::NotifyIdle(long long)
+ third_party/dart/runtime/vm/heap/heap.cc:378:5
+#16 0000000104c6166c Flutter Flutter + 4626028
+ dart::IdleTimeHandler::NotifyIdle(long long)
+ third_party/dart/runtime/vm/isolate.cc:249:12
+ Dart_NotifyIdle
+ third_party/dart/runtime/vm/dart_api_impl.cc:1910:0
+ flutter::RuntimeController::NotifyIdle(long long, unsigned long)
+ flutter/runtime/runtime_controller.cc:251:0
+#17 0000000104af5b9c Flutter Flutter + 3136412
+ flutter::Engine::NotifyIdle(long long)
+ flutter/shell/common/engine.cc:260:24
+#18 000000010483344c Flutter Flutter + 242764
+ std::__1::__function::__value_func<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16
+ std::__1::function<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0
+ fml::MessageLoopImpl::FlushTasks(fml::FlushType)
+ flutter/fml/message_loop_impl.cc:130:0
+#19 00000001048353c0 Flutter Flutter + 250816
+ fml::MessageLoopImpl::RunExpiredTasksNow()
+ flutter/fml/message_loop_impl.cc:143:3
+ fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)
+ flutter/fml/platform/darwin/message_loop_darwin.mm:75:0
+#20 0000000192b00050 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 651344
+#21 0000000192affc50 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 650320
+#22 0000000192aff0c4 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 647364
+#23 0000000192af9178 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 622968
+#24 0000000192af84bc CoreFoundation CFRunLoopRunSpecific + 600
+#25 000000010483529c Flutter Flutter + 250524
+ fml::MessageLoopDarwin::Run()
+ flutter/fml/platform/darwin/message_loop_darwin.mm:46:20
+#26 0000000104834c24 Flutter Flutter + 248868
+ fml::MessageLoopImpl::DoRun()
+ flutter/fml/message_loop_impl.cc:96:3
+ fml::MessageLoop::Run()
+ flutter/fml/message_loop.cc:49:0
+ fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const
+ flutter/fml/thread.cc:36:0
+ decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:0
+ void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:0
+#27 00000001da0daca8 libsystem_pthread.dylib _pthread_start + 320
+#28 00000001da0e3788 libsystem_pthread.dylib thread_start + 8
+
+```
+
+<!-- {"symbolized":[1001]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test10.expected.txt b/github-label-notifier/symbolizer/test/data/test10.expected.txt
new file mode 100644
index 0000000..9fafa7b
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test10.expected.txt
@@ -0,0 +1,498 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "0",
+ "binary": "CoreFoundation",
+ "pc": 6711403968,
+ "symbol": "52963DBA-FA89-36C2-8262-28B9776F8C12",
+ "offset": 1185216,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "1",
+ "binary": "libobjc.A.dylib",
+ "pc": 7047922732,
+ "symbol": "objc_exception_throw",
+ "offset": 60,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "2",
+ "binary": "CoreFoundation",
+ "pc": 6710340252,
+ "symbol": "52963DBA-FA89-36C2-8262-28B9776F8C12",
+ "offset": 121500,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "3",
+ "binary": "XX",
+ "pc": 4332819720,
+ "symbol": "XX",
+ "offset": 1742088,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "4",
+ "binary": "libsystem_platform.dylib",
+ "pc": 7918228092,
+ "symbol": "79AAC6D7-C39F-3B6B-882F-AA494B891C56",
+ "offset": 21116,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "5",
+ "binary": "Flutter",
+ "pc": 4338419904,
+ "symbol": "Flutter",
+ "offset": 952512,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "6",
+ "binary": "Flutter",
+ "pc": 4338419904,
+ "symbol": "Flutter",
+ "offset": 952512,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "7",
+ "binary": "Flutter",
+ "pc": 4338419784,
+ "symbol": "Flutter",
+ "offset": 952392,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "8",
+ "binary": "Flutter",
+ "pc": 4338748264,
+ "symbol": "Flutter",
+ "offset": 1280872,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "9",
+ "binary": "Flutter",
+ "pc": 4338043456,
+ "symbol": "Flutter",
+ "offset": 576064,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "10",
+ "binary": "Flutter",
+ "pc": 4337710156,
+ "symbol": "Flutter",
+ "offset": 242764,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "11",
+ "binary": "Flutter",
+ "pc": 4337718208,
+ "symbol": "Flutter",
+ "offset": 250816,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "12",
+ "binary": "CoreFoundation",
+ "pc": 6710870096,
+ "symbol": "52963DBA-FA89-36C2-8262-28B9776F8C12",
+ "offset": 651344,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "13",
+ "binary": "CoreFoundation",
+ "pc": 6710869072,
+ "symbol": "52963DBA-FA89-36C2-8262-28B9776F8C12",
+ "offset": 650320,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "14",
+ "binary": "CoreFoundation",
+ "pc": 6710866116,
+ "symbol": "52963DBA-FA89-36C2-8262-28B9776F8C12",
+ "offset": 647364,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "15",
+ "binary": "CoreFoundation",
+ "pc": 6710841720,
+ "symbol": "52963DBA-FA89-36C2-8262-28B9776F8C12",
+ "offset": 622968,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "16",
+ "binary": "CoreFoundation",
+ "pc": 6710838460,
+ "symbol": "CFRunLoopRunSpecific",
+ "offset": 600,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "17",
+ "binary": "Flutter",
+ "pc": 4337717916,
+ "symbol": "Flutter",
+ "offset": 250524,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "18",
+ "binary": "Flutter",
+ "pc": 4337716260,
+ "symbol": "Flutter",
+ "offset": 248868,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "19",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 7918247080,
+ "symbol": "_pthread_start",
+ "offset": 320,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "20",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 7918282632,
+ "symbol": "thread_start",
+ "offset": 8,
+ "location": "",
+ "runtimeType": "ios"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "b8752bbfff0419c8bf616b602bc59fd28f6a3d1b",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 000000019007e5c0 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 1185216\n#01 00000001a416c42c libobjc.A.dylib objc_exception_throw + 60\n#02 000000018ff7aa9c CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 121500\n#03 0000000102419508 XX XX + 1742088\n#04 00000001d7f6927c libsystem_platform.dylib 79AAC6D7-C39F-3B6B-882F-AA494B891C56 + 21116\n#05 00000001029708c0 Flutter Flutter + 952512\n SkArenaAlloc::RunDtorsOnBlock(char*)\n third_party/skia/src/core/SkArenaAlloc.cpp:61:21\n SkArenaAlloc::~SkArenaAlloc()\n third_party/skia/src/core/SkArenaAlloc.cpp:36:0\n SkArenaAlloc::~SkArenaAlloc()\n third_party/skia/src/core/SkArenaAlloc.cpp:35:0\n SkRecord::~SkRecord()\n third_party/skia/src/core/SkRecord.cpp:17:0\n#06 00000001029708c0 Flutter Flutter + 952512\n SkArenaAlloc::RunDtorsOnBlock(char*)\n third_party/skia/src/core/SkArenaAlloc.cpp:61:21\n SkArenaAlloc::~SkArenaAlloc()\n third_party/skia/src/core/SkArenaAlloc.cpp:36:0\n SkArenaAlloc::~SkArenaAlloc()\n third_party/skia/src/core/SkArenaAlloc.cpp:35:0\n SkRecord::~SkRecord()\n third_party/skia/src/core/SkRecord.cpp:17:0\n#07 0000000102970848 Flutter Flutter + 952392\n SkRecord::~SkRecord()\n third_party/skia/src/core/SkRecord.cpp:12:23\n SkRecord::~SkRecord()\n third_party/skia/src/core/SkRecord.cpp:12:0\n#08 00000001029c0b68 Flutter Flutter + 1280872\n SkRefCntBase::unref() const\n third_party/skia/include/core/SkRefCnt.h:77:19\n void SkSafeUnref<SkRecord const>(SkRecord const*)\n third_party/skia/include/core/SkRefCnt.h:150:0\n sk_sp<SkRecord const>::~sk_sp()\n third_party/skia/include/core/SkRefCnt.h:251:0\n sk_sp<SkRecord const>::~sk_sp()\n third_party/skia/include/core/SkRefCnt.h:250:0\n SkBigPicture::~SkBigPicture()\n third_party/skia/src/core/SkBigPicture.h:22:0\n SkBigPicture::~SkBigPicture()\n third_party/skia/src/core/SkBigPicture.h:22:0\n SkBigPicture::~SkBigPicture()\n third_party/skia/src/core/SkBigPicture.h:22:0\n#09 0000000102914a40 Flutter Flutter + 576064\n SkRefCntBase::unref() const\n third_party/skia/include/core/SkRefCnt.h:77:19\n flutter::SkiaUnrefQueue::Drain()\n flutter/flow/skia_gpu_object.cc:44:0\n#10 00000001028c344c Flutter Flutter + 242764\n std::__1::__function::__value_func<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n fml::MessageLoopImpl::FlushTasks(fml::FlushType)\n flutter/fml/message_loop_impl.cc:130:0\n#11 00000001028c53c0 Flutter Flutter + 250816\n fml::MessageLoopImpl::RunExpiredTasksNow()\n flutter/fml/message_loop_impl.cc:143:3\n fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)\n flutter/fml/platform/darwin/message_loop_darwin.mm:75:0\n#12 000000018fffc050 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 651344\n#13 000000018fffbc50 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 650320\n#14 000000018fffb0c4 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 647364\n#15 000000018fff5178 CoreFoundation 52963DBA-FA89-36C2-8262-28B9776F8C12 + 622968\n#16 000000018fff44bc CoreFoundation CFRunLoopRunSpecific + 600\n#17 00000001028c529c Flutter Flutter + 250524\n fml::MessageLoopDarwin::Run()\n flutter/fml/platform/darwin/message_loop_darwin.mm:46:20\n#18 00000001028c4c24 Flutter Flutter + 248868\n fml::MessageLoopImpl::DoRun()\n flutter/fml/message_loop_impl.cc:96:3\n fml::MessageLoop::Run()\n flutter/fml/message_loop.cc:49:0\n fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const\n flutter/fml/thread.cc:36:0\n decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:0\n void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:0\n#19 00000001d7f6dca8 libsystem_pthread.dylib _pthread_start + 320\n#20 00000001d7f76788 libsystem_pthread.dylib thread_start + 8\n",
+ "notes": []
+ },
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "0",
+ "binary": "CoreFoundation",
+ "pc": 6756509120,
+ "symbol": "472C9193-115D-34CD-AD1D-0E7E091C9432",
+ "offset": 1185216,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "1",
+ "binary": "libobjc.A.dylib",
+ "pc": 7092552748,
+ "symbol": "objc_exception_throw",
+ "offset": 60,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "2",
+ "binary": "CoreFoundation",
+ "pc": 6755445404,
+ "symbol": "472C9193-115D-34CD-AD1D-0E7E091C9432",
+ "offset": 121500,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "3",
+ "binary": "XX",
+ "pc": 4367242504,
+ "symbol": "XX",
+ "offset": 1742088,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "4",
+ "binary": "libsystem_platform.dylib",
+ "pc": 7953277564,
+ "symbol": "DAE36DD6-F44A-39F4-9924-261898BD82CC",
+ "offset": 21116,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "5",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 7953300596,
+ "symbol": "pthread_kill",
+ "offset": 272,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "6",
+ "binary": "libsystem_c.dylib",
+ "pc": 6908562356,
+ "symbol": "abort",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "7",
+ "binary": "libsystem_malloc.dylib",
+ "pc": 7008494812,
+ "symbol": "C39547F4-E0DF-3637-85A6-FD564AAB9C45",
+ "offset": 124124,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "8",
+ "binary": "libsystem_malloc.dylib",
+ "pc": 7008495464,
+ "symbol": "C39547F4-E0DF-3637-85A6-FD564AAB9C45",
+ "offset": 124776,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "9",
+ "binary": "libsystem_malloc.dylib",
+ "pc": 7008411268,
+ "symbol": "C39547F4-E0DF-3637-85A6-FD564AAB9C45",
+ "offset": 40580,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "10",
+ "binary": "libsystem_malloc.dylib",
+ "pc": 7008399032,
+ "symbol": "C39547F4-E0DF-3637-85A6-FD564AAB9C45",
+ "offset": 28344,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "11",
+ "binary": "libsystem_malloc.dylib",
+ "pc": 7008403248,
+ "symbol": "C39547F4-E0DF-3637-85A6-FD564AAB9C45",
+ "offset": 32560,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "12",
+ "binary": "Flutter",
+ "pc": 4376066000,
+ "symbol": "Flutter",
+ "offset": 5634000,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "13",
+ "binary": "Flutter",
+ "pc": 4376069532,
+ "symbol": "Flutter",
+ "offset": 5637532,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "14",
+ "binary": "Flutter",
+ "pc": 4376022372,
+ "symbol": "Flutter",
+ "offset": 5590372,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "15",
+ "binary": "Flutter",
+ "pc": 4376027776,
+ "symbol": "Flutter",
+ "offset": 5595776,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "16",
+ "binary": "Flutter",
+ "pc": 4375058028,
+ "symbol": "Flutter",
+ "offset": 4626028,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "17",
+ "binary": "Flutter",
+ "pc": 4373568412,
+ "symbol": "Flutter",
+ "offset": 3136412,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "18",
+ "binary": "Flutter",
+ "pc": 4370674764,
+ "symbol": "Flutter",
+ "offset": 242764,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "19",
+ "binary": "Flutter",
+ "pc": 4370682816,
+ "symbol": "Flutter",
+ "offset": 250816,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "20",
+ "binary": "CoreFoundation",
+ "pc": 6755975248,
+ "symbol": "472C9193-115D-34CD-AD1D-0E7E091C9432",
+ "offset": 651344,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "21",
+ "binary": "CoreFoundation",
+ "pc": 6755974224,
+ "symbol": "472C9193-115D-34CD-AD1D-0E7E091C9432",
+ "offset": 650320,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "22",
+ "binary": "CoreFoundation",
+ "pc": 6755971268,
+ "symbol": "472C9193-115D-34CD-AD1D-0E7E091C9432",
+ "offset": 647364,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "23",
+ "binary": "CoreFoundation",
+ "pc": 6755946872,
+ "symbol": "472C9193-115D-34CD-AD1D-0E7E091C9432",
+ "offset": 622968,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "24",
+ "binary": "CoreFoundation",
+ "pc": 6755943612,
+ "symbol": "CFRunLoopRunSpecific",
+ "offset": 600,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "25",
+ "binary": "Flutter",
+ "pc": 4370682524,
+ "symbol": "Flutter",
+ "offset": 250524,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "26",
+ "binary": "Flutter",
+ "pc": 4370680868,
+ "symbol": "Flutter",
+ "offset": 248868,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "27",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 7953296552,
+ "symbol": "_pthread_start",
+ "offset": 320,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "28",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 7953332104,
+ "symbol": "thread_start",
+ "offset": 8,
+ "location": "",
+ "runtimeType": "ios"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "b8752bbfff0419c8bf616b602bc59fd28f6a3d1b",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 0000000192b825c0 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 1185216\n#01 00000001a6bfc42c libobjc.A.dylib objc_exception_throw + 60\n#02 0000000192a7ea9c CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 121500\n#03 00000001044ed508 XX XX + 1742088\n#04 00000001da0d627c libsystem_platform.dylib DAE36DD6-F44A-39F4-9924-261898BD82CC + 21116\n#05 00000001da0dbc74 libsystem_pthread.dylib pthread_kill + 272\n#06 000000019bc84bb4 libsystem_c.dylib abort + 104\n#07 00000001a1bd24dc libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 124124\n#08 00000001a1bd2768 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 124776\n#09 00000001a1bbde84 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 40580\n#10 00000001a1bbaeb8 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 28344\n#11 00000001a1bbbf30 libsystem_malloc.dylib C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 32560\n#12 0000000104d577d0 Flutter Flutter + 5634000\n dart::FinalizablePersistentHandle::Finalize(dart::IsolateGroup*, dart::FinalizablePersistentHandle*)\n third_party/dart/runtime/vm/dart_api_impl.cc:729:5\n dart::FinalizablePersistentHandle::UpdateUnreachable(dart::IsolateGroup*)\n third_party/dart/runtime/vm/dart_api_state.h:273:0\n dart::ScavengerWeakVisitor::VisitHandle(unsigned long)\n third_party/dart/runtime/vm/heap/scavenger.cc:454:0\n#13 0000000104d5859c Flutter Flutter + 5637532\n dart::Handles<5, 64, 0>::HandlesBlock::Visit(dart::HandleVisitor*)\n third_party/dart/runtime/vm/handles_impl.h:302:14\n dart::Handles<5, 64, 0>::Visit(dart::HandleVisitor*)\n third_party/dart/runtime/vm/handles_impl.h:55:0\n dart::FinalizablePersistentHandles::VisitHandles(dart::HandleVisitor*)\n third_party/dart/runtime/vm/dart_api_state.h:581:0\n dart::ApiState::VisitWeakHandlesUnlocked(dart::HandleVisitor*)\n third_party/dart/runtime/vm/dart_api_state.h:792:0\n dart::IsolateGroup::VisitWeakPersistentHandles(dart::HandleVisitor*)\n third_party/dart/runtime/vm/isolate.cc:2952:0\n dart::Scavenger::MournWeakHandles()\n third_party/dart/runtime/vm/heap/scavenger.cc:1131:0\n dart::Scavenger::Scavenge()\n third_party/dart/runtime/vm/heap/scavenger.cc:1516:0\n#14 0000000104d4cd64 Flutter Flutter + 5590372\n dart::Heap::CollectNewSpaceGarbage(dart::Thread*, dart::Heap::GCReason)\n third_party/dart/runtime/vm/heap/heap.cc:467:18\n#15 0000000104d4e280 Flutter Flutter + 5595776\n dart::Heap::NotifyIdle(long long)\n third_party/dart/runtime/vm/heap/heap.cc:378:5\n#16 0000000104c6166c Flutter Flutter + 4626028\n dart::IdleTimeHandler::NotifyIdle(long long)\n third_party/dart/runtime/vm/isolate.cc:249:12\n Dart_NotifyIdle\n third_party/dart/runtime/vm/dart_api_impl.cc:1910:0\n flutter::RuntimeController::NotifyIdle(long long, unsigned long)\n flutter/runtime/runtime_controller.cc:251:0\n#17 0000000104af5b9c Flutter Flutter + 3136412\n flutter::Engine::NotifyIdle(long long)\n flutter/shell/common/engine.cc:260:24\n#18 000000010483344c Flutter Flutter + 242764\n std::__1::__function::__value_func<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n fml::MessageLoopImpl::FlushTasks(fml::FlushType)\n flutter/fml/message_loop_impl.cc:130:0\n#19 00000001048353c0 Flutter Flutter + 250816\n fml::MessageLoopImpl::RunExpiredTasksNow()\n flutter/fml/message_loop_impl.cc:143:3\n fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)\n flutter/fml/platform/darwin/message_loop_darwin.mm:75:0\n#20 0000000192b00050 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 651344\n#21 0000000192affc50 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 650320\n#22 0000000192aff0c4 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 647364\n#23 0000000192af9178 CoreFoundation 472C9193-115D-34CD-AD1D-0E7E091C9432 + 622968\n#24 0000000192af84bc CoreFoundation CFRunLoopRunSpecific + 600\n#25 000000010483529c Flutter Flutter + 250524\n fml::MessageLoopDarwin::Run()\n flutter/fml/platform/darwin/message_loop_darwin.mm:46:20\n#26 0000000104834c24 Flutter Flutter + 248868\n fml::MessageLoopImpl::DoRun()\n flutter/fml/message_loop_impl.cc:96:3\n fml::MessageLoop::Run()\n flutter/fml/message_loop.cc:49:0\n fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const\n flutter/fml/thread.cc:36:0\n decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:0\n void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:0\n#27 00000001da0daca8 libsystem_pthread.dylib _pthread_start + 320\n#28 00000001da0e3788 libsystem_pthread.dylib thread_start + 8\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test10.input.txt b/github-label-notifier/symbolizer/test/data/test10.input.txt
new file mode 100644
index 0000000..fb0a0e7
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test10.input.txt
@@ -0,0 +1,66 @@
+@flutter-symbolizer-bot symbolize this force ios arm64
+
+```
+ 0 CoreFoundation 0x000000019007e5c0 52963DBA-FA89-36C2-8262-28B9776F8C12 + 1185216
+ 1 libobjc.A.dylib 0x00000001a416c42c objc_exception_throw + 60
+ 2 CoreFoundation 0x000000018ff7aa9c 52963DBA-FA89-36C2-8262-28B9776F8C12 + 121500
+ 3 XX 0x0000000102419508 XX + 1742088
+ 4 libsystem_platform.dylib 0x00000001d7f6927c 79AAC6D7-C39F-3B6B-882F-AA494B891C56 + 21116
+ 5 Flutter 0x00000001029708c0 Flutter + 952512
+ 6 Flutter 0x00000001029708c0 Flutter + 952512
+ 7 Flutter 0x0000000102970848 Flutter + 952392
+ 8 Flutter 0x00000001029c0b68 Flutter + 1280872
+ 9 Flutter 0x0000000102914a40 Flutter + 576064
+ 10 Flutter 0x00000001028c344c Flutter + 242764
+ 11 Flutter 0x00000001028c53c0 Flutter + 250816
+ 12 CoreFoundation 0x000000018fffc050 52963DBA-FA89-36C2-8262-28B9776F8C12 + 651344
+ 13 CoreFoundation 0x000000018fffbc50 52963DBA-FA89-36C2-8262-28B9776F8C12 + 650320
+ 14 CoreFoundation 0x000000018fffb0c4 52963DBA-FA89-36C2-8262-28B9776F8C12 + 647364
+ 15 CoreFoundation 0x000000018fff5178 52963DBA-FA89-36C2-8262-28B9776F8C12 + 622968
+ 16 CoreFoundation 0x000000018fff44bc CFRunLoopRunSpecific + 600
+ 17 Flutter 0x00000001028c529c Flutter + 250524
+ 18 Flutter 0x00000001028c4c24 Flutter + 248868
+ 19 libsystem_pthread.dylib 0x00000001d7f6dca8 _pthread_start + 320
+ 20 libsystem_pthread.dylib 0x00000001d7f76788 thread_start + 8
+```
+
+```
+ 0 CoreFoundation 0x0000000192b825c0 472C9193-115D-34CD-AD1D-0E7E091C9432 + 1185216
+ 1 libobjc.A.dylib 0x00000001a6bfc42c objc_exception_throw + 60
+ 2 CoreFoundation 0x0000000192a7ea9c 472C9193-115D-34CD-AD1D-0E7E091C9432 + 121500
+ 3 XX 0x00000001044ed508 XX + 1742088
+ 4 libsystem_platform.dylib 0x00000001da0d627c DAE36DD6-F44A-39F4-9924-261898BD82CC + 21116
+ 5 libsystem_pthread.dylib 0x00000001da0dbc74 pthread_kill + 272
+ 6 libsystem_c.dylib 0x000000019bc84bb4 abort + 104
+ 7 libsystem_malloc.dylib 0x00000001a1bd24dc C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 124124
+ 8 libsystem_malloc.dylib 0x00000001a1bd2768 C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 124776
+ 9 libsystem_malloc.dylib 0x00000001a1bbde84 C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 40580
+ 10 libsystem_malloc.dylib 0x00000001a1bbaeb8 C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 28344
+ 11 libsystem_malloc.dylib 0x00000001a1bbbf30 C39547F4-E0DF-3637-85A6-FD564AAB9C45 + 32560
+ 12 Flutter 0x0000000104d577d0 Flutter + 5634000
+ 13 Flutter 0x0000000104d5859c Flutter + 5637532
+ 14 Flutter 0x0000000104d4cd64 Flutter + 5590372
+ 15 Flutter 0x0000000104d4e280 Flutter + 5595776
+ 16 Flutter 0x0000000104c6166c Flutter + 4626028
+ 17 Flutter 0x0000000104af5b9c Flutter + 3136412
+ 18 Flutter 0x000000010483344c Flutter + 242764
+ 19 Flutter 0x00000001048353c0 Flutter + 250816
+ 20 CoreFoundation 0x0000000192b00050 472C9193-115D-34CD-AD1D-0E7E091C9432 + 651344
+ 21 CoreFoundation 0x0000000192affc50 472C9193-115D-34CD-AD1D-0E7E091C9432 + 650320
+ 22 CoreFoundation 0x0000000192aff0c4 472C9193-115D-34CD-AD1D-0E7E091C9432 + 647364
+ 23 CoreFoundation 0x0000000192af9178 472C9193-115D-34CD-AD1D-0E7E091C9432 + 622968
+ 24 CoreFoundation 0x0000000192af84bc CFRunLoopRunSpecific + 600
+ 25 Flutter 0x000000010483529c Flutter + 250524
+ 26 Flutter 0x0000000104834c24 Flutter + 248868
+ 27 libsystem_pthread.dylib 0x00000001da0daca8 _pthread_start + 320
+ 28 libsystem_pthread.dylib 0x00000001da0e3788 thread_start + 8
+)
+```
+
+```
+[✓] Flutter (Channel stable, 1.22.2, on Mac OS X 10.15.7 19H2, locale ...)
+ • Flutter version 1.22.2 at ...
+ • Framework revision 84f3d28555 (7 days ago), 2020-10-15 16:26:19 -0700
+ • Engine revision b8752bbfff
+ • Dart version 2.10.2
+```
diff --git a/github-label-notifier/symbolizer/test/data/test11.expected.github.txt b/github-label-notifier/symbolizer/test/data/test11.expected.github.txt
new file mode 100644
index 0000000..df992f4
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test11.expected.github.txt
@@ -0,0 +1,279 @@
+crash from null symbolized using symbols for `c9506cb8e93e5e8879152ff5c948b175abb5b997` `ios-arm64-release`
+```
+#00 0000000185d3ad88 libsystem_kernel.dylib __pthread_kill + 8
+#01 0000000185c531e8 libsystem_pthread.dylib pthread_kill$VARIANT$mp + 136 (pthread.c:145)
+#02 0000000185ba6644 libsystem_c.dylib abort + 100 (abort.c:11)
+#03 0000000102c48240 Flutter 0x1027f8000 + 4522560
+ dart::Assert::Fail(char const*, ...)
+ third_party/dart/runtime/platform/assert.cc:44:3
+#04 0000000102cfbea0 Flutter 0x1027f8000 + 5258912
+ dart::SaveUnlinkedCall(dart::Zone*, dart::Isolate*, unsigned long, dart::UnlinkedCall const&)
+ third_party/dart/runtime/vm/runtime_entry.cc:1568:3
+ dart::DRT_HelperUnlinkedCall(dart::Isolate*, dart::Thread*, dart::Zone*, dart::NativeArguments)
+ third_party/dart/runtime/vm/runtime_entry.cc:1660:0
+ dart::DRT_UnlinkedCall(dart::NativeArguments)
+ third_party/dart/runtime/vm/runtime_entry.cc:1596:0
+#05 000000010527820c App Precompiled_Stub_CallToRuntime + 84
+#06 0000000105277b60 App Precompiled_Stub_UnlinkedCall + 44
+#07 00000001053d7ff8 App Precompiled_AnimatedWidgetBaseState_initState_4854 + 76
+#08 00000001054eff5c App Precompiled_StatefulElement__firstBuild_396042623_8467 + 80
+#09 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#10 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#11 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#12 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#13 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#14 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#15 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#16 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#17 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#18 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#19 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#20 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#21 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#22 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#23 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#24 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#25 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#26 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#27 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#28 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#29 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#30 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#31 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#32 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#33 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#34 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#35 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#36 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#37 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#38 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#39 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#40 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#41 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#42 00000001054bd014 App Precompiled_SingleChildRenderObjectElement_mount_7858 + 432
+#43 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#44 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#45 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#46 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#47 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#48 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#49 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#50 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#51 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#52 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#53 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#54 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#55 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#56 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#57 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#58 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#59 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#60 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#61 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#62 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#63 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#64 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#65 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#66 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#67 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#68 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#69 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#70 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#71 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#72 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#73 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#74 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#75 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#76 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#77 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#78 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#79 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#80 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#81 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#82 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#83 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#84 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#85 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#86 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#87 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#88 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#89 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#90 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#91 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#92 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#93 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#94 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#95 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#96 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#97 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#98 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#99 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#100 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#101 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#102 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#103 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#104 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#105 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#106 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#107 00000001054bd014 App Precompiled_SingleChildRenderObjectElement_mount_7858 + 432
+#108 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#109 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#110 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#111 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#112 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#113 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#114 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#115 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#116 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#117 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#118 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#119 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#120 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#121 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#122 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#123 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#124 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#125 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#126 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#127 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#128 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#129 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#130 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#131 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#132 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#133 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#134 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#135 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#136 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#137 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#138 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#139 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#140 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#141 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#142 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#143 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#144 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#145 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#146 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#147 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104
+#148 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#149 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#150 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+#151 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#152 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#153 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#154 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#155 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#156 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#157 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#158 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#159 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#160 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#161 00000001054be1cc App Precompiled___DefaultInheritedProviderScopeElement_InheritedElement__InheritedProviderScopeMixin_... + 72
+#162 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#163 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#164 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#165 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#166 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#167 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484
+#168 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96
+#169 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+#170 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76
+#171 00000001054bd270 App Precompiled__SingleChildStatelessElement_StatelessElement_SingleChildWidgetElementMixin_524485488... + 60
+#172 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404
+#173 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508
+#174 00000001052fc01c App Precompiled_RenderObjectToWidgetElement__rebuild_414399801_1965 + 84
+#175 00000001054bd094 App Precompiled_RenderObjectToWidgetElement_mount_7859 + 60
+#176 00000001055a840c App Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree__anonymous_closure__10738 + 84
+#177 00000001052e9614 App Precompiled_BuildOwner_buildScope_1653 + 256
+#178 0000000105300f58 App Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree_2058 + 288
+#179 00000001052fd3d0 App Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa... + 168
+#180 00000001055a8540 App Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa... + 76
+#181 000000010529294c App Precompiled_____rootRun_4048458_315 + 156
+#182 0000000105292bf0 App Precompiled_____rootRun_4048458__rootRun_4048458_316 + 504
+#183 00000001054ffae4 App Precompiled__CustomZone_4048458_run_8789 + 240
+#184 0000000105500850 App Precompiled__CustomZone_4048458_runGuarded_8808 + 52
+#185 0000000105585974 App Precompiled__CustomZone_4048458_bindCallbackGuarded__anonymous_closure__10427 + 76
+#186 0000000105292998 App Precompiled_____rootRun_4048458_315 + 232
+#187 0000000105292bf0 App Precompiled_____rootRun_4048458__rootRun_4048458_316 + 504
+#188 00000001054ffae4 App Precompiled__CustomZone_4048458_run_8789 + 240
+#189 00000001055857bc App Precompiled__CustomZone_4048458_bindCallback__anonymous_closure__10425 + 148
+#190 0000000105589ba0 App Precompiled_Timer__createTimer_4048458__anonymous_closure__10485 + 228
+#191 00000001055c3114 App Precompiled__Closure_0150898_call_11047 + 72
+#192 00000001054a0d0c App Precompiled__Timer_1026248__runTimers_1026248_7429 + 720
+#193 00000001054a0964 App Precompiled__Timer_1026248__handleMessage_1026248_7427 + 140
+#194 00000001054a0a1c App Precompiled__Timer_1026248__handleMessage_1026248__handleMessage_1026248_7428 + 112
+#195 00000001055c3114 App Precompiled__Closure_0150898_call_11047 + 72
+#196 000000010529dc08 App Precompiled__RawReceivePortImpl_1026248__handleMessage_1026248_473 + 52
+#197 0000000105277de4 App Precompiled_Stub_InvokeDartCode + 252
+#198 0000000102c891a8 Flutter 0x1027f8000 + 4788648
+ dart::DartEntry::InvokeCode(dart::Code const&, dart::Array const&, dart::Array const&, dart::Thread*)
+ third_party/dart/runtime/vm/dart_entry.cc:190:10
+ dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&, dart::Array const&, unsigned long)
+ third_party/dart/runtime/vm/dart_entry.cc:168:0
+#199 0000000102c8f6a4 Flutter 0x1027f8000 + 4814500
+ dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&)
+ third_party/dart/runtime/vm/dart_entry.cc:36:10
+ dart::DartLibraryCalls::HandleMessage(dart::Object const&, dart::Instance const&)
+ third_party/dart/runtime/vm/dart_entry.cc:688:0
+ dart::IsolateMessageHandler::HandleMessage(std::__1::unique_ptr<dart::Message, std::__1::default_delete<dart::Message> >)
+ third_party/dart/runtime/vm/isolate.cc:1093:0
+#200 0000000102c9a824 Flutter 0x1027f8000 + 4859940
+ dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool)
+ third_party/dart/runtime/vm/message_handler.cc:233:16
+#201 0000000102b1d2c4 Flutter 0x1027f8000 + 3297988
+ dart::MessageHandler::HandleNextMessage()
+ third_party/dart/runtime/vm/message_handler.cc:294:10
+ Dart_HandleMessage
+ third_party/dart/runtime/vm/dart_api_impl.cc:1959:0
+ tonic::DartMessageHandler::OnHandleMessage(tonic::DartState*)
+ flutter/third_party/tonic/dart_message_handler.cc:113:0
+ tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0::operator()() const
+ flutter/third_party/tonic/dart_message_handler.cc:42:0
+ decltype(std::__1::forward<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&>(fp)()) std::__1::__invoke<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&>(tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&)
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:4361:0
+ void std::__1::__invoke_void_return_wrapper<void>::__call<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&>(tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&)
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__functional_base:349:0
+ std::__1::__function::__alloc_func<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0, std::__1::allocator<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0>, void ()>::operator()()
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1527:0
+ std::__1::__function::__func<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0, std::__1::allocator<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0>, void ()>::operator()()
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1651:0
+#202 0000000102834ba0 Flutter 0x1027f8000 + 248736
+ std::__1::__function::__value_func<void ()>::operator()() const
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1799:16
+ std::__1::function<void ()>::operator()() const
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:2347:0
+ fml::MessageLoopImpl::FlushTasks(fml::FlushType)
+ flutter/fml/message_loop_impl.cc:127:0
+#203 0000000102836818 Flutter 0x1027f8000 + 256024
+ fml::MessageLoopImpl::RunExpiredTasksNow()
+ flutter/fml/message_loop_impl.cc:137:3
+ fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)
+ flutter/fml/platform/darwin/message_loop_darwin.mm:75:0
+#204 0000000185ec41c0 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28 (CFRunLoop.c:176)
+#205 0000000185ec3edc CoreFoundation __CFRunLoopDoTimer + 880 (CFRunLoop.c:235)
+#206 0000000185ec35b8 CoreFoundation __CFRunLoopDoTimers + 276 (CFRunLoop.c:251)
+#207 0000000185ebe5c8 CoreFoundation __CFRunLoopRun + 1640 (CFRunLoop.c:)
+#208 0000000185ebdc34 CoreFoundation CFRunLoopRunSpecific + 424 (CFRunLoop.c:319)
+#209 00000001028366f4 Flutter 0x1027f8000 + 255732
+ fml::MessageLoopDarwin::Run()
+ flutter/fml/platform/darwin/message_loop_darwin.mm:46:20
+#210 00000001028360c0 Flutter 0x1027f8000 + 254144
+ fml::MessageLoopImpl::DoRun()
+ flutter/fml/message_loop_impl.cc:96:3
+ fml::MessageLoop::Run()
+ flutter/fml/message_loop.cc:49:0
+ fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const
+ flutter/fml/thread.cc:34:0
+ decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:4361:0
+ void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:342:0
+ void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)
+ /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:352:0
+#211 0000000185c5bd98 libsystem_pthread.dylib _pthread_start + 156 (pthread.c:89)
+#212 0000000185c5f74c libsystem_pthread.dylib thread_start + 8
+
+```
+
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test11.expected.txt b/github-label-notifier/symbolizer/test/data/test11.expected.txt
new file mode 100644
index 0000000..7a2b264
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test11.expected.txt
@@ -0,0 +1,1942 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "0",
+ "binary": "libsystem_kernel.dylib",
+ "pc": 6540209544,
+ "symbol": "__pthread_kill",
+ "offset": 8,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "1",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 6539260392,
+ "symbol": "pthread_kill$VARIANT$mp",
+ "offset": 136,
+ "location": "pthread.c:145",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "2",
+ "binary": "libsystem_c.dylib",
+ "pc": 6538552900,
+ "symbol": "abort",
+ "offset": 100,
+ "location": "abort.c:11",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "3",
+ "binary": "Flutter",
+ "pc": 4341400128,
+ "symbol": "0x1027f8000",
+ "offset": 4522560,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "4",
+ "binary": "Flutter",
+ "pc": 4342136480,
+ "symbol": "0x1027f8000",
+ "offset": 5258912,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "5",
+ "binary": "App",
+ "pc": 4381442572,
+ "symbol": "Precompiled_Stub_CallToRuntime",
+ "offset": 84,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "6",
+ "binary": "App",
+ "pc": 4381440864,
+ "symbol": "Precompiled_Stub_UnlinkedCall",
+ "offset": 44,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "7",
+ "binary": "App",
+ "pc": 4382883832,
+ "symbol": "Precompiled_AnimatedWidgetBaseState_initState_4854",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "8",
+ "binary": "App",
+ "pc": 4384030556,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 80,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "9",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "10",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "11",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "12",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "13",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "14",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "15",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "16",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "17",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "18",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "19",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "20",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "21",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "22",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "23",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "24",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "25",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "26",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "27",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "28",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "29",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "30",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "31",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "32",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "33",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "34",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "35",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "36",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "37",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "38",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "39",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "40",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "41",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "42",
+ "binary": "App",
+ "pc": 4383821844,
+ "symbol": "Precompiled_SingleChildRenderObjectElement_mount_7858",
+ "offset": 432,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "43",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "44",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "45",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "46",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "47",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "48",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "49",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "50",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "51",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "52",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "53",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "54",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "55",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "56",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "57",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "58",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "59",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "60",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "61",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "62",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "63",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "64",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "65",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "66",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "67",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "68",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "69",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "70",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "71",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "72",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "73",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "74",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "75",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "76",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "77",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "78",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "79",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "80",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "81",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "82",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "83",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "84",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "85",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "86",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "87",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "88",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "89",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "90",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "91",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "92",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "93",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "94",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "95",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "96",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "97",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "98",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "99",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "100",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "101",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "102",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "103",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "104",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "105",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "106",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "107",
+ "binary": "App",
+ "pc": 4383821844,
+ "symbol": "Precompiled_SingleChildRenderObjectElement_mount_7858",
+ "offset": 432,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "108",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "109",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "110",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "111",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "112",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "113",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "114",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "115",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "116",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "117",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "118",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "119",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "120",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "121",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "122",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "123",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "124",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "125",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "126",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "127",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "128",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "129",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "130",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "131",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "132",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "133",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "134",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "135",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "136",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "137",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "138",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "139",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "140",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "141",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "142",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "143",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "144",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "145",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "146",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "147",
+ "binary": "App",
+ "pc": 4383826280,
+ "symbol": "Precompiled_StatefulElement_performRebuild_7870",
+ "offset": 104,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "148",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "149",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "150",
+ "binary": "App",
+ "pc": 4384030632,
+ "symbol": "Precompiled_StatefulElement__firstBuild_396042623_8467",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "151",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "152",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "153",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "154",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "155",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "156",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "157",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "158",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "159",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "160",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "161",
+ "binary": "App",
+ "pc": 4383826380,
+ "symbol": "Precompiled___DefaultInheritedProviderScopeElement_InheritedElement__InheritedProviderScopeMixin_...",
+ "offset": 72,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "162",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "163",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "164",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "165",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "166",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "167",
+ "binary": "App",
+ "pc": 4383826940,
+ "symbol": "Precompiled_ComponentElement_performRebuild_7873",
+ "offset": 484,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "168",
+ "binary": "App",
+ "pc": 4381898824,
+ "symbol": "Precompiled_Element_rebuild_1634",
+ "offset": 96,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "169",
+ "binary": "App",
+ "pc": 4384030916,
+ "symbol": "Precompiled_ComponentElement__firstBuild_396042623_8469",
+ "offset": 32,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "170",
+ "binary": "App",
+ "pc": 4383822580,
+ "symbol": "Precompiled_ComponentElement_mount_7863",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "171",
+ "binary": "App",
+ "pc": 4383822448,
+ "symbol": "Precompiled__SingleChildStatelessElement_StatelessElement_SingleChildWidgetElementMixin_524485488...",
+ "offset": 60,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "172",
+ "binary": "App",
+ "pc": 4381789848,
+ "symbol": "Precompiled_Element_inflateWidget_1296",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "173",
+ "binary": "App",
+ "pc": 4383838224,
+ "symbol": "Precompiled_Element_updateChild_7906",
+ "offset": 508,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "174",
+ "binary": "App",
+ "pc": 4381982748,
+ "symbol": "Precompiled_RenderObjectToWidgetElement__rebuild_414399801_1965",
+ "offset": 84,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "175",
+ "binary": "App",
+ "pc": 4383821972,
+ "symbol": "Precompiled_RenderObjectToWidgetElement_mount_7859",
+ "offset": 60,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "176",
+ "binary": "App",
+ "pc": 4384785420,
+ "symbol": "Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree__anonymous_closure__10738",
+ "offset": 84,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "177",
+ "binary": "App",
+ "pc": 4381906452,
+ "symbol": "Precompiled_BuildOwner_buildScope_1653",
+ "offset": 256,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "178",
+ "binary": "App",
+ "pc": 4382003032,
+ "symbol": "Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree_2058",
+ "offset": 288,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "179",
+ "binary": "App",
+ "pc": 4381987792,
+ "symbol": "Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa...",
+ "offset": 168,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "180",
+ "binary": "App",
+ "pc": 4384785728,
+ "symbol": "Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa...",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "181",
+ "binary": "App",
+ "pc": 4381550924,
+ "symbol": "Precompiled_____rootRun_4048458_315",
+ "offset": 156,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "182",
+ "binary": "App",
+ "pc": 4381551600,
+ "symbol": "Precompiled_____rootRun_4048458__rootRun_4048458_316",
+ "offset": 504,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "183",
+ "binary": "App",
+ "pc": 4384094948,
+ "symbol": "Precompiled__CustomZone_4048458_run_8789",
+ "offset": 240,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "184",
+ "binary": "App",
+ "pc": 4384098384,
+ "symbol": "Precompiled__CustomZone_4048458_runGuarded_8808",
+ "offset": 52,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "185",
+ "binary": "App",
+ "pc": 4384643444,
+ "symbol": "Precompiled__CustomZone_4048458_bindCallbackGuarded__anonymous_closure__10427",
+ "offset": 76,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "186",
+ "binary": "App",
+ "pc": 4381551000,
+ "symbol": "Precompiled_____rootRun_4048458_315",
+ "offset": 232,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "187",
+ "binary": "App",
+ "pc": 4381551600,
+ "symbol": "Precompiled_____rootRun_4048458__rootRun_4048458_316",
+ "offset": 504,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "188",
+ "binary": "App",
+ "pc": 4384094948,
+ "symbol": "Precompiled__CustomZone_4048458_run_8789",
+ "offset": 240,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "189",
+ "binary": "App",
+ "pc": 4384643004,
+ "symbol": "Precompiled__CustomZone_4048458_bindCallback__anonymous_closure__10425",
+ "offset": 148,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "190",
+ "binary": "App",
+ "pc": 4384660384,
+ "symbol": "Precompiled_Timer__createTimer_4048458__anonymous_closure__10485",
+ "offset": 228,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "191",
+ "binary": "App",
+ "pc": 4384895252,
+ "symbol": "Precompiled__Closure_0150898_call_11047",
+ "offset": 72,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "192",
+ "binary": "App",
+ "pc": 4383706380,
+ "symbol": "Precompiled__Timer_1026248__runTimers_1026248_7429",
+ "offset": 720,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "193",
+ "binary": "App",
+ "pc": 4383705444,
+ "symbol": "Precompiled__Timer_1026248__handleMessage_1026248_7427",
+ "offset": 140,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "194",
+ "binary": "App",
+ "pc": 4383705628,
+ "symbol": "Precompiled__Timer_1026248__handleMessage_1026248__handleMessage_1026248_7428",
+ "offset": 112,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "195",
+ "binary": "App",
+ "pc": 4384895252,
+ "symbol": "Precompiled__Closure_0150898_call_11047",
+ "offset": 72,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "196",
+ "binary": "App",
+ "pc": 4381596680,
+ "symbol": "Precompiled__RawReceivePortImpl_1026248__handleMessage_1026248_473",
+ "offset": 52,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "197",
+ "binary": "App",
+ "pc": 4381441508,
+ "symbol": "Precompiled_Stub_InvokeDartCode",
+ "offset": 252,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "198",
+ "binary": "Flutter",
+ "pc": 4341666216,
+ "symbol": "0x1027f8000",
+ "offset": 4788648,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "199",
+ "binary": "Flutter",
+ "pc": 4341692068,
+ "symbol": "0x1027f8000",
+ "offset": 4814500,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "200",
+ "binary": "Flutter",
+ "pc": 4341737508,
+ "symbol": "0x1027f8000",
+ "offset": 4859940,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "201",
+ "binary": "Flutter",
+ "pc": 4340175556,
+ "symbol": "0x1027f8000",
+ "offset": 3297988,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "202",
+ "binary": "Flutter",
+ "pc": 4337126304,
+ "symbol": "0x1027f8000",
+ "offset": 248736,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "203",
+ "binary": "Flutter",
+ "pc": 4337133592,
+ "symbol": "0x1027f8000",
+ "offset": 256024,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "204",
+ "binary": "CoreFoundation",
+ "pc": 6541820352,
+ "symbol": "__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__",
+ "offset": 28,
+ "location": "CFRunLoop.c:176",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "205",
+ "binary": "CoreFoundation",
+ "pc": 6541819612,
+ "symbol": "__CFRunLoopDoTimer",
+ "offset": 880,
+ "location": "CFRunLoop.c:235",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "206",
+ "binary": "CoreFoundation",
+ "pc": 6541817272,
+ "symbol": "__CFRunLoopDoTimers",
+ "offset": 276,
+ "location": "CFRunLoop.c:251",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "207",
+ "binary": "CoreFoundation",
+ "pc": 6541796808,
+ "symbol": "__CFRunLoopRun",
+ "offset": 1640,
+ "location": "CFRunLoop.c:",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "208",
+ "binary": "CoreFoundation",
+ "pc": 6541794356,
+ "symbol": "CFRunLoopRunSpecific",
+ "offset": 424,
+ "location": "CFRunLoop.c:319",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "209",
+ "binary": "Flutter",
+ "pc": 4337133300,
+ "symbol": "0x1027f8000",
+ "offset": 255732,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "210",
+ "binary": "Flutter",
+ "pc": 4337131712,
+ "symbol": "0x1027f8000",
+ "offset": 254144,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "211",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 6539296152,
+ "symbol": "_pthread_start",
+ "offset": 156,
+ "location": "pthread.c:89",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "212",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 6539310924,
+ "symbol": "thread_start",
+ "offset": 8,
+ "location": "",
+ "runtimeType": "ios"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "c9506cb8e93e5e8879152ff5c948b175abb5b997",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 0000000185d3ad88 libsystem_kernel.dylib __pthread_kill + 8\n#01 0000000185c531e8 libsystem_pthread.dylib pthread_kill$VARIANT$mp + 136 (pthread.c:145)\n#02 0000000185ba6644 libsystem_c.dylib abort + 100 (abort.c:11)\n#03 0000000102c48240 Flutter 0x1027f8000 + 4522560\n dart::Assert::Fail(char const*, ...)\n third_party/dart/runtime/platform/assert.cc:44:3\n#04 0000000102cfbea0 Flutter 0x1027f8000 + 5258912\n dart::SaveUnlinkedCall(dart::Zone*, dart::Isolate*, unsigned long, dart::UnlinkedCall const&)\n third_party/dart/runtime/vm/runtime_entry.cc:1568:3\n dart::DRT_HelperUnlinkedCall(dart::Isolate*, dart::Thread*, dart::Zone*, dart::NativeArguments)\n third_party/dart/runtime/vm/runtime_entry.cc:1660:0\n dart::DRT_UnlinkedCall(dart::NativeArguments)\n third_party/dart/runtime/vm/runtime_entry.cc:1596:0\n#05 000000010527820c App Precompiled_Stub_CallToRuntime + 84\n#06 0000000105277b60 App Precompiled_Stub_UnlinkedCall + 44\n#07 00000001053d7ff8 App Precompiled_AnimatedWidgetBaseState_initState_4854 + 76\n#08 00000001054eff5c App Precompiled_StatefulElement__firstBuild_396042623_8467 + 80\n#09 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#10 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#11 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#12 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#13 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#14 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#15 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#16 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#17 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#18 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#19 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#20 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#21 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#22 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#23 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#24 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#25 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#26 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#27 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#28 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#29 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#30 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#31 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#32 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#33 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#34 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#35 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#36 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#37 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#38 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#39 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#40 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#41 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#42 00000001054bd014 App Precompiled_SingleChildRenderObjectElement_mount_7858 + 432\n#43 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#44 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#45 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#46 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#47 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#48 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#49 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#50 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#51 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#52 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#53 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#54 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#55 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#56 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#57 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#58 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#59 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#60 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#61 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#62 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#63 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#64 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#65 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#66 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#67 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#68 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#69 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#70 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#71 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#72 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#73 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#74 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#75 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#76 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#77 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#78 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#79 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#80 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#81 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#82 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#83 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#84 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#85 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#86 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#87 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#88 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#89 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#90 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#91 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#92 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#93 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#94 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#95 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#96 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#97 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#98 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#99 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#100 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#101 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#102 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#103 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#104 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#105 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#106 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#107 00000001054bd014 App Precompiled_SingleChildRenderObjectElement_mount_7858 + 432\n#108 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#109 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#110 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#111 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#112 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#113 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#114 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#115 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#116 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#117 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#118 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#119 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#120 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#121 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#122 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#123 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#124 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#125 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#126 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#127 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#128 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#129 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#130 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#131 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#132 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#133 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#134 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#135 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#136 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#137 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#138 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#139 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#140 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#141 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#142 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#143 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#144 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#145 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#146 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#147 00000001054be168 App Precompiled_StatefulElement_performRebuild_7870 + 104\n#148 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#149 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#150 00000001054effa8 App Precompiled_StatefulElement__firstBuild_396042623_8467 + 156\n#151 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#152 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#153 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#154 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#155 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#156 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#157 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#158 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#159 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#160 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#161 00000001054be1cc App Precompiled___DefaultInheritedProviderScopeElement_InheritedElement__InheritedProviderScopeMixin_... + 72\n#162 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#163 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#164 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#165 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#166 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#167 00000001054be3fc App Precompiled_ComponentElement_performRebuild_7873 + 484\n#168 00000001052e7848 App Precompiled_Element_rebuild_1634 + 96\n#169 00000001054f00c4 App Precompiled_ComponentElement__firstBuild_396042623_8469 + 32\n#170 00000001054bd2f4 App Precompiled_ComponentElement_mount_7863 + 76\n#171 00000001054bd270 App Precompiled__SingleChildStatelessElement_StatelessElement_SingleChildWidgetElementMixin_524485488... + 60\n#172 00000001052cce98 App Precompiled_Element_inflateWidget_1296 + 404\n#173 00000001054c1010 App Precompiled_Element_updateChild_7906 + 508\n#174 00000001052fc01c App Precompiled_RenderObjectToWidgetElement__rebuild_414399801_1965 + 84\n#175 00000001054bd094 App Precompiled_RenderObjectToWidgetElement_mount_7859 + 60\n#176 00000001055a840c App Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree__anonymous_closure__10738 + 84\n#177 00000001052e9614 App Precompiled_BuildOwner_buildScope_1653 + 256\n#178 0000000105300f58 App Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree_2058 + 288\n#179 00000001052fd3d0 App Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa... + 168\n#180 00000001055a8540 App Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa... + 76\n#181 000000010529294c App Precompiled_____rootRun_4048458_315 + 156\n#182 0000000105292bf0 App Precompiled_____rootRun_4048458__rootRun_4048458_316 + 504\n#183 00000001054ffae4 App Precompiled__CustomZone_4048458_run_8789 + 240\n#184 0000000105500850 App Precompiled__CustomZone_4048458_runGuarded_8808 + 52\n#185 0000000105585974 App Precompiled__CustomZone_4048458_bindCallbackGuarded__anonymous_closure__10427 + 76\n#186 0000000105292998 App Precompiled_____rootRun_4048458_315 + 232\n#187 0000000105292bf0 App Precompiled_____rootRun_4048458__rootRun_4048458_316 + 504\n#188 00000001054ffae4 App Precompiled__CustomZone_4048458_run_8789 + 240\n#189 00000001055857bc App Precompiled__CustomZone_4048458_bindCallback__anonymous_closure__10425 + 148\n#190 0000000105589ba0 App Precompiled_Timer__createTimer_4048458__anonymous_closure__10485 + 228\n#191 00000001055c3114 App Precompiled__Closure_0150898_call_11047 + 72\n#192 00000001054a0d0c App Precompiled__Timer_1026248__runTimers_1026248_7429 + 720\n#193 00000001054a0964 App Precompiled__Timer_1026248__handleMessage_1026248_7427 + 140\n#194 00000001054a0a1c App Precompiled__Timer_1026248__handleMessage_1026248__handleMessage_1026248_7428 + 112\n#195 00000001055c3114 App Precompiled__Closure_0150898_call_11047 + 72\n#196 000000010529dc08 App Precompiled__RawReceivePortImpl_1026248__handleMessage_1026248_473 + 52\n#197 0000000105277de4 App Precompiled_Stub_InvokeDartCode + 252\n#198 0000000102c891a8 Flutter 0x1027f8000 + 4788648\n dart::DartEntry::InvokeCode(dart::Code const&, dart::Array const&, dart::Array const&, dart::Thread*)\n third_party/dart/runtime/vm/dart_entry.cc:190:10\n dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&, dart::Array const&, unsigned long)\n third_party/dart/runtime/vm/dart_entry.cc:168:0\n#199 0000000102c8f6a4 Flutter 0x1027f8000 + 4814500\n dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&)\n third_party/dart/runtime/vm/dart_entry.cc:36:10\n dart::DartLibraryCalls::HandleMessage(dart::Object const&, dart::Instance const&)\n third_party/dart/runtime/vm/dart_entry.cc:688:0\n dart::IsolateMessageHandler::HandleMessage(std::__1::unique_ptr<dart::Message, std::__1::default_delete<dart::Message> >)\n third_party/dart/runtime/vm/isolate.cc:1093:0\n#200 0000000102c9a824 Flutter 0x1027f8000 + 4859940\n dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool)\n third_party/dart/runtime/vm/message_handler.cc:233:16\n#201 0000000102b1d2c4 Flutter 0x1027f8000 + 3297988\n dart::MessageHandler::HandleNextMessage()\n third_party/dart/runtime/vm/message_handler.cc:294:10\n Dart_HandleMessage\n third_party/dart/runtime/vm/dart_api_impl.cc:1959:0\n tonic::DartMessageHandler::OnHandleMessage(tonic::DartState*)\n flutter/third_party/tonic/dart_message_handler.cc:113:0\n tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0::operator()() const\n flutter/third_party/tonic/dart_message_handler.cc:42:0\n decltype(std::__1::forward<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&>(fp)()) std::__1::__invoke<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&>(tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&)\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:4361:0\n void std::__1::__invoke_void_return_wrapper<void>::__call<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&>(tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0&)\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__functional_base:349:0\n std::__1::__function::__alloc_func<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0, std::__1::allocator<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0>, void ()>::operator()()\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1527:0\n std::__1::__function::__func<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0, std::__1::allocator<tonic::DartMessageHandler::OnMessage(tonic::DartState*)::$_0>, void ()>::operator()()\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1651:0\n#202 0000000102834ba0 Flutter 0x1027f8000 + 248736\n std::__1::__function::__value_func<void ()>::operator()() const\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1799:16\n std::__1::function<void ()>::operator()() const\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:2347:0\n fml::MessageLoopImpl::FlushTasks(fml::FlushType)\n flutter/fml/message_loop_impl.cc:127:0\n#203 0000000102836818 Flutter 0x1027f8000 + 256024\n fml::MessageLoopImpl::RunExpiredTasksNow()\n flutter/fml/message_loop_impl.cc:137:3\n fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)\n flutter/fml/platform/darwin/message_loop_darwin.mm:75:0\n#204 0000000185ec41c0 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28 (CFRunLoop.c:176)\n#205 0000000185ec3edc CoreFoundation __CFRunLoopDoTimer + 880 (CFRunLoop.c:235)\n#206 0000000185ec35b8 CoreFoundation __CFRunLoopDoTimers + 276 (CFRunLoop.c:251)\n#207 0000000185ebe5c8 CoreFoundation __CFRunLoopRun + 1640 (CFRunLoop.c:)\n#208 0000000185ebdc34 CoreFoundation CFRunLoopRunSpecific + 424 (CFRunLoop.c:319)\n#209 00000001028366f4 Flutter 0x1027f8000 + 255732\n fml::MessageLoopDarwin::Run()\n flutter/fml/platform/darwin/message_loop_darwin.mm:46:20\n#210 00000001028360c0 Flutter 0x1027f8000 + 254144\n fml::MessageLoopImpl::DoRun()\n flutter/fml/message_loop_impl.cc:96:3\n fml::MessageLoop::Run()\n flutter/fml/message_loop.cc:49:0\n fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const\n flutter/fml/thread.cc:34:0\n decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:4361:0\n void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:342:0\n void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)\n /b/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:352:0\n#211 0000000185c5bd98 libsystem_pthread.dylib _pthread_start + 156 (pthread.c:89)\n#212 0000000185c5f74c libsystem_pthread.dylib thread_start + 8\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test11.input.txt b/github-label-notifier/symbolizer/test/data/test11.input.txt
new file mode 100644
index 0000000..426c0b0
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test11.input.txt
@@ -0,0 +1,234 @@
+```
+Incident Identifier: AEF1125A-C235-4216-89F7-E3131F9EFB84
+Code Type: ARM-64 (Native)
+
+Thread 7:
+0 libsystem_pthread.dylib 0x0000000185c5f738 start_wqthread + 0
+
+Thread 8 name:
+Thread 8 Crashed:
+0 libsystem_kernel.dylib 0x0000000185d3ad88 __pthread_kill + 8
+1 libsystem_pthread.dylib 0x0000000185c531e8 pthread_kill$VARIANT$mp + 136 (pthread.c:1458)
+2 libsystem_c.dylib 0x0000000185ba6644 abort + 100 (abort.c:110)
+3 Flutter 0x0000000102c48240 0x1027f8000 + 4522560
+4 Flutter 0x0000000102cfbea0 0x1027f8000 + 5258912
+5 App 0x000000010527820c Precompiled_Stub_CallToRuntime + 84
+6 App 0x0000000105277b60 Precompiled_Stub_UnlinkedCall + 44
+7 App 0x00000001053d7ff8 Precompiled_AnimatedWidgetBaseState_initState_4854 + 76
+8 App 0x00000001054eff5c Precompiled_StatefulElement__firstBuild_396042623_8467 + 80
+9 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+10 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+11 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+12 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+13 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+14 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+15 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+16 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+17 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+18 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+19 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+20 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+21 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+22 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+23 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+24 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+25 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+26 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+27 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+28 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+29 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+30 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+31 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+32 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+33 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+34 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+35 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+36 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+37 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+38 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+39 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+40 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+41 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+42 App 0x00000001054bd014 Precompiled_SingleChildRenderObjectElement_mount_7858 + 432
+43 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+44 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+45 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+46 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+47 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+48 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+49 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+50 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+51 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+52 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+53 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+54 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+55 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+56 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+57 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+58 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+59 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+60 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+61 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+62 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+63 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+64 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+65 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+66 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+67 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+68 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+69 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+70 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+71 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+72 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+73 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+74 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+75 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+76 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+77 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+78 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+79 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+80 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+81 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+82 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+83 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+84 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+85 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+86 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+87 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+88 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+89 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+90 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+91 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+92 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+93 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+94 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+95 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+96 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+97 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+98 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+99 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+100 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+101 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+102 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+103 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+104 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+105 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+106 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+107 App 0x00000001054bd014 Precompiled_SingleChildRenderObjectElement_mount_7858 + 432
+108 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+109 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+110 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+111 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+112 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+113 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+114 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+115 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+116 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+117 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+118 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+119 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+120 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+121 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+122 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+123 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+124 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+125 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+126 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+127 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+128 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+129 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+130 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+131 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+132 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+133 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+134 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+135 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+136 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+137 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+138 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+139 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+140 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+141 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+142 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+143 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+144 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+145 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+146 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+147 App 0x00000001054be168 Precompiled_StatefulElement_performRebuild_7870 + 104
+148 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+149 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+150 App 0x00000001054effa8 Precompiled_StatefulElement__firstBuild_396042623_8467 + 156
+151 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+152 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+153 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+154 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+155 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+156 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+157 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+158 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+159 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+160 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+161 App 0x00000001054be1cc Precompiled___DefaultInheritedProviderScopeElement_InheritedElement__InheritedProviderScopeMixin_... + 72
+162 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+163 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+164 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+165 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+166 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+167 App 0x00000001054be3fc Precompiled_ComponentElement_performRebuild_7873 + 484
+168 App 0x00000001052e7848 Precompiled_Element_rebuild_1634 + 96
+169 App 0x00000001054f00c4 Precompiled_ComponentElement__firstBuild_396042623_8469 + 32
+170 App 0x00000001054bd2f4 Precompiled_ComponentElement_mount_7863 + 76
+171 App 0x00000001054bd270 Precompiled__SingleChildStatelessElement_StatelessElement_SingleChildWidgetElementMixin_524485488... + 60
+172 App 0x00000001052cce98 Precompiled_Element_inflateWidget_1296 + 404
+173 App 0x00000001054c1010 Precompiled_Element_updateChild_7906 + 508
+174 App 0x00000001052fc01c Precompiled_RenderObjectToWidgetElement__rebuild_414399801_1965 + 84
+175 App 0x00000001054bd094 Precompiled_RenderObjectToWidgetElement_mount_7859 + 60
+176 App 0x00000001055a840c Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree__anonymous_closure__10738 + 84
+177 App 0x00000001052e9614 Precompiled_BuildOwner_buildScope_1653 + 256
+178 App 0x0000000105300f58 Precompiled_RenderObjectToWidgetAdapter_attachToRenderTree_2058 + 288
+179 App 0x00000001052fd3d0 Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa... + 168
+180 App 0x00000001055a8540 Precompiled__WidgetsFlutterBinding_BindingBase_GestureBinding_ServicesBinding_SchedulerBinding_Pa... + 76
+181 App 0x000000010529294c Precompiled_____rootRun_4048458_315 + 156
+182 App 0x0000000105292bf0 Precompiled_____rootRun_4048458__rootRun_4048458_316 + 504
+183 App 0x00000001054ffae4 Precompiled__CustomZone_4048458_run_8789 + 240
+184 App 0x0000000105500850 Precompiled__CustomZone_4048458_runGuarded_8808 + 52
+185 App 0x0000000105585974 Precompiled__CustomZone_4048458_bindCallbackGuarded__anonymous_closure__10427 + 76
+186 App 0x0000000105292998 Precompiled_____rootRun_4048458_315 + 232
+187 App 0x0000000105292bf0 Precompiled_____rootRun_4048458__rootRun_4048458_316 + 504
+188 App 0x00000001054ffae4 Precompiled__CustomZone_4048458_run_8789 + 240
+189 App 0x00000001055857bc Precompiled__CustomZone_4048458_bindCallback__anonymous_closure__10425 + 148
+190 App 0x0000000105589ba0 Precompiled_Timer__createTimer_4048458__anonymous_closure__10485 + 228
+191 App 0x00000001055c3114 Precompiled__Closure_0150898_call_11047 + 72
+192 App 0x00000001054a0d0c Precompiled__Timer_1026248__runTimers_1026248_7429 + 720
+193 App 0x00000001054a0964 Precompiled__Timer_1026248__handleMessage_1026248_7427 + 140
+194 App 0x00000001054a0a1c Precompiled__Timer_1026248__handleMessage_1026248__handleMessage_1026248_7428 + 112
+195 App 0x00000001055c3114 Precompiled__Closure_0150898_call_11047 + 72
+196 App 0x000000010529dc08 Precompiled__RawReceivePortImpl_1026248__handleMessage_1026248_473 + 52
+197 App 0x0000000105277de4 Precompiled_Stub_InvokeDartCode + 252
+198 Flutter 0x0000000102c891a8 0x1027f8000 + 4788648
+199 Flutter 0x0000000102c8f6a4 0x1027f8000 + 4814500
+200 Flutter 0x0000000102c9a824 0x1027f8000 + 4859940
+201 Flutter 0x0000000102b1d2c4 0x1027f8000 + 3297988
+202 Flutter 0x0000000102834ba0 0x1027f8000 + 248736
+203 Flutter 0x0000000102836818 0x1027f8000 + 256024
+204 CoreFoundation 0x0000000185ec41c0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28 (CFRunLoop.c:1766)
+205 CoreFoundation 0x0000000185ec3edc __CFRunLoopDoTimer + 880 (CFRunLoop.c:2357)
+206 CoreFoundation 0x0000000185ec35b8 __CFRunLoopDoTimers + 276 (CFRunLoop.c:2512)
+207 CoreFoundation 0x0000000185ebe5c8 __CFRunLoopRun + 1640 (CFRunLoop.c:0)
+208 CoreFoundation 0x0000000185ebdc34 CFRunLoopRunSpecific + 424 (CFRunLoop.c:3192)
+209 Flutter 0x00000001028366f4 0x1027f8000 + 255732
+210 Flutter 0x00000001028360c0 0x1027f8000 + 254144
+211 libsystem_pthread.dylib 0x0000000185c5bd98 _pthread_start + 156 (pthread.c:896)
+212 libsystem_pthread.dylib 0x0000000185c5f74c thread_start + 8
+
+Binary Images:
+0x105270000 - 0x10584bfff App arm64 <f9e361ff2c6930499d85ae47d9dbfd3b> /var/containers/Bundle/Application/E5512921-87CB-437A-8E27-5C3037AEED7C/Runner.app/Frameworks/App.framework/App
+```
+
+```
+[✓] Flutter (Channel beta, v1.17.0, on ..., locale en-US)
+ • Flutter version 1.17.0 at ...
+ • Framework revision d3ed9ec945 (10 days ago), 2020-04-06 14:07:34 -0700
+ • Engine revision c9506cb8e9
+ • Dart version 2.8.0 (build 2.8.0-dev.18.0 eea9717938)
+```
diff --git a/github-label-notifier/symbolizer/test/data/test12.expected.github.txt b/github-label-notifier/symbolizer/test/data/test12.expected.github.txt
new file mode 100644
index 0000000..71a9c73
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test12.expected.github.txt
@@ -0,0 +1,118 @@
+crash from null symbolized using symbols for `b8752bbfff0419c8bf616b602bc59fd28f6a3d1b` `ios-arm64-release`
+```
+#00 00000001cb298b8c IOGPU -[IOGPUMetalCommandBuffer commandBufferResourceInfo] + 12
+#01 00000001d812f4e0 AGXMetalA9 (Missing)
+#02 00000001d80ae408 AGXMetalA9 (Missing)
+#03 00000001d80baff0 AGXMetalA9 (Missing)
+#04 0000000106013134 Flutter Flutter + 2781492
+ GrMtlCommandBuffer::getBlitCommandEncoder()
+ third_party/skia/src/gpu/mtl/GrMtlCommandBuffer.mm:45:37
+#05 00000001060161e4 Flutter Flutter + 2793956
+ GrMtlGpu::uploadToTexture(GrMtlTexture*, int, int, int, int, GrColorType, GrMipLevel const*, int)
+ third_party/skia/src/gpu/mtl/GrMtlGpu.mm:364:71
+ GrMtlGpu::onWritePixels(GrSurface*, int, int, int, int, GrColorType, GrColorType, GrMipLevel const*, int, bool)
+ third_party/skia/src/gpu/mtl/GrMtlGpu.mm:1205:0
+#06 0000000105f27e84 Flutter Flutter + 1818244
+ GrGpu::writePixels(GrSurface*, int, int, int, int, GrColorType, GrColorType, GrMipLevel const*, int, bool)
+ third_party/skia/src/gpu/GrGpu.cpp:465:15
+#07 0000000105f27ae4 Flutter Flutter + 1817316
+ GrGpu::createTexture(SkISize, GrBackendFormat const&, GrRenderable, int, SkBudgeted, GrProtected, GrColorType, GrColorType, GrMipLevel const*, int)
+ third_party/skia/src/gpu/GrGpu.cpp:205:24
+#08 0000000105f45a64 Flutter Flutter + 1940068
+ GrResourceProvider::createTexture(SkISize, GrBackendFormat const&, GrColorType, GrRenderable, int, SkBudgeted, GrProtected, GrMipLevel const*, int)
+ third_party/skia/src/gpu/GrResourceProvider.cpp:86:18
+#09 0000000105f336f4 Flutter Flutter + 1865460
+ GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1::operator()(GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&) const
+ third_party/skia/src/gpu/GrProxyProvider.cpp:376:61
+ decltype(std::__1::forward<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&>(fp)(std::__1::forward<GrResourceProvider*>(fp0), std::__1::forward<GrSurfaceProxy::LazySurfaceDesc const&>(fp0))) std::__1::__invoke<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&>(GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ GrSurfaceProxy::LazyCallbackResult std::__1::__invoke_void_return_wrapper<GrSurfaceProxy::LazyCallbackResult>::__call<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&>(GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:318:0
+ std::__1::__function::__alloc_func<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1, std::__1::allocator<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1>, GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0
+ std::__1::__function::__func<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1, std::__1::allocator<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1>, GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0
+#10 0000000105f510d4 Flutter Flutter + 1986772
+ std::__1::__function::__value_func<GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&) const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16
+ std::__1::function<GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&) const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0
+ GrSurfaceProxyPriv::doLazyInstantiation(GrResourceProvider*)
+ third_party/skia/src/gpu/GrSurfaceProxy.cpp:375:0
+#11 0000000105f332d0 Flutter Flutter + 1864400
+ GrProxyProvider::createProxyFromBitmap(SkBitmap const&, GrMipmapped, SkBackingFit, SkBudgeted)
+ third_party/skia/src/gpu/GrProxyProvider.cpp:305:28
+#12 0000000105f104d4 Flutter Flutter + 1721556
+ GrBitmapTextureMaker::refOriginalTextureProxyView(GrMipmapped)
+ third_party/skia/src/gpu/GrBitmapTextureMaker.cpp:90:36
+#13 0000000105fc8ac4 Flutter Flutter + 2476740
+ SkImage::MakeCrossContextFromPixmap(GrDirectContext*, SkPixmap const&, bool, bool)
+ third_party/skia/src/image/SkImage_Gpu.cpp:637:29
+#14 000000010610f670 Flutter Flutter + 3815024
+ flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3::operator()() const
+ flutter/lib/ui/painting/image_decoder.cc:199:44
+ decltype(std::__1::forward<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&>(fp)()) std::__1::__invoke<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&>(flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&>(flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0
+ std::__1::__function::__alloc_func<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3, std::__1::allocator<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3>, void ()>::operator()()
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0
+ std::__1::__function::__func<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3, std::__1::allocator<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3>, void ()>::operator()()
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0
+#15 0000000105da8768 Flutter Flutter + 247656
+ fml::SyncSwitch::Execute(fml::SyncSwitch::Handlers const&)
+ flutter/fml/synchronization/sync_switch.cc:0:0
+#16 000000010610ef50 Flutter Flutter + 3813200
+ flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)
+ flutter/lib/ui/painting/image_decoder.cc:184:45
+ flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()::operator()()
+ flutter/lib/ui/painting/image_decoder.cc:295:0
+ auto fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>::operator()<>() const
+ flutter/fml/make_copyable.h:24:0
+ decltype(std::__1::forward<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&>(fp)()) std::__1::__invoke<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&>(fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ void std::__1::__invoke_void_return_wrapper<void>::__call<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&>(fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0
+ std::__1::__function::__alloc_func<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>, std::__1::allocator<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()> >, void ()>::operator()()
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0
+ std::__1::__function::__func<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>, std::__1::allocator<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()> >, void ()>::operator()()
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0
+#17 0000000105da744c Flutter Flutter + 242764
+ std::__1::__function::__value_func<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16
+ std::__1::function<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0
+ fml::MessageLoopImpl::FlushTasks(fml::FlushType)
+ flutter/fml/message_loop_impl.cc:130:0
+#18 0000000105da93c0 Flutter Flutter + 250816
+ fml::MessageLoopImpl::RunExpiredTasksNow()
+ flutter/fml/message_loop_impl.cc:143:3
+ fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)
+ flutter/fml/platform/darwin/message_loop_darwin.mm:75:0
+#19 00000001922a4a30 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28
+#20 00000001922a4634 CoreFoundation __CFRunLoopDoTimer + 1004
+#21 00000001922a3b14 CoreFoundation __CFRunLoopDoTimers + 324
+#22 000000019229deb0 CoreFoundation __CFRunLoopRun + 1912
+#23 000000019229d200 CoreFoundation CFRunLoopRunSpecific + 572
+#24 0000000105da929c Flutter Flutter + 250524
+ fml::MessageLoopDarwin::Run()
+ flutter/fml/platform/darwin/message_loop_darwin.mm:46:20
+#25 0000000105da8c24 Flutter Flutter + 248868
+ fml::MessageLoopImpl::DoRun()
+ flutter/fml/message_loop_impl.cc:96:3
+ fml::MessageLoop::Run()
+ flutter/fml/message_loop.cc:49:0
+ fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const
+ flutter/fml/thread.cc:36:0
+ decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:0
+ void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:0
+#26 00000001d7bcab70 libsystem_pthread.dylib _pthread_start + 288
+#27 00000001d7bcf880 libsystem_pthread.dylib thread_start + 8
+
+```
+_(Load address missing from the report, detected heuristically: 0000000105d6c000)_
+<!-- {"symbolized":[1001]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test12.expected.txt b/github-label-notifier/symbolizer/test/data/test12.expected.txt
new file mode 100644
index 0000000..e3f7975
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test12.expected.txt
@@ -0,0 +1,282 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "0",
+ "binary": "IOGPU",
+ "pc": 7703464844,
+ "symbol": "-[IOGPUMetalCommandBuffer commandBufferResourceInfo]",
+ "offset": 12,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "1",
+ "binary": "AGXMetalA9",
+ "pc": 7920088288,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "2",
+ "binary": "AGXMetalA9",
+ "pc": 7919559688,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "3",
+ "binary": "AGXMetalA9",
+ "pc": 7919611888,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "4",
+ "binary": "Flutter",
+ "pc": 4395708724,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "5",
+ "binary": "Flutter",
+ "pc": 4395721188,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "6",
+ "binary": "Flutter",
+ "pc": 4394745476,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "7",
+ "binary": "Flutter",
+ "pc": 4394744548,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "8",
+ "binary": "Flutter",
+ "pc": 4394867300,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "9",
+ "binary": "Flutter",
+ "pc": 4394792692,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "10",
+ "binary": "Flutter",
+ "pc": 4394914004,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "11",
+ "binary": "Flutter",
+ "pc": 4394791632,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "12",
+ "binary": "Flutter",
+ "pc": 4394648788,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "13",
+ "binary": "Flutter",
+ "pc": 4395403972,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "14",
+ "binary": "Flutter",
+ "pc": 4396742256,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "15",
+ "binary": "Flutter",
+ "pc": 4393174888,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "16",
+ "binary": "Flutter",
+ "pc": 4396740432,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "17",
+ "binary": "Flutter",
+ "pc": 4393169996,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "18",
+ "binary": "Flutter",
+ "pc": 4393178048,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "19",
+ "binary": "CoreFoundation",
+ "pc": 6747212336,
+ "symbol": "__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__",
+ "offset": 28,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "20",
+ "binary": "CoreFoundation",
+ "pc": 6747211316,
+ "symbol": "__CFRunLoopDoTimer",
+ "offset": 1004,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "21",
+ "binary": "CoreFoundation",
+ "pc": 6747208468,
+ "symbol": "__CFRunLoopDoTimers",
+ "offset": 324,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "22",
+ "binary": "CoreFoundation",
+ "pc": 6747184816,
+ "symbol": "__CFRunLoopRun",
+ "offset": 1912,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "23",
+ "binary": "CoreFoundation",
+ "pc": 6747181568,
+ "symbol": "CFRunLoopRunSpecific",
+ "offset": 572,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "24",
+ "binary": "Flutter",
+ "pc": 4393177756,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "25",
+ "binary": "Flutter",
+ "pc": 4393176100,
+ "symbol": "(Missing)",
+ "offset": null,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "26",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 7914433392,
+ "symbol": "_pthread_start",
+ "offset": 288,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "27",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 7914453120,
+ "symbol": "thread_start",
+ "offset": 8,
+ "location": "",
+ "runtimeType": "ios"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "b8752bbfff0419c8bf616b602bc59fd28f6a3d1b",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 00000001cb298b8c IOGPU -[IOGPUMetalCommandBuffer commandBufferResourceInfo] + 12\n#01 00000001d812f4e0 AGXMetalA9 (Missing)\n#02 00000001d80ae408 AGXMetalA9 (Missing)\n#03 00000001d80baff0 AGXMetalA9 (Missing)\n#04 0000000106013134 Flutter Flutter + 2781492\n GrMtlCommandBuffer::getBlitCommandEncoder()\n third_party/skia/src/gpu/mtl/GrMtlCommandBuffer.mm:45:37\n#05 00000001060161e4 Flutter Flutter + 2793956\n GrMtlGpu::uploadToTexture(GrMtlTexture*, int, int, int, int, GrColorType, GrMipLevel const*, int)\n third_party/skia/src/gpu/mtl/GrMtlGpu.mm:364:71\n GrMtlGpu::onWritePixels(GrSurface*, int, int, int, int, GrColorType, GrColorType, GrMipLevel const*, int, bool)\n third_party/skia/src/gpu/mtl/GrMtlGpu.mm:1205:0\n#06 0000000105f27e84 Flutter Flutter + 1818244\n GrGpu::writePixels(GrSurface*, int, int, int, int, GrColorType, GrColorType, GrMipLevel const*, int, bool)\n third_party/skia/src/gpu/GrGpu.cpp:465:15\n#07 0000000105f27ae4 Flutter Flutter + 1817316\n GrGpu::createTexture(SkISize, GrBackendFormat const&, GrRenderable, int, SkBudgeted, GrProtected, GrColorType, GrColorType, GrMipLevel const*, int)\n third_party/skia/src/gpu/GrGpu.cpp:205:24\n#08 0000000105f45a64 Flutter Flutter + 1940068\n GrResourceProvider::createTexture(SkISize, GrBackendFormat const&, GrColorType, GrRenderable, int, SkBudgeted, GrProtected, GrMipLevel const*, int)\n third_party/skia/src/gpu/GrResourceProvider.cpp:86:18\n#09 0000000105f336f4 Flutter Flutter + 1865460\n GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1::operator()(GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&) const\n third_party/skia/src/gpu/GrProxyProvider.cpp:376:61\n decltype(std::__1::forward<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&>(fp)(std::__1::forward<GrResourceProvider*>(fp0), std::__1::forward<GrSurfaceProxy::LazySurfaceDesc const&>(fp0))) std::__1::__invoke<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&>(GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n GrSurfaceProxy::LazyCallbackResult std::__1::__invoke_void_return_wrapper<GrSurfaceProxy::LazyCallbackResult>::__call<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&>(GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1&, GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:318:0\n std::__1::__function::__alloc_func<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1, std::__1::allocator<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1>, GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1, std::__1::allocator<GrProxyProvider::createMippedProxyFromBitmap(SkBitmap const&, SkBudgeted)::$_1>, GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#10 0000000105f510d4 Flutter Flutter + 1986772\n std::__1::__function::__value_func<GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n GrSurfaceProxyPriv::doLazyInstantiation(GrResourceProvider*)\n third_party/skia/src/gpu/GrSurfaceProxy.cpp:375:0\n#11 0000000105f332d0 Flutter Flutter + 1864400\n GrProxyProvider::createProxyFromBitmap(SkBitmap const&, GrMipmapped, SkBackingFit, SkBudgeted)\n third_party/skia/src/gpu/GrProxyProvider.cpp:305:28\n#12 0000000105f104d4 Flutter Flutter + 1721556\n GrBitmapTextureMaker::refOriginalTextureProxyView(GrMipmapped)\n third_party/skia/src/gpu/GrBitmapTextureMaker.cpp:90:36\n#13 0000000105fc8ac4 Flutter Flutter + 2476740\n SkImage::MakeCrossContextFromPixmap(GrDirectContext*, SkPixmap const&, bool, bool)\n third_party/skia/src/image/SkImage_Gpu.cpp:637:29\n#14 000000010610f670 Flutter Flutter + 3815024\n flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3::operator()() const\n flutter/lib/ui/painting/image_decoder.cc:199:44\n decltype(std::__1::forward<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&>(fp)()) std::__1::__invoke<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&>(flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&>(flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0\n std::__1::__function::__alloc_func<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3, std::__1::allocator<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3>, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3, std::__1::allocator<flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)::$_3>, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#15 0000000105da8768 Flutter Flutter + 247656\n fml::SyncSwitch::Execute(fml::SyncSwitch::Handlers const&)\n flutter/fml/synchronization/sync_switch.cc:0:0\n#16 000000010610ef50 Flutter Flutter + 3813200\n flutter::UploadRasterImage(sk_sp<SkImage>, fml::WeakPtr<flutter::IOManager>, fml::tracing::TraceFlow const&)\n flutter/lib/ui/painting/image_decoder.cc:184:45\n flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()::operator()()\n flutter/lib/ui/painting/image_decoder.cc:295:0\n auto fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>::operator()<>() const\n flutter/fml/make_copyable.h:24:0\n decltype(std::__1::forward<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&>(fp)()) std::__1::__invoke<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&>(fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__invoke_void_return_wrapper<void>::__call<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&>(fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0\n std::__1::__function::__alloc_func<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>, std::__1::allocator<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()> >, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()>, std::__1::allocator<fml::internal::CopyableLambda<flutter::ImageDecoder::Decode(fml::RefPtr<flutter::ImageDescriptor>, unsigned int, unsigned int, std::__1::function<void (flutter::SkiaGPUObject<SkImage>)> const&)::$_1::operator()()::'lambda'()> >, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#17 0000000105da744c Flutter Flutter + 242764\n std::__1::__function::__value_func<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n fml::MessageLoopImpl::FlushTasks(fml::FlushType)\n flutter/fml/message_loop_impl.cc:130:0\n#18 0000000105da93c0 Flutter Flutter + 250816\n fml::MessageLoopImpl::RunExpiredTasksNow()\n flutter/fml/message_loop_impl.cc:143:3\n fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)\n flutter/fml/platform/darwin/message_loop_darwin.mm:75:0\n#19 00000001922a4a30 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28\n#20 00000001922a4634 CoreFoundation __CFRunLoopDoTimer + 1004\n#21 00000001922a3b14 CoreFoundation __CFRunLoopDoTimers + 324\n#22 000000019229deb0 CoreFoundation __CFRunLoopRun + 1912\n#23 000000019229d200 CoreFoundation CFRunLoopRunSpecific + 572\n#24 0000000105da929c Flutter Flutter + 250524\n fml::MessageLoopDarwin::Run()\n flutter/fml/platform/darwin/message_loop_darwin.mm:46:20\n#25 0000000105da8c24 Flutter Flutter + 248868\n fml::MessageLoopImpl::DoRun()\n flutter/fml/message_loop_impl.cc:96:3\n fml::MessageLoop::Run()\n flutter/fml/message_loop.cc:49:0\n fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const\n flutter/fml/thread.cc:36:0\n decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:0\n void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:0\n#26 00000001d7bcab70 libsystem_pthread.dylib _pthread_start + 288\n#27 00000001d7bcf880 libsystem_pthread.dylib thread_start + 8\n",
+ "notes": [
+ {
+ "kind": "loadBaseDetected",
+ "message": "0000000105d6c000"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test12.input.txt b/github-label-notifier/symbolizer/test/data/test12.input.txt
new file mode 100644
index 0000000..c6e5836
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test12.input.txt
@@ -0,0 +1,31 @@
+@flutter-symbolizer-bot this force ios flutter#v1.22.2 arm64
+
+Crashed: io.flutter.1.io
+0 IOGPU 0x1cb298b8c -[IOGPUMetalCommandBuffer commandBufferResourceInfo] + 12
+1 AGXMetalA9 0x1d812f4e0 (Missing)
+2 AGXMetalA9 0x1d80ae408 (Missing)
+3 AGXMetalA9 0x1d80baff0 (Missing)
+4 Flutter 0x106013134 (Missing)
+5 Flutter 0x1060161e4 (Missing)
+6 Flutter 0x105f27e84 (Missing)
+7 Flutter 0x105f27ae4 (Missing)
+8 Flutter 0x105f45a64 (Missing)
+9 Flutter 0x105f336f4 (Missing)
+10 Flutter 0x105f510d4 (Missing)
+11 Flutter 0x105f332d0 (Missing)
+12 Flutter 0x105f104d4 (Missing)
+13 Flutter 0x105fc8ac4 (Missing)
+14 Flutter 0x10610f670 (Missing)
+15 Flutter 0x105da8768 (Missing)
+16 Flutter 0x10610ef50 (Missing)
+17 Flutter 0x105da744c (Missing)
+18 Flutter 0x105da93c0 (Missing)
+19 CoreFoundation 0x1922a4a30 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28
+20 CoreFoundation 0x1922a4634 __CFRunLoopDoTimer + 1004
+21 CoreFoundation 0x1922a3b14 __CFRunLoopDoTimers + 324
+22 CoreFoundation 0x19229deb0 __CFRunLoopRun + 1912
+23 CoreFoundation 0x19229d200 CFRunLoopRunSpecific + 572
+24 Flutter 0x105da929c (Missing)
+25 Flutter 0x105da8c24 (Missing)
+26 libsystem_pthread.dylib 0x1d7bcab70 _pthread_start + 288
+27 libsystem_pthread.dylib 0x1d7bcf880 thread_start + 8
diff --git a/github-label-notifier/symbolizer/test/data/test13.expected.github.txt b/github-label-notifier/symbolizer/test/data/test13.expected.github.txt
new file mode 100644
index 0000000..99beb3c
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test13.expected.github.txt
@@ -0,0 +1,138 @@
+crash from null symbolized using symbols for `2eac514f26a676d1df0821e815d501149d3ead7f` `ios-arm64-release`
+```
+#00 0000000182e17a74 Metal Metal + 68212
+#01 00000001a0963190 AGXMetalA8 AGXMetalA8 + 520592
+#02 00000001a095c3f4 AGXMetalA8 AGXMetalA8 + 492532
+#03 00000001a093ea58 AGXMetalA8 AGXMetalA8 + 371288
+#04 0000000105340708 Flutter Flutter + 2836232
+ GrMtlCommandBuffer::getRenderCommandEncoder(MTLRenderPassDescriptor*, GrMtlPipelineState const*, GrMtlOpsRenderPass*)
+ third_party/skia/src/gpu/mtl/GrMtlCommandBuffer.mm:89:35
+#05 0000000105347e48 Flutter Flutter + 2866760
+ GrMtlOpsRenderPass::precreateCmdEncoder()
+ third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:37:36
+#06 0000000105348458 Flutter Flutter + 2868312
+ GrMtlOpsRenderPass::setupRenderPass(GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)
+ third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:238:15
+ GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu*, GrRenderTarget*, GrSurfaceOrigin, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)
+ third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:27:0
+ GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu*, GrRenderTarget*, GrSurfaceOrigin, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)
+ third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:26:0
+#07 0000000105340fa4 Flutter Flutter + 2838436
+ GrMtlGpu::getOpsRenderPass(GrRenderTarget*, GrStencilAttachment*, GrSurfaceOrigin, SkIRect const&, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&, SkTArray<GrSurfaceProxy*, true> const&, GrXferBarrierFlags)
+ third_party/skia/src/gpu/mtl/GrMtlGpu.mm:192:16
+#08 000000010525944c Flutter Flutter + 1889356
+ create_render_pass(GrGpu*, GrRenderTarget*, GrStencilAttachment*, GrSurfaceOrigin, SkIRect const&, GrLoadOp, SkRGBA4f<(SkAlphaType)2> const&, GrLoadOp, GrStoreOp, SkTArray<GrSurfaceProxy*, true> const&, GrXferBarrierFlags)
+ third_party/skia/src/gpu/GrOpsTask.cpp:509:17
+ GrOpsTask::onExecute(GrOpFlushState*)
+ third_party/skia/src/gpu/GrOpsTask.cpp:593:0
+#09 000000010524cad8 Flutter Flutter + 1837784
+ GrRenderTask::execute(GrOpFlushState*)
+ third_party/skia/src/gpu/GrRenderTask.h:38:61
+ GrDrawingManager::executeRenderTasks(int, int, GrOpFlushState*, int*)
+ third_party/skia/src/gpu/GrDrawingManager.cpp:456:0
+ GrDrawingManager::flush(GrSurfaceProxy**, int, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)
+ third_party/skia/src/gpu/GrDrawingManager.cpp:335:0
+#10 000000010524cdf8 Flutter Flutter + 1838584
+ GrDrawingManager::flushSurfaces(GrSurfaceProxy**, int, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)
+ third_party/skia/src/gpu/GrDrawingManager.cpp:562:27
+#11 00000001052787c8 Flutter Flutter + 2017224
+ GrDrawingManager::flushSurface(GrSurfaceProxy*, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)
+ third_party/skia/src/gpu/GrDrawingManager.h:109:22
+ GrSurfaceContext::flush(SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)
+ third_party/skia/src/gpu/GrSurfaceContext.cpp:1232:0
+#12 00000001052ef5a4 Flutter Flutter + 2504100
+ SkGpuDevice::flush(SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)
+ third_party/skia/src/gpu/SkGpuDevice.cpp:1054:34
+ SkGpuDevice::flush()
+ third_party/skia/src/gpu/SkGpuDevice.cpp:1045:0
+#13 000000010550b5cc Flutter Flutter + 4715980
+ SkCanvas::flush()
+ third_party/skia/src/core/SkCanvas.cpp:614:11
+ flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0::operator()(flutter::SurfaceFrame const&, SkCanvas*) const
+ flutter/shell/gpu/gpu_surface_metal.mm:89:0
+ decltype(std::__1::forward<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&>(fp)(std::__1::forward<flutter::SurfaceFrame const&>(fp0), std::__1::forward<SkCanvas*>(fp0))) std::__1::__invoke<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*>(flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ bool std::__1::__invoke_void_return_wrapper<bool>::__call<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*>(flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:318:0
+ std::__1::__function::__alloc_func<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0, std::__1::allocator<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0>, bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0
+ std::__1::__function::__func<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0, std::__1::allocator<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0>, bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0
+#14 000000010511b60c Flutter Flutter + 587276
+ std::__1::__function::__value_func<bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&) const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16
+ std::__1::function<bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*) const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0
+ flutter::SurfaceFrame::PerformSubmit()
+ flutter/flow/surface_frame.cc:65:0
+ flutter::SurfaceFrame::Submit()
+ flutter/flow/surface_frame.cc:43:0
+#15 00000001050a5268 Flutter Flutter + 103016
+ flutter::FlutterPlatformViewsController::GetLayer(GrDirectContext*, std::__1::shared_ptr<flutter::IOSContext>, sk_sp<SkPicture>, SkRect, long long, long long)
+ flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm:634:41
+ flutter::FlutterPlatformViewsController::SubmitFrame(GrDirectContext*, std::__1::shared_ptr<flutter::IOSContext>, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)
+ flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm:533:0
+#16 00000001050bee8c Flutter Flutter + 208524
+ flutter::IOSSurface::SubmitFrame(GrDirectContext*, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)
+ flutter/shell/platform/darwin/ios/ios_surface.mm:121:31
+#17 000000010539e840 Flutter Flutter + 3221568
+ flutter::Rasterizer::DrawToSurface(flutter::LayerTree&)
+ flutter/shell/common/rasterizer.cc:474:31
+#18 000000010539f400 Flutter Flutter + 3224576
+ flutter::Rasterizer::DoDraw(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)
+ flutter/shell/common/rasterizer.cc:339:32
+ flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const
+ flutter/shell/common/rasterizer.cc:173:0
+ decltype(std::__1::forward<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&>(fp)(std::__1::forward<std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(fp0))) std::__1::__invoke<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0
+ std::__1::__function::__alloc_func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0
+ std::__1::__function::__func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0
+#19 000000010539eb10 Flutter Flutter + 3222288
+ std::__1::__function::__value_func<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&) const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16
+ std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0
+ flutter::Pipeline<flutter::LayerTree>::Consume(std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)> const&)
+ flutter/shell/common/pipeline.h:161:0
+ flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)
+ flutter/shell/common/rasterizer.cc:177:0
+#20 00000001053a5208 Flutter Flutter + 3248648
+ flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31::operator()() const
+ flutter/shell/common/shell.cc:1046:23
+ decltype(std::__1::forward<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(fp)()) std::__1::__invoke<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0
+ void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&)
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0
+ std::__1::__function::__alloc_func<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31, std::__1::allocator<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31>, void ()>::operator()()
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0
+ std::__1::__function::__func<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31, std::__1::allocator<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31>, void ()>::operator()()
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0
+#21 00000001050c9c7c Flutter Flutter + 253052
+ std::__1::__function::__value_func<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16
+ std::__1::function<void ()>::operator()() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0
+ fml::MessageLoopImpl::FlushTasks(fml::FlushType)
+ flutter/fml/message_loop_impl.cc:130:0
+#22 00000001050cbbf0 Flutter Flutter + 261104
+ fml::MessageLoopImpl::RunExpiredTasksNow()
+ flutter/fml/message_loop_impl.cc:143:3
+ fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)
+ flutter/fml/platform/darwin/message_loop_darwin.mm:75:0
+#23 00000001810e3dbc CoreFoundation CoreFoundation + 966076
+#24 00000001810e3ae0 CoreFoundation CoreFoundation + 965344
+#25 00000001810e32e0 CoreFoundation CoreFoundation + 963296
+#26 00000001810e0ec8 CoreFoundation CoreFoundation + 954056
+#27 0000000181000c54 CoreFoundation CoreFoundation + 35924
+#28 0000000182eacf80 GraphicsServices GraphicsServices + 44928
+#29 000000018a7595c0 UIKit UIKit + 472512
+#30 00000001003cb6b4 ios_prod_global main -main.m:35
+#31 0000000180b20568 libdyld.dylib libdyld.dylib + 5480
+
+```
+_(Load address missing from the report, detected heuristically: 000000010508c000)_
+<!-- {"symbolized":[1001]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test13.expected.txt b/github-label-notifier/symbolizer/test/data/test13.expected.txt
new file mode 100644
index 0000000..8e98a60
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test13.expected.txt
@@ -0,0 +1,318 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 6490782324,
+ "binary": "Metal",
+ "offset": 68212,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "01",
+ "pc": 6989164944,
+ "binary": "AGXMetalA8",
+ "offset": 520592,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "02",
+ "pc": 6989136884,
+ "binary": "AGXMetalA8",
+ "offset": 492532,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "03",
+ "pc": 6989015640,
+ "binary": "AGXMetalA8",
+ "offset": 371288,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "04",
+ "pc": 4382263048,
+ "binary": "Flutter",
+ "offset": 2836232,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "05",
+ "pc": 4382293576,
+ "binary": "Flutter",
+ "offset": 2866760,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "06",
+ "pc": 4382295128,
+ "binary": "Flutter",
+ "offset": 2868312,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "07",
+ "pc": 4382265252,
+ "binary": "Flutter",
+ "offset": 2838436,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "08",
+ "pc": 4381316172,
+ "binary": "Flutter",
+ "offset": 1889356,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "09",
+ "pc": 4381264600,
+ "binary": "Flutter",
+ "offset": 1837784,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "10",
+ "pc": 4381265400,
+ "binary": "Flutter",
+ "offset": 1838584,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "11",
+ "pc": 4381444040,
+ "binary": "Flutter",
+ "offset": 2017224,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "12",
+ "pc": 4381930916,
+ "binary": "Flutter",
+ "offset": 2504100,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "13",
+ "pc": 4384142796,
+ "binary": "Flutter",
+ "offset": 4715980,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "14",
+ "pc": 4380014092,
+ "binary": "Flutter",
+ "offset": 587276,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "15",
+ "pc": 4379529832,
+ "binary": "Flutter",
+ "offset": 103016,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "16",
+ "pc": 4379635340,
+ "binary": "Flutter",
+ "offset": 208524,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "17",
+ "pc": 4382648384,
+ "binary": "Flutter",
+ "offset": 3221568,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "18",
+ "pc": 4382651392,
+ "binary": "Flutter",
+ "offset": 3224576,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "19",
+ "pc": 4382649104,
+ "binary": "Flutter",
+ "offset": 3222288,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "20",
+ "pc": 4382675464,
+ "binary": "Flutter",
+ "offset": 3248648,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "21",
+ "pc": 4379679868,
+ "binary": "Flutter",
+ "offset": 253052,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "22",
+ "pc": 4379687920,
+ "binary": "Flutter",
+ "offset": 261104,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "23",
+ "pc": 6460161468,
+ "binary": "CoreFoundation",
+ "offset": 966076,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "24",
+ "pc": 6460160736,
+ "binary": "CoreFoundation",
+ "offset": 965344,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "25",
+ "pc": 6460158688,
+ "binary": "CoreFoundation",
+ "offset": 963296,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "26",
+ "pc": 6460149448,
+ "binary": "CoreFoundation",
+ "offset": 954056,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "27",
+ "pc": 6459231316,
+ "binary": "CoreFoundation",
+ "offset": 35924,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "28",
+ "pc": 6491393920,
+ "binary": "GraphicsServices",
+ "offset": 44928,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "29",
+ "pc": 6617929152,
+ "binary": "UIKit",
+ "offset": 472512,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "30",
+ "pc": 4298946228,
+ "binary": "ios_prod_global",
+ "offset": null,
+ "location": "-main.m:35",
+ "symbol": "main",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "31",
+ "pc": 6454117736,
+ "binary": "libdyld.dylib",
+ "offset": 5480,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ }
+ ],
+ "format": "custom",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "2eac514f26a676d1df0821e815d501149d3ead7f",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 0000000182e17a74 Metal Metal + 68212\n#01 00000001a0963190 AGXMetalA8 AGXMetalA8 + 520592\n#02 00000001a095c3f4 AGXMetalA8 AGXMetalA8 + 492532\n#03 00000001a093ea58 AGXMetalA8 AGXMetalA8 + 371288\n#04 0000000105340708 Flutter Flutter + 2836232\n GrMtlCommandBuffer::getRenderCommandEncoder(MTLRenderPassDescriptor*, GrMtlPipelineState const*, GrMtlOpsRenderPass*)\n third_party/skia/src/gpu/mtl/GrMtlCommandBuffer.mm:89:35\n#05 0000000105347e48 Flutter Flutter + 2866760\n GrMtlOpsRenderPass::precreateCmdEncoder()\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:37:36\n#06 0000000105348458 Flutter Flutter + 2868312\n GrMtlOpsRenderPass::setupRenderPass(GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:238:15\n GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu*, GrRenderTarget*, GrSurfaceOrigin, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:27:0\n GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu*, GrRenderTarget*, GrSurfaceOrigin, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:26:0\n#07 0000000105340fa4 Flutter Flutter + 2838436\n GrMtlGpu::getOpsRenderPass(GrRenderTarget*, GrStencilAttachment*, GrSurfaceOrigin, SkIRect const&, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&, SkTArray<GrSurfaceProxy*, true> const&, GrXferBarrierFlags)\n third_party/skia/src/gpu/mtl/GrMtlGpu.mm:192:16\n#08 000000010525944c Flutter Flutter + 1889356\n create_render_pass(GrGpu*, GrRenderTarget*, GrStencilAttachment*, GrSurfaceOrigin, SkIRect const&, GrLoadOp, SkRGBA4f<(SkAlphaType)2> const&, GrLoadOp, GrStoreOp, SkTArray<GrSurfaceProxy*, true> const&, GrXferBarrierFlags)\n third_party/skia/src/gpu/GrOpsTask.cpp:509:17\n GrOpsTask::onExecute(GrOpFlushState*)\n third_party/skia/src/gpu/GrOpsTask.cpp:593:0\n#09 000000010524cad8 Flutter Flutter + 1837784\n GrRenderTask::execute(GrOpFlushState*)\n third_party/skia/src/gpu/GrRenderTask.h:38:61\n GrDrawingManager::executeRenderTasks(int, int, GrOpFlushState*, int*)\n third_party/skia/src/gpu/GrDrawingManager.cpp:456:0\n GrDrawingManager::flush(GrSurfaceProxy**, int, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrDrawingManager.cpp:335:0\n#10 000000010524cdf8 Flutter Flutter + 1838584\n GrDrawingManager::flushSurfaces(GrSurfaceProxy**, int, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrDrawingManager.cpp:562:27\n#11 00000001052787c8 Flutter Flutter + 2017224\n GrDrawingManager::flushSurface(GrSurfaceProxy*, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrDrawingManager.h:109:22\n GrSurfaceContext::flush(SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrSurfaceContext.cpp:1232:0\n#12 00000001052ef5a4 Flutter Flutter + 2504100\n SkGpuDevice::flush(SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/SkGpuDevice.cpp:1054:34\n SkGpuDevice::flush()\n third_party/skia/src/gpu/SkGpuDevice.cpp:1045:0\n#13 000000010550b5cc Flutter Flutter + 4715980\n SkCanvas::flush()\n third_party/skia/src/core/SkCanvas.cpp:614:11\n flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0::operator()(flutter::SurfaceFrame const&, SkCanvas*) const\n flutter/shell/gpu/gpu_surface_metal.mm:89:0\n decltype(std::__1::forward<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&>(fp)(std::__1::forward<flutter::SurfaceFrame const&>(fp0), std::__1::forward<SkCanvas*>(fp0))) std::__1::__invoke<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*>(flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n bool std::__1::__invoke_void_return_wrapper<bool>::__call<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*>(flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:318:0\n std::__1::__function::__alloc_func<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0, std::__1::allocator<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0>, bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0, std::__1::allocator<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0>, bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#14 000000010511b60c Flutter Flutter + 587276\n std::__1::__function::__value_func<bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n flutter::SurfaceFrame::PerformSubmit()\n flutter/flow/surface_frame.cc:65:0\n flutter::SurfaceFrame::Submit()\n flutter/flow/surface_frame.cc:43:0\n#15 00000001050a5268 Flutter Flutter + 103016\n flutter::FlutterPlatformViewsController::GetLayer(GrDirectContext*, std::__1::shared_ptr<flutter::IOSContext>, sk_sp<SkPicture>, SkRect, long long, long long)\n flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm:634:41\n flutter::FlutterPlatformViewsController::SubmitFrame(GrDirectContext*, std::__1::shared_ptr<flutter::IOSContext>, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)\n flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm:533:0\n#16 00000001050bee8c Flutter Flutter + 208524\n flutter::IOSSurface::SubmitFrame(GrDirectContext*, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)\n flutter/shell/platform/darwin/ios/ios_surface.mm:121:31\n#17 000000010539e840 Flutter Flutter + 3221568\n flutter::Rasterizer::DrawToSurface(flutter::LayerTree&)\n flutter/shell/common/rasterizer.cc:474:31\n#18 000000010539f400 Flutter Flutter + 3224576\n flutter::Rasterizer::DoDraw(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)\n flutter/shell/common/rasterizer.cc:339:32\n flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const\n flutter/shell/common/rasterizer.cc:173:0\n decltype(std::__1::forward<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&>(fp)(std::__1::forward<std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(fp0))) std::__1::__invoke<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0\n std::__1::__function::__alloc_func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#19 000000010539eb10 Flutter Flutter + 3222288\n std::__1::__function::__value_func<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n flutter::Pipeline<flutter::LayerTree>::Consume(std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)> const&)\n flutter/shell/common/pipeline.h:161:0\n flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)\n flutter/shell/common/rasterizer.cc:177:0\n#20 00000001053a5208 Flutter Flutter + 3248648\n flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31::operator()() const\n flutter/shell/common/shell.cc:1046:23\n decltype(std::__1::forward<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(fp)()) std::__1::__invoke<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0\n std::__1::__function::__alloc_func<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31, std::__1::allocator<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31>, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31, std::__1::allocator<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31>, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#21 00000001050c9c7c Flutter Flutter + 253052\n std::__1::__function::__value_func<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n fml::MessageLoopImpl::FlushTasks(fml::FlushType)\n flutter/fml/message_loop_impl.cc:130:0\n#22 00000001050cbbf0 Flutter Flutter + 261104\n fml::MessageLoopImpl::RunExpiredTasksNow()\n flutter/fml/message_loop_impl.cc:143:3\n fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)\n flutter/fml/platform/darwin/message_loop_darwin.mm:75:0\n#23 00000001810e3dbc CoreFoundation CoreFoundation + 966076\n#24 00000001810e3ae0 CoreFoundation CoreFoundation + 965344\n#25 00000001810e32e0 CoreFoundation CoreFoundation + 963296\n#26 00000001810e0ec8 CoreFoundation CoreFoundation + 954056\n#27 0000000181000c54 CoreFoundation CoreFoundation + 35924\n#28 0000000182eacf80 GraphicsServices GraphicsServices + 44928\n#29 000000018a7595c0 UIKit UIKit + 472512\n#30 00000001003cb6b4 ios_prod_global main -main.m:35\n#31 0000000180b20568 libdyld.dylib libdyld.dylib + 5480\n",
+ "notes": [
+ {
+ "kind": "loadBaseDetected",
+ "message": "000000010508c000"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test13.input.txt b/github-label-notifier/symbolizer/test/data/test13.input.txt
new file mode 100644
index 0000000..ecf2275
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test13.input.txt
@@ -0,0 +1,35 @@
+@flutter-symbolizer-bot engine#2eac514f26a676d1df0821e815d501149d3ead7f release arm64 internal ios this
+
+Thread 0 (id: 0x00000303) CRASHED [EXC_BAD_ACCESS / KERN_INVALID_ADDRESS @ 0x000002e0 ]Show exception record
+0x0000000182e17a74(Metal + 0x00010a74)
+0x00000001a0963190(AGXMetalA8 + 0x0007f190)
+0x00000001a095c3f4(AGXMetalA8 + 0x000783f4)
+0x00000001a093ea58(AGXMetalA8 + 0x0005aa58)
+0x0000000105340708(Flutter + 0x002b4708)
+0x0000000105347e48(Flutter + 0x002bbe48)
+0x0000000105348458(Flutter + 0x002bc458)
+0x0000000105340fa4(Flutter + 0x002b4fa4)
+0x000000010525944c(Flutter + 0x001cd44c)
+0x000000010524cad8(Flutter + 0x001c0ad8)
+0x000000010524cdf8(Flutter + 0x001c0df8)
+0x00000001052787c8(Flutter + 0x001ec7c8)
+0x00000001052ef5a4(Flutter + 0x002635a4)
+0x000000010550b5cc(Flutter + 0x0047f5cc)
+0x000000010511b60c(Flutter + 0x0008f60c)
+0x00000001050a5268(Flutter + 0x00019268)
+0x00000001050bee8c(Flutter + 0x00032e8c)
+0x000000010539e840(Flutter + 0x00312840)
+0x000000010539f400(Flutter + 0x00313400)
+0x000000010539eb10(Flutter + 0x00312b10)
+0x00000001053a5208(Flutter + 0x00319208)
+0x00000001050c9c7c(Flutter + 0x0003dc7c)
+0x00000001050cbbf0(Flutter + 0x0003fbf0)
+0x00000001810e3dbc(CoreFoundation + 0x000ebdbc)
+0x00000001810e3ae0(CoreFoundation + 0x000ebae0)
+0x00000001810e32e0(CoreFoundation + 0x000eb2e0)
+0x00000001810e0ec8(CoreFoundation + 0x000e8ec8)
+0x0000000181000c54(CoreFoundation + 0x00008c54)
+0x0000000182eacf80(GraphicsServices + 0x0000af80)
+0x000000018a7595c0(UIKit + 0x000735c0)
+0x00000001003cb6b4(ios_prod_global -main.m:35)main
+0x0000000180b20568(libdyld.dylib + 0x00001568)
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test14.expected.github.txt b/github-label-notifier/symbolizer/test/data/test14.expected.github.txt
new file mode 100644
index 0000000..b976127
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test14.expected.github.txt
@@ -0,0 +1,3 @@
+@somebody Sorry, only **public members of Flutter org** can trigger my services.
+
+Check your privacy settings as described [here](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/publicizing-or-hiding-organization-membership).
diff --git a/github-label-notifier/symbolizer/test/data/test14.expected.txt b/github-label-notifier/symbolizer/test/data/test14.expected.txt
new file mode 100644
index 0000000..8e98a60
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test14.expected.txt
@@ -0,0 +1,318 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 6490782324,
+ "binary": "Metal",
+ "offset": 68212,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "01",
+ "pc": 6989164944,
+ "binary": "AGXMetalA8",
+ "offset": 520592,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "02",
+ "pc": 6989136884,
+ "binary": "AGXMetalA8",
+ "offset": 492532,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "03",
+ "pc": 6989015640,
+ "binary": "AGXMetalA8",
+ "offset": 371288,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "04",
+ "pc": 4382263048,
+ "binary": "Flutter",
+ "offset": 2836232,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "05",
+ "pc": 4382293576,
+ "binary": "Flutter",
+ "offset": 2866760,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "06",
+ "pc": 4382295128,
+ "binary": "Flutter",
+ "offset": 2868312,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "07",
+ "pc": 4382265252,
+ "binary": "Flutter",
+ "offset": 2838436,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "08",
+ "pc": 4381316172,
+ "binary": "Flutter",
+ "offset": 1889356,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "09",
+ "pc": 4381264600,
+ "binary": "Flutter",
+ "offset": 1837784,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "10",
+ "pc": 4381265400,
+ "binary": "Flutter",
+ "offset": 1838584,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "11",
+ "pc": 4381444040,
+ "binary": "Flutter",
+ "offset": 2017224,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "12",
+ "pc": 4381930916,
+ "binary": "Flutter",
+ "offset": 2504100,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "13",
+ "pc": 4384142796,
+ "binary": "Flutter",
+ "offset": 4715980,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "14",
+ "pc": 4380014092,
+ "binary": "Flutter",
+ "offset": 587276,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "15",
+ "pc": 4379529832,
+ "binary": "Flutter",
+ "offset": 103016,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "16",
+ "pc": 4379635340,
+ "binary": "Flutter",
+ "offset": 208524,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "17",
+ "pc": 4382648384,
+ "binary": "Flutter",
+ "offset": 3221568,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "18",
+ "pc": 4382651392,
+ "binary": "Flutter",
+ "offset": 3224576,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "19",
+ "pc": 4382649104,
+ "binary": "Flutter",
+ "offset": 3222288,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "20",
+ "pc": 4382675464,
+ "binary": "Flutter",
+ "offset": 3248648,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "21",
+ "pc": 4379679868,
+ "binary": "Flutter",
+ "offset": 253052,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "22",
+ "pc": 4379687920,
+ "binary": "Flutter",
+ "offset": 261104,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "23",
+ "pc": 6460161468,
+ "binary": "CoreFoundation",
+ "offset": 966076,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "24",
+ "pc": 6460160736,
+ "binary": "CoreFoundation",
+ "offset": 965344,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "25",
+ "pc": 6460158688,
+ "binary": "CoreFoundation",
+ "offset": 963296,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "26",
+ "pc": 6460149448,
+ "binary": "CoreFoundation",
+ "offset": 954056,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "27",
+ "pc": 6459231316,
+ "binary": "CoreFoundation",
+ "offset": 35924,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "28",
+ "pc": 6491393920,
+ "binary": "GraphicsServices",
+ "offset": 44928,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "29",
+ "pc": 6617929152,
+ "binary": "UIKit",
+ "offset": 472512,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "30",
+ "pc": 4298946228,
+ "binary": "ios_prod_global",
+ "offset": null,
+ "location": "-main.m:35",
+ "symbol": "main",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "31",
+ "pc": 6454117736,
+ "binary": "libdyld.dylib",
+ "offset": 5480,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ }
+ ],
+ "format": "custom",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "2eac514f26a676d1df0821e815d501149d3ead7f",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 0000000182e17a74 Metal Metal + 68212\n#01 00000001a0963190 AGXMetalA8 AGXMetalA8 + 520592\n#02 00000001a095c3f4 AGXMetalA8 AGXMetalA8 + 492532\n#03 00000001a093ea58 AGXMetalA8 AGXMetalA8 + 371288\n#04 0000000105340708 Flutter Flutter + 2836232\n GrMtlCommandBuffer::getRenderCommandEncoder(MTLRenderPassDescriptor*, GrMtlPipelineState const*, GrMtlOpsRenderPass*)\n third_party/skia/src/gpu/mtl/GrMtlCommandBuffer.mm:89:35\n#05 0000000105347e48 Flutter Flutter + 2866760\n GrMtlOpsRenderPass::precreateCmdEncoder()\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:37:36\n#06 0000000105348458 Flutter Flutter + 2868312\n GrMtlOpsRenderPass::setupRenderPass(GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:238:15\n GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu*, GrRenderTarget*, GrSurfaceOrigin, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:27:0\n GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu*, GrRenderTarget*, GrSurfaceOrigin, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&)\n third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm:26:0\n#07 0000000105340fa4 Flutter Flutter + 2838436\n GrMtlGpu::getOpsRenderPass(GrRenderTarget*, GrStencilAttachment*, GrSurfaceOrigin, SkIRect const&, GrOpsRenderPass::LoadAndStoreInfo const&, GrOpsRenderPass::StencilLoadAndStoreInfo const&, SkTArray<GrSurfaceProxy*, true> const&, GrXferBarrierFlags)\n third_party/skia/src/gpu/mtl/GrMtlGpu.mm:192:16\n#08 000000010525944c Flutter Flutter + 1889356\n create_render_pass(GrGpu*, GrRenderTarget*, GrStencilAttachment*, GrSurfaceOrigin, SkIRect const&, GrLoadOp, SkRGBA4f<(SkAlphaType)2> const&, GrLoadOp, GrStoreOp, SkTArray<GrSurfaceProxy*, true> const&, GrXferBarrierFlags)\n third_party/skia/src/gpu/GrOpsTask.cpp:509:17\n GrOpsTask::onExecute(GrOpFlushState*)\n third_party/skia/src/gpu/GrOpsTask.cpp:593:0\n#09 000000010524cad8 Flutter Flutter + 1837784\n GrRenderTask::execute(GrOpFlushState*)\n third_party/skia/src/gpu/GrRenderTask.h:38:61\n GrDrawingManager::executeRenderTasks(int, int, GrOpFlushState*, int*)\n third_party/skia/src/gpu/GrDrawingManager.cpp:456:0\n GrDrawingManager::flush(GrSurfaceProxy**, int, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrDrawingManager.cpp:335:0\n#10 000000010524cdf8 Flutter Flutter + 1838584\n GrDrawingManager::flushSurfaces(GrSurfaceProxy**, int, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrDrawingManager.cpp:562:27\n#11 00000001052787c8 Flutter Flutter + 2017224\n GrDrawingManager::flushSurface(GrSurfaceProxy*, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrDrawingManager.h:109:22\n GrSurfaceContext::flush(SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/GrSurfaceContext.cpp:1232:0\n#12 00000001052ef5a4 Flutter Flutter + 2504100\n SkGpuDevice::flush(SkSurface::BackendSurfaceAccess, GrFlushInfo const&, GrBackendSurfaceMutableState const*)\n third_party/skia/src/gpu/SkGpuDevice.cpp:1054:34\n SkGpuDevice::flush()\n third_party/skia/src/gpu/SkGpuDevice.cpp:1045:0\n#13 000000010550b5cc Flutter Flutter + 4715980\n SkCanvas::flush()\n third_party/skia/src/core/SkCanvas.cpp:614:11\n flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0::operator()(flutter::SurfaceFrame const&, SkCanvas*) const\n flutter/shell/gpu/gpu_surface_metal.mm:89:0\n decltype(std::__1::forward<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&>(fp)(std::__1::forward<flutter::SurfaceFrame const&>(fp0), std::__1::forward<SkCanvas*>(fp0))) std::__1::__invoke<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*>(flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n bool std::__1::__invoke_void_return_wrapper<bool>::__call<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*>(flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0&, flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:318:0\n std::__1::__function::__alloc_func<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0, std::__1::allocator<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0>, bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0, std::__1::allocator<flutter::GPUSurfaceMetal::AcquireFrame(SkISize const&)::$_0>, bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#14 000000010511b60c Flutter Flutter + 587276\n std::__1::__function::__value_func<bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*&&) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<bool (flutter::SurfaceFrame const&, SkCanvas*)>::operator()(flutter::SurfaceFrame const&, SkCanvas*) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n flutter::SurfaceFrame::PerformSubmit()\n flutter/flow/surface_frame.cc:65:0\n flutter::SurfaceFrame::Submit()\n flutter/flow/surface_frame.cc:43:0\n#15 00000001050a5268 Flutter Flutter + 103016\n flutter::FlutterPlatformViewsController::GetLayer(GrDirectContext*, std::__1::shared_ptr<flutter::IOSContext>, sk_sp<SkPicture>, SkRect, long long, long long)\n flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm:634:41\n flutter::FlutterPlatformViewsController::SubmitFrame(GrDirectContext*, std::__1::shared_ptr<flutter::IOSContext>, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)\n flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm:533:0\n#16 00000001050bee8c Flutter Flutter + 208524\n flutter::IOSSurface::SubmitFrame(GrDirectContext*, std::__1::unique_ptr<flutter::SurfaceFrame, std::__1::default_delete<flutter::SurfaceFrame> >)\n flutter/shell/platform/darwin/ios/ios_surface.mm:121:31\n#17 000000010539e840 Flutter Flutter + 3221568\n flutter::Rasterizer::DrawToSurface(flutter::LayerTree&)\n flutter/shell/common/rasterizer.cc:474:31\n#18 000000010539f400 Flutter Flutter + 3224576\n flutter::Rasterizer::DoDraw(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)\n flutter/shell/common/rasterizer.cc:339:32\n flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const\n flutter/shell/common/rasterizer.cc:173:0\n decltype(std::__1::forward<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&>(fp)(std::__1::forward<std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(fp0))) std::__1::__invoke<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> > >(flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1&, std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0\n std::__1::__function::__alloc_func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1, std::__1::allocator<flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)::$_1>, void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#19 000000010539eb10 Flutter Flutter + 3222288\n std::__1::__function::__value_func<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >&&) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)>::operator()(std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >) const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n flutter::Pipeline<flutter::LayerTree>::Consume(std::__1::function<void (std::__1::unique_ptr<flutter::LayerTree, std::__1::default_delete<flutter::LayerTree> >)> const&)\n flutter/shell/common/pipeline.h:161:0\n flutter::Rasterizer::Draw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, std::__1::function<bool (flutter::LayerTree&)>)\n flutter/shell/common/rasterizer.cc:177:0\n#20 00000001053a5208 Flutter Flutter + 3248648\n flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31::operator()() const\n flutter/shell/common/shell.cc:1046:23\n decltype(std::__1::forward<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(fp)()) std::__1::__invoke<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4361:0\n void std::__1::__invoke_void_return_wrapper<void>::__call<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&>(flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31&)\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:349:0\n std::__1::__function::__alloc_func<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31, std::__1::allocator<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31>, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1527:0\n std::__1::__function::__func<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31, std::__1::allocator<flutter::Shell::OnAnimatorDraw(fml::RefPtr<flutter::Pipeline<flutter::LayerTree> >, fml::TimePoint)::$_31>, void ()>::operator()()\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1651:0\n#21 00000001050c9c7c Flutter Flutter + 253052\n std::__1::__function::__value_func<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1799:16\n std::__1::function<void ()>::operator()() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:2347:0\n fml::MessageLoopImpl::FlushTasks(fml::FlushType)\n flutter/fml/message_loop_impl.cc:130:0\n#22 00000001050cbbf0 Flutter Flutter + 261104\n fml::MessageLoopImpl::RunExpiredTasksNow()\n flutter/fml/message_loop_impl.cc:143:3\n fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)\n flutter/fml/platform/darwin/message_loop_darwin.mm:75:0\n#23 00000001810e3dbc CoreFoundation CoreFoundation + 966076\n#24 00000001810e3ae0 CoreFoundation CoreFoundation + 965344\n#25 00000001810e32e0 CoreFoundation CoreFoundation + 963296\n#26 00000001810e0ec8 CoreFoundation CoreFoundation + 954056\n#27 0000000181000c54 CoreFoundation CoreFoundation + 35924\n#28 0000000182eacf80 GraphicsServices GraphicsServices + 44928\n#29 000000018a7595c0 UIKit UIKit + 472512\n#30 00000001003cb6b4 ios_prod_global main -main.m:35\n#31 0000000180b20568 libdyld.dylib libdyld.dylib + 5480\n",
+ "notes": [
+ {
+ "kind": "loadBaseDetected",
+ "message": "000000010508c000"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test14.input.txt b/github-label-notifier/symbolizer/test/data/test14.input.txt
new file mode 100644
index 0000000..cf29d95
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test14.input.txt
@@ -0,0 +1,36 @@
+@flutter-symbolizer-bot engine#2eac514f26a676d1df0821e815d501149d3ead7f release arm64 internal ios this
+/unauthorized
+
+Thread 0 (id: 0x00000303) CRASHED [EXC_BAD_ACCESS / KERN_INVALID_ADDRESS @ 0x000002e0 ]Show exception record
+0x0000000182e17a74(Metal + 0x00010a74)
+0x00000001a0963190(AGXMetalA8 + 0x0007f190)
+0x00000001a095c3f4(AGXMetalA8 + 0x000783f4)
+0x00000001a093ea58(AGXMetalA8 + 0x0005aa58)
+0x0000000105340708(Flutter + 0x002b4708)
+0x0000000105347e48(Flutter + 0x002bbe48)
+0x0000000105348458(Flutter + 0x002bc458)
+0x0000000105340fa4(Flutter + 0x002b4fa4)
+0x000000010525944c(Flutter + 0x001cd44c)
+0x000000010524cad8(Flutter + 0x001c0ad8)
+0x000000010524cdf8(Flutter + 0x001c0df8)
+0x00000001052787c8(Flutter + 0x001ec7c8)
+0x00000001052ef5a4(Flutter + 0x002635a4)
+0x000000010550b5cc(Flutter + 0x0047f5cc)
+0x000000010511b60c(Flutter + 0x0008f60c)
+0x00000001050a5268(Flutter + 0x00019268)
+0x00000001050bee8c(Flutter + 0x00032e8c)
+0x000000010539e840(Flutter + 0x00312840)
+0x000000010539f400(Flutter + 0x00313400)
+0x000000010539eb10(Flutter + 0x00312b10)
+0x00000001053a5208(Flutter + 0x00319208)
+0x00000001050c9c7c(Flutter + 0x0003dc7c)
+0x00000001050cbbf0(Flutter + 0x0003fbf0)
+0x00000001810e3dbc(CoreFoundation + 0x000ebdbc)
+0x00000001810e3ae0(CoreFoundation + 0x000ebae0)
+0x00000001810e32e0(CoreFoundation + 0x000eb2e0)
+0x00000001810e0ec8(CoreFoundation + 0x000e8ec8)
+0x0000000181000c54(CoreFoundation + 0x00008c54)
+0x0000000182eacf80(GraphicsServices + 0x0000af80)
+0x000000018a7595c0(UIKit + 0x000735c0)
+0x00000001003cb6b4(ios_prod_global -main.m:35)main
+0x0000000180b20568(libdyld.dylib + 0x00001568)
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test15.expected.github.txt b/github-label-notifier/symbolizer/test/data/test15.expected.github.txt
new file mode 100644
index 0000000..c7aeeb4
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test15.expected.github.txt
@@ -0,0 +1,18 @@
+
+<details>
+<summary>There were failures symbolizing some of the crashes I found</summary>
+
+When processing null I found crash
+
+```
+Crash(engineVariant: EngineVariant(os: android, arch: null, mode: null), frames: [CrashFrame.android(no: 00, pc: 107580, binary: /system/lib/libc.so, rest: (abort+63), buildId: null), CrashFrame.android(no: 01, pc: 2870917, binary: /data/app/com.example.app/lib/arm/libflutter.so, rest: (offset 0x1002000), buildId: null)], format: native, androidMajorVersion: 8)
+```
+
+but failed to symbolize it with the following notes:
+
+* Unknown engine hash
+
+See [my documentation](https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md#commands) for more details.
+</details>
+
+<!-- {"symbolized":[]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test15.expected.txt b/github-label-notifier/symbolizer/test/data/test15.expected.txt
new file mode 100644
index 0000000..fdd22af
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test15.expected.txt
@@ -0,0 +1,39 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": null,
+ "mode": null
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 107580,
+ "binary": "/system/lib/libc.so",
+ "rest": " (abort+63)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 2870917,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "rest": " (offset 0x1002000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 8
+ },
+ "engineBuild": null,
+ "symbolized": null,
+ "notes": [
+ {
+ "kind": "unknownEngineHash",
+ "message": null
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test15.input.txt b/github-label-notifier/symbolizer/test/data/test15.input.txt
new file mode 100644
index 0000000..95d4d89
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test15.input.txt
@@ -0,0 +1,14 @@
+```bash
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Build fingerprint: '...:8.1.0/.../...:...'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Revision: '0'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: pid: 11111, tid: 22222, name: DartWorker >>> com.example.app <<<
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r0 00000000 r1 00000000 r2 00000000 r3 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r4 00000000 r5 00000000 r6 00000000 r7 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r8 00000000 r9 00000000 sl 00000000 fp 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ip 00000000 sp 00000000 lr 00000000 pc 00000000 cpsr 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: backtrace:
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #00 pc 0001a43c /system/lib/libc.so (abort+63)
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #01 pc 002bce85 /data/app/com.example.app/lib/arm/libflutter.so (offset 0x1002000)
+```
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test16.expected.github.txt b/github-label-notifier/symbolizer/test/data/test16.expected.github.txt
new file mode 100644
index 0000000..5c43374
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test16.expected.github.txt
@@ -0,0 +1,18 @@
+
+<details>
+<summary>There were failures symbolizing some of the crashes I found</summary>
+
+When processing null I found crash
+
+```
+Crash(engineVariant: EngineVariant(os: android, arch: null, mode: null), frames: [CrashFrame.android(no: 00, pc: 107580, binary: /system/lib/libc.so, rest: (abort+63), buildId: null), CrashFrame.android(no: 01, pc: 2870917, binary: /data/app/com.example.app/lib/arm/libflutter.so, rest: (offset 0x1002000), buildId: null)], format: native, androidMajorVersion: 8)
+```
+
+but failed to symbolize it with the following notes:
+
+* Unknown engine ABI
+
+See [my documentation](https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md#commands) for more details.
+</details>
+
+<!-- {"symbolized":[]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test16.expected.txt b/github-label-notifier/symbolizer/test/data/test16.expected.txt
new file mode 100644
index 0000000..ce29b59
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test16.expected.txt
@@ -0,0 +1,39 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": null,
+ "mode": null
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 107580,
+ "binary": "/system/lib/libc.so",
+ "rest": " (abort+63)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 2870917,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "rest": " (offset 0x1002000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 8
+ },
+ "engineBuild": null,
+ "symbolized": null,
+ "notes": [
+ {
+ "kind": "unknownAbi",
+ "message": null
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test16.input.txt b/github-label-notifier/symbolizer/test/data/test16.input.txt
new file mode 100644
index 0000000..7d64072
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test16.input.txt
@@ -0,0 +1,19 @@
+```bash
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Build fingerprint: '...:8.1.0/.../...:...'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Revision: '0'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: pid: 11111, tid: 22222, name: DartWorker >>> com.example.app <<<
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r0 00000000 r1 00000000 r2 00000000 r3 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r4 00000000 r5 00000000 r6 00000000 r7 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r8 00000000 r9 00000000 sl 00000000 fp 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ip 00000000 sp 00000000 lr 00000000 pc 00000000 cpsr 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: backtrace:
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #00 pc 0001a43c /system/lib/libc.so (abort+63)
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #01 pc 002bce85 /data/app/com.example.app/lib/arm/libflutter.so (offset 0x1002000)
+```
+
+```bash
+Doctor summary (to see all details, run flutter doctor -v):
+[✓] Flutter (Channel stable, 1.22.1, on xxxx, locale xxxx)
+```
diff --git a/github-label-notifier/symbolizer/test/data/test17.expected.github.txt b/github-label-notifier/symbolizer/test/data/test17.expected.github.txt
new file mode 100644
index 0000000..4e170da
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test17.expected.github.txt
@@ -0,0 +1,131 @@
+
+<details>
+<summary>There were failures symbolizing some of the crashes I found</summary>
+
+When processing null I found crash
+
+```
+Crash(engineVariant: EngineVariant(os: android, arch: arm, mode: null), frames: [CrashFrame.android(no: 00, pc: 107580, binary: /system/lib/libc.so, rest: (abort+63), buildId: null), CrashFrame.android(no: 01, pc: 2870917, binary: /data/app/com.example.app/lib/arm/libflutter.so, rest: (offset 0x1002000), buildId: null)], format: native, androidMajorVersion: 8)
+```
+
+but failed to symbolize it with the following notes:
+
+* Exception occurred while symbolizing:
+ ```
+ {EngineBuild(engineHash: 75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d, variant: EngineVariant(os: android, arch: arm, mode: release))} Failed to download EngineBuild(engineHash: 75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d, variant: EngineVariant(os: android, arch: arm, mode: release))
+ #0 SymbolsCacheProxy.get (file:///Users/vegorov/src/dart_ci/github-label-notifier/symbolizer/test/bot_test.dart:38:7)
+ #1 Symbolizer._symbolizeCrashWith (package:symbolizer/symbolizer.dart:100:40)
+ #2 Symbolizer._symbolizeCrash (package:symbolizer/symbolizer.dart:156:24)
+ #3 Symbolizer.symbolize.<anonymous closure> (package:symbolizer/symbolizer.dart:58:32)
+ #4 MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
+ #5 ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
+ #6 Future.wait (dart:async/future.dart:406:26)
+ #7 Symbolizer.symbolize (package:symbolizer/symbolizer.dart:57:25)
+ <asynchronous suspension>
+ #8 Bot.symbolizeGiven (package:symbolizer/bot.dart:249:28)
+ #9 Bot.executeCommand (package:symbolizer/bot.dart:189:11)
+ <asynchronous suspension>
+ #10 main.<anonymous closure>.<anonymous closure> (file:///Users/vegorov/src/dart_ci/github-label-notifier/symbolizer/test/bot_test.dart:183:19)
+ <asynchronous suspension>
+ #11 main.<anonymous closure>.<anonymous closure> (file:///Users/vegorov/src/dart_ci/github-label-notifier/symbolizer/test/bot_test.dart)
+ #12 Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart:200:19)
+ <asynchronous suspension>
+ #13 Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart)
+ #14 _rootRun (dart:async/zone.dart:1190:13)
+ #15 _CustomZone.run (dart:async/zone.dart:1093:19)
+ #16 _runZoned (dart:async/zone.dart:1630:10)
+ #17 runZoned (dart:async/zone.dart:1550:10)
+ #18 Declarer.test.<anonymous closure> (package:test_api/src/backend/declarer.dart:198:13)
+ #19 Invoker.waitForOutstandingCallbacks.<anonymous closure> (package:test_api/src/backend/invoker.dart:231:15)
+ #20 _rootRun (dart:async/zone.dart:1190:13)
+ #21 _CustomZone.run (dart:async/zone.dart:1093:19)
+ #22 _runZoned (dart:async/zone.dart:1630:10)
+ #23 runZoned (dart:async/zone.dart:1550:10)
+ #24 Invoker.waitForOutstandingCallbacks (package:test_api/src/backend/invoker.dart:228:5)
+ #25 Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/invoker.dart:383:17)
+ <asynchronous suspension>
+ #26 Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/invoker.dart)
+ #27 _rootRun (dart:async/zone.dart:1190:13)
+ #28 _CustomZone.run (dart:async/zone.dart:1093:19)
+ #29 _runZoned (dart:async/zone.dart:1630:10)
+ #30 runZoned (dart:async/zone.dart:1550:10)
+ #31 Invoker._onRun.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/invoker.dart:370:9)
+ #32 Invoker._guardIfGuarded (package:test_api/src/backend/invoker.dart:415:15)
+ #33 Invoker._onRun.<anonymous closure> (package:test_api/src/backend/invoker.dart:369:7)
+ #34 _rootRun (dart:async/zone.dart:1190:13)
+ #35 _CustomZone.run (dart:async/zone.dart:1093:19)
+ #36 _runZoned (dart:async/zone.dart:1630:10)
+ #37 runZoned (dart:async/zone.dart:1550:10)
+ #38 Chain.capture (package:stack_trace/src/chain.dart:98:14)
+ #39 Invoker._onRun (package:test_api/src/backend/invoker.dart:368:11)
+ #40 LiveTestController.run (package:test_api/src/backend/live_test_controller.dart:153:11)
+ #41 RemoteListener._runLiveTest.<anonymous closure> (package:test_api/src/remote_listener.dart:256:16)
+ #42 _rootRun (dart:async/zone.dart:1190:13)
+ #43 _CustomZone.run (dart:async/zone.dart:1093:19)
+ #44 _runZoned (dart:async/zone.dart:1630:10)
+ #45 runZoned (dart:async/zone.dart:1550:10)
+ #46 RemoteListener._runLiveTest (package:test_api/src/remote_listener.dart:255:5)
+ #47 RemoteListener._serializeTest.<anonymous closure> (package:test_api/src/remote_listener.dart:208:7)
+ #48 _rootRunUnary (dart:async/zone.dart:1198:47)
+ #49 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
+ #50 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
+ #51 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
+ #52 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
+ #53 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
+ #54 _StreamController._add (dart:async/stream_controller.dart:682:7)
+ #55 _StreamController.add (dart:async/stream_controller.dart:624:5)
+ #56 _rootRunUnary (dart:async/zone.dart:1206:13)
+ #57 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
+ #58 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
+ #59 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
+ #60 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
+ #61 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
+ #62 _StreamController._add (dart:async/stream_controller.dart:682:7)
+ #63 _StreamController.add (dart:async/stream_controller.dart:624:5)
+ #64 _StreamSinkWrapper.add (dart:async/stream_controller.dart:900:13)
+ #65 _GuaranteeSink.add (package:stream_channel/src/guarantee_channel.dart:125:12)
+ #66 new _MultiChannel.<anonymous closure> (package:stream_channel/src/multi_channel.dart:159:31)
+ #67 _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
+ #68 CastStreamSubscription._onData (dart:_internal/async_cast.dart:85:11)
+ #69 _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
+ #70 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
+ #71 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
+ #72 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
+ #73 _StreamController._add (dart:async/stream_controller.dart:682:7)
+ #74 _StreamController.add (dart:async/stream_controller.dart:624:5)
+ #75 _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
+ #76 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
+ #77 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
+ #78 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
+ #79 _StreamController._add (dart:async/stream_controller.dart:682:7)
+ #80 _StreamController.add (dart:async/stream_controller.dart:624:5)
+ #81 _StreamSinkWrapper.add (dart:async/stream_controller.dart:900:13)
+ #82 _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
+ #83 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
+ #84 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
+ #85 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
+ #86 _StreamController._add (dart:async/stream_controller.dart:682:7)
+ #87 _StreamController.add (dart:async/stream_controller.dart:624:5)
+ #88 _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
+ #89 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
+ #90 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
+ #91 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
+ #92 _StreamController._add (dart:async/stream_controller.dart:682:7)
+ #93 _StreamController.add (dart:async/stream_controller.dart:624:5)
+ #94 _StreamSinkWrapper.add (dart:async/stream_controller.dart:900:13)
+ #95 _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
+ #96 CastStreamSubscription._onData (dart:_internal/async_cast.dart:85:11)
+ #97 _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
+ #98 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
+ #99 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
+ #100 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
+ #101 _StreamController._add (dart:async/stream_controller.dart:682:7)
+ #102 _StreamController.add (dart:async/stream_controller.dart:624:5)
+ #103 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
+
+ ```
+
+See [my documentation](https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md#commands) for more details.
+</details>
+
+<!-- {"symbolized":[]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test17.expected.txt b/github-label-notifier/symbolizer/test/data/test17.expected.txt
new file mode 100644
index 0000000..d3491ea
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test17.expected.txt
@@ -0,0 +1,46 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": null
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 107580,
+ "binary": "/system/lib/libc.so",
+ "rest": " (abort+63)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 2870917,
+ "binary": "/data/app/com.example.app/lib/arm/libflutter.so",
+ "rest": " (offset 0x1002000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 8
+ },
+ "engineBuild": {
+ "engineHash": "75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d",
+ "variant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 0001a43c /system/lib/libc.so (abort+63)\n#01 002bce85 <...>/lib/arm/libflutter.so (offset 0x1002000)\n EllipticalRRectOp::EllipticalRRectOp(GrSimpleMeshDrawOpHelper::MakeArgs, SkRGBA4f<(SkAlphaType)2> const&, SkMatrix const&, SkRect const&, float, float, SkPoint, bool)\n third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp:2896:18\n",
+ "notes": [
+ {
+ "kind": "defaultedToReleaseBuildIdUnavailable",
+ "message": null
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test17.input.txt b/github-label-notifier/symbolizer/test/data/test17.input.txt
new file mode 100644
index 0000000..4dc625d
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test17.input.txt
@@ -0,0 +1,22 @@
+/throw
+
+```bash
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Build fingerprint: '...:8.1.0/.../...:...'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: Revision: '0'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ABI: 'arm'
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: pid: 11111, tid: 22222, name: DartWorker >>> com.example.app <<<
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r0 00000000 r1 00000000 r2 00000000 r3 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r4 00000000 r5 00000000 r6 00000000 r7 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: r8 00000000 r9 00000000 sl 00000000 fp 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: ip 00000000 sp 00000000 lr 00000000 pc 00000000 cpsr 00000000
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: backtrace:
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #00 pc 0001a43c /system/lib/libc.so (abort+63)
+0000-00-00 00:00:00.000 33333-33333/? A/DEBUG: #01 pc 002bce85 /data/app/com.example.app/lib/arm/libflutter.so (offset 0x1002000)
+```
+
+```bash
+Doctor summary (to see all details, run flutter doctor -v):
+[✓] Flutter (Channel stable, 1.22.1, on xxxx, locale xxxx)
+```
diff --git a/github-label-notifier/symbolizer/test/data/test18.expected.github.txt b/github-label-notifier/symbolizer/test/data/test18.expected.github.txt
new file mode 100644
index 0000000..fd017ed
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test18.expected.github.txt
@@ -0,0 +1,44 @@
+crash from null symbolized using symbols for `defa8be2b10650dad50dfee9324ed8d16eeec13f` `ios-arm64-release`
+```
+#00 000000010604661c Flutter Flutter + 4089372
+ std::__1::unique_ptr<bssl::SSL_HANDSHAKE, bssl::internal::Deleter<bssl::SSL_HANDSHAKE> >::get() const
+ /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:2625:19
+ SSL_in_init
+ third_party/boringssl/src/ssl/ssl_lib.cc:2673:0
+ SSL_get_session
+ third_party/boringssl/src/ssl/ssl_session.cc:1060:0
+ SSL_get_peer_full_cert_chain
+ third_party/boringssl/src/ssl/ssl_x509.cc:554:0
+ dart::bin::TrustEvaluateHandler(long long, _Dart_CObject*)
+ third_party/dart/runtime/bin/security_context_macos.cc:181:0
+#01 0000000106046604 Flutter Flutter + 4089348
+ dart::bin::CObject::operator new(unsigned long)
+ third_party/dart/runtime/bin/dartutils.h:332:44
+ dart::bin::CObjectArray::operator[](long) const
+ third_party/dart/runtime/bin/dartutils.h:508:0
+ dart::bin::TrustEvaluateHandler(long long, _Dart_CObject*)
+ third_party/dart/runtime/bin/security_context_macos.cc:178:0
+#02 000000010613e080 Flutter Flutter + 5103744
+ dart::NativeMessageHandler::HandleMessage(std::__1::unique_ptr<dart::Message, std::__1::default_delete<dart::Message> >)
+ third_party/dart/runtime/vm/native_message_handler.cc:43:3
+#03 000000010613c7bc Flutter Flutter + 5097404
+ dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool)
+ third_party/dart/runtime/vm/message_handler.cc:233:16
+#04 000000010613c3a0 Flutter Flutter + 5096352
+ dart::MessageHandler::TaskCallback()
+ third_party/dart/runtime/vm/message_handler.cc:443:18
+ dart::MessageHandlerTask::Run()
+ third_party/dart/runtime/vm/message_handler.cc:31:0
+#05 00000001061be4e0 Flutter Flutter + 5629152
+ dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*)
+ third_party/dart/runtime/vm/thread_pool.cc:158:15
+ dart::ThreadPool::Worker::Main(unsigned long)
+ third_party/dart/runtime/vm/thread_pool.cc:323:0
+#06 0000000106176c04 Flutter Flutter + 5336068
+ dart::ThreadStart(void*)
+ third_party/dart/runtime/vm/os_thread_macos.cc:132:5
+#07 00000001f6849ca4 libsystem_pthread.dylib libsystem_pthread.dylib + 7332
+
+```
+_(Load address missing from the report, detected heuristically: 0000000105c60000)_
+<!-- {"symbolized":[1001]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test18.expected.txt b/github-label-notifier/symbolizer/test/data/test18.expected.txt
new file mode 100644
index 0000000..769cd53
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test18.expected.txt
@@ -0,0 +1,102 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 4395918876,
+ "binary": "Flutter",
+ "offset": 4089372,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "01",
+ "pc": 4395918852,
+ "binary": "Flutter",
+ "offset": 4089348,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "02",
+ "pc": 4396933248,
+ "binary": "Flutter",
+ "offset": 5103744,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "03",
+ "pc": 4396926908,
+ "binary": "Flutter",
+ "offset": 5097404,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "04",
+ "pc": 4396925856,
+ "binary": "Flutter",
+ "offset": 5096352,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "05",
+ "pc": 4397458656,
+ "binary": "Flutter",
+ "offset": 5629152,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "06",
+ "pc": 4397165572,
+ "binary": "Flutter",
+ "offset": 5336068,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ },
+ {
+ "no": "07",
+ "pc": 8430853284,
+ "binary": "libsystem_pthread.dylib",
+ "offset": 7332,
+ "location": null,
+ "symbol": "",
+ "runtimeType": "custom"
+ }
+ ],
+ "format": "custom",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "defa8be2b10650dad50dfee9324ed8d16eeec13f",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 000000010604661c Flutter Flutter + 4089372\n std::__1::unique_ptr<bssl::SSL_HANDSHAKE, bssl::internal::Deleter<bssl::SSL_HANDSHAKE> >::get() const\n /opt/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:2625:19\n SSL_in_init\n third_party/boringssl/src/ssl/ssl_lib.cc:2673:0\n SSL_get_session\n third_party/boringssl/src/ssl/ssl_session.cc:1060:0\n SSL_get_peer_full_cert_chain\n third_party/boringssl/src/ssl/ssl_x509.cc:554:0\n dart::bin::TrustEvaluateHandler(long long, _Dart_CObject*)\n third_party/dart/runtime/bin/security_context_macos.cc:181:0\n#01 0000000106046604 Flutter Flutter + 4089348\n dart::bin::CObject::operator new(unsigned long)\n third_party/dart/runtime/bin/dartutils.h:332:44\n dart::bin::CObjectArray::operator[](long) const\n third_party/dart/runtime/bin/dartutils.h:508:0\n dart::bin::TrustEvaluateHandler(long long, _Dart_CObject*)\n third_party/dart/runtime/bin/security_context_macos.cc:178:0\n#02 000000010613e080 Flutter Flutter + 5103744\n dart::NativeMessageHandler::HandleMessage(std::__1::unique_ptr<dart::Message, std::__1::default_delete<dart::Message> >)\n third_party/dart/runtime/vm/native_message_handler.cc:43:3\n#03 000000010613c7bc Flutter Flutter + 5097404\n dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool)\n third_party/dart/runtime/vm/message_handler.cc:233:16\n#04 000000010613c3a0 Flutter Flutter + 5096352\n dart::MessageHandler::TaskCallback()\n third_party/dart/runtime/vm/message_handler.cc:443:18\n dart::MessageHandlerTask::Run()\n third_party/dart/runtime/vm/message_handler.cc:31:0\n#05 00000001061be4e0 Flutter Flutter + 5629152\n dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*)\n third_party/dart/runtime/vm/thread_pool.cc:158:15\n dart::ThreadPool::Worker::Main(unsigned long)\n third_party/dart/runtime/vm/thread_pool.cc:323:0\n#06 0000000106176c04 Flutter Flutter + 5336068\n dart::ThreadStart(void*)\n third_party/dart/runtime/vm/os_thread_macos.cc:132:5\n#07 00000001f6849ca4 libsystem_pthread.dylib libsystem_pthread.dylib + 7332\n",
+ "notes": [
+ {
+ "kind": "loadBaseDetected",
+ "message": "0000000105c60000"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test18.input.txt b/github-label-notifier/symbolizer/test/data/test18.input.txt
new file mode 100644
index 0000000..a8a4552
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test18.input.txt
@@ -0,0 +1,10 @@
+@flutter-symbolizer-bot internal engine#defa8be2b10650dad50dfee9324ed8d16eeec13f ios release arm64 this
+
+0x000000010604661c (Flutter + 0x003e661c)
+0x0000000106046604 (Flutter + 0x003e6604)
+0x000000010613e080 (Flutter + 0x004de080)
+0x000000010613c7bc (Flutter + 0x004dc7bc)
+0x000000010613c3a0 (Flutter + 0x004dc3a0)
+0x00000001061be4e0 (Flutter + 0x0055e4e0)
+0x0000000106176c04 (Flutter + 0x00516c04)
+0x00000001f6849ca4 (libsystem_pthread.dylib + 0x00001ca4)
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test19.expected.github.txt b/github-label-notifier/symbolizer/test/data/test19.expected.github.txt
new file mode 100644
index 0000000..f0dce51
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test19.expected.github.txt
@@ -0,0 +1,13 @@
+crash from null symbolized using symbols for `014da89eb01520ab7bbeba9971f852488ee80eaf` `android-arm-profile`
+```
+#00 00066638 /system/lib/libc.so (ifree+219)
+#01 000669e7 /system/lib/libc.so (je_free+74)
+#02 0039fc47 <...>/lib/arm/libflutter.so (offset 0x508000)
+ dart::TimelineEventArguments::Free()
+ third_party/dart/runtime/vm/timeline.cc:386:3
+ dart::TimelineEvent::Init(dart::TimelineEvent::EventType, char const*)
+ third_party/dart/runtime/vm/timeline.cc:581:14
+
+```
+
+<!-- {"symbolized":[1042]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test19.expected.txt b/github-label-notifier/symbolizer/test/data/test19.expected.txt
new file mode 100644
index 0000000..12ce4bc
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test19.expected.txt
@@ -0,0 +1,49 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "profile"
+ },
+ "frames": [
+ {
+ "no": "00",
+ "pc": 419384,
+ "binary": "/system/lib/libc.so",
+ "rest": " (ifree+219)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "01",
+ "pc": 420327,
+ "binary": "/system/lib/libc.so",
+ "rest": " (je_free+74)",
+ "buildId": null,
+ "runtimeType": "android"
+ },
+ {
+ "no": "02",
+ "pc": 3800135,
+ "binary": "/data/app/com.example.macrobenchmarks-1/lib/arm/libflutter.so",
+ "rest": " (offset 0x508000)",
+ "buildId": null,
+ "runtimeType": "android"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": 7
+ },
+ "engineBuild": {
+ "engineHash": "014da89eb01520ab7bbeba9971f852488ee80eaf",
+ "variant": {
+ "os": "android",
+ "arch": "arm",
+ "mode": "profile"
+ }
+ },
+ "symbolized": "#00 00066638 /system/lib/libc.so (ifree+219)\n#01 000669e7 /system/lib/libc.so (je_free+74)\n#02 0039fc47 <...>/lib/arm/libflutter.so (offset 0x508000)\n dart::TimelineEventArguments::Free()\n third_party/dart/runtime/vm/timeline.cc:386:3\n dart::TimelineEvent::Init(dart::TimelineEvent::EventType, char const*)\n third_party/dart/runtime/vm/timeline.cc:581:14\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test19.input.txt b/github-label-notifier/symbolizer/test/data/test19.input.txt
new file mode 100644
index 0000000..2865e35
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test19.input.txt
@@ -0,0 +1,36 @@
+@flutter-symbolizer-bot flutter#bbc0161 profile
+
+tdout: 11-09 15:27:57.618 D/ActivityManager( 1462): cleanUpApplicationRecord -- 14311
+2020-11-09T15:32:20.230036: stdout: [ +19 ms] executing: /home/flutter/.cocoon/flutter/bin/cache/dart-sdk/bin/dart pub run test test_driver/multi_widget_construction_perf_test.dart -rexpanded
+2020-11-09T15:32:33.378428: stdout: [+13148 ms] 00:00 �[32m+0�[0m: multi_widget_construction_perf�[0m
+2020-11-09T15:32:33.409464: stderr: [ +31 ms] VMServiceFlutterDriver: Connecting to Flutter application at http://127.0.0.1:35015/D39pZt4yXxM=/
+2020-11-09T15:32:33.554340: stderr: [ +144 ms] VMServiceFlutterDriver: Isolate found with number: 3413807003351991
+2020-11-09T15:32:33.662966: stderr: [ +108 ms] VMServiceFlutterDriver: Isolate is paused at start.
+2020-11-09T15:32:33.663920: stderr: [ +1 ms] VMServiceFlutterDriver: Attempting to resume isolate
+2020-11-09T15:32:35.900610: stderr: [+2236 ms] VMServiceFlutterDriver: Connected to Flutter application.
+2020-11-09T15:32:41.572089: stdout: [+5672 ms] F/libc (14836): Fatal signal 11 (SIGSEGV), code 1, fault addr 0xfffffffc in tid 14854 (1.raster)
+2020-11-09T15:32:41.678820: stdout: [ +106 ms] *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+2020-11-09T15:32:41.679115: stdout: [ ] Build fingerprint: 'motorola/athene/athene:7.0/NPJS25.93-14.7-8/6:user/release-keys'
+2020-11-09T15:32:41.679498: stdout: [ ] Revision: 'p2a0'
+2020-11-09T15:32:41.680057: stdout: [ ] ABI: 'arm'
+2020-11-09T15:32:41.680357: stdout: [ ] pid: 14836, tid: 14854, name: 1.raster >>> com.example.macrobenchmarks <<<
+2020-11-09T15:32:41.680724: stdout: [ ] signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xfffffffc
+2020-11-09T15:32:41.681146: stdout: [ ] r0 ffffffff r1 00000000 r2 00000000 r3 00000000
+2020-11-09T15:32:41.681682: stdout: [ ] r4 a2056000 r5 8dc3d8f1 r6 a20574d0 r7 000000dc
+2020-11-09T15:32:41.682121: stdout: [ ] r8 a54af288 r9 00000000 sl 8dba2048 fp 8dc3d8f1
+2020-11-09T15:32:41.682474: stdout: [ ] ip aef56628 sp 94bf5fd8 lr aef3d309 pc aef35638 cpsr 80070030
+2020-11-09T15:32:41.685668: stdout: [ +2 ms] backtrace:
+2020-11-09T15:32:41.686361: stdout: [ ] #00 pc 00066638 /system/lib/libc.so (ifree+219)
+2020-11-09T15:32:41.687106: stdout: [ ] #01 pc 000669e7 /system/lib/libc.so (je_free+74)
+stdout: [ ] #02 pc 0039fc47 /data/app/com.example.macrobenchmarks-1/lib/arm/libflutter.so (offset 0x508000)
+2020-11-09T15:32:43.070687: stdout: [+1383 ms] 00:09 �[32m+0�[0m�[31m -1�[0m: multi_widget_construction_perf �[1m�[31m[E]�[0m�[0m
+2020-11-09T15:32:43.076963: stdout: [ +6 ms] DriverError: Failed to start tracing due to remote error
+2020-11-09T15:32:43.077338: stdout: [ ] Original error: setVMTimelineFlags: (-32000) Bad state: The client closed with pending request "setVMTimelineFlags".
+2020-11-09T15:32:43.077641: stdout: [ ] Original stack trace:
+stdout: [ ] dart:async/future_impl.dart 23:44 _Completer.completeError
+2020-11-09T15:32:43.077890: stdout: [ ] package:vm_service/src/vm_service.dart 2050:17 VmService._processResponse
+stdout: [ ] package:vm_service/src/vm_service.dart 2037:7 VmService._processMessageStr
+2020-11-09T15:32:43.078081: stdout: [ ] package:vm_service/src/vm_service.dart 1988:7 VmService._processMessage
+2020-11-09T15:32:43.078296: stdout: [ ] package:stack_trace/src/stack_zone_specification.dart 126:26 StackZoneSpecification._registerUnaryCallback.<fn>.<fn>
+stdout: [ ] package:stack_trace/src/stack_zone_specification.dart 208:15 StackZoneSpecification._run
+2020-11-09T15:32:43.078472: stdout: [ ] package:stack_trace/src/stack_zone_specification.dart 126:14
diff --git a/github-label-notifier/symbolizer/test/data/test20.expected.github.txt b/github-label-notifier/symbolizer/test/data/test20.expected.github.txt
new file mode 100644
index 0000000..ad4603a
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test20.expected.github.txt
@@ -0,0 +1,57 @@
+crash from null symbolized using symbols for `a1440ca392ca23e874a105c5f3248b495bd0e247` `ios-arm64-release`
+```
+#00 00000001df39c72c libsystem_kernel.dylib __psynch_cvwait + 8
+#01 00000001f9f83330 libsystem_pthread.dylib _pthread_cond_wait$VARIANT$mp + 1180
+#02 00000001c88cee0c libc++.1.dylib std::__1::condition_variable::wait+ 52748 (std::__1::unique_lock<std::__1::mutex>&) + 24
+#03 0000000101154814 Flutter 0x101118000 + 247828
+ fml::AutoResetWaitableEvent::Wait()
+ flutter/fml/synchronization/waitable_event.cc:75:9
+#04 000000010141ea7c Flutter 0x101118000 + 3172988
+ flutter::Shell::OnPlatformViewDestroyed()
+ flutter/shell/common/shell.cc:804:9
+#05 000000010113a674 Flutter 0x101118000 + 140916
+ -[FlutterViewController surfaceUpdated:]
+ flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm:581:35
+#06 000000010113b000 Flutter 0x101118000 + 143360
+ -[FlutterViewController applicationWillResignActive:]
+ flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm:701:3
+#07 00000001b4ef9098 CoreFoundation __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20
+#08 00000001b4ef9058 CoreFoundation ___CFXRegistrationPost_block_invoke + 48
+#09 00000001b4ef8650 CoreFoundation _CFXRegistrationPost + 400
+#10 00000001b4ef8048 CoreFoundation _CFXNotificationPost + 696
+#11 00000001b611bb20 Foundation -[NSNotificationCenter postNotificationName:object:userInfo:] + 60
+#12 00000001b77d373c UIKitCore -[UIApplication _deactivateForReason:notify:] + 1540
+#13 00000001b6ebac0c UIKitCore -[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:] + 260
+#14 00000001b6ebb004 UIKitCore -[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] + 740
+#15 00000001b6eba8c0 UIKitCore -[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:] + 336
+#16 00000001b6ec2460 UIKitCore __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke + 188
+#17 00000001b72f73a8 UIKitCore +[BSAnimationSettings+ 6554536 (UIKit) tryAnimatingWithSettings:actions:completion:] + 812
+#18 00000001b73f5458 UIKitCore _UISceneSettingsDiffActionPerformChangesWithTransitionContext + 244
+#19 00000001b6ec21f8 UIKitCore -[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:] + 348
+#20 00000001b6d04390 UIKitCore __64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke + 772
+#21 00000001b6d02e30 UIKitCore -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] + 248
+#22 00000001b6d03fdc UIKitCore -[UIScene scene:didUpdateWithDiff:transitionContext:completion:] + 220
+#23 00000001b731e08c UIKitCore -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] + 464
+#24 00000001c384d4a0 FrontBoardServices -[FBSScene updater:didUpdateSettings:withDiff:transitionContext:completion:] + 456
+#25 00000001c3875cdc FrontBoardServices __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke_2 + 124
+#26 00000001c385a400 FrontBoardServices -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 232
+#27 00000001c3875c28 FrontBoardServices __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke + 368
+#28 00000001b4bcf280 libdispatch.dylib _dispatch_client_callout + 16
+#29 00000001b4b74b0c libdispatch.dylib _dispatch_block_invoke_direct$VARIANT$mp + 224
+#30 00000001c38994a8 FrontBoardServices __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 40
+#31 00000001c3899170 FrontBoardServices -[FBSSerialQueue _targetQueue_performNextIfPossible] + 404
+#32 00000001c3899644 FrontBoardServices -[FBSSerialQueue _performNextFromRunLoopSource] + 28
+#33 00000001b4f16240 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
+#34 00000001b4f16140 CoreFoundation __CFRunLoopDoSource0 + 204
+#35 00000001b4f15488 CoreFoundation __CFRunLoopDoSources0 + 256
+#36 00000001b4f0fa40 CoreFoundation __CFRunLoopRun + 776
+#37 00000001b4f0f200 CoreFoundation CFRunLoopRunSpecific + 572
+#38 00000001cb08c598 GraphicsServices GSEventRunModal + 160
+#39 00000001b77d8bcc UIKitCore -[UIApplication _run] + 1052
+#40 00000001b77de1a0 UIKitCore UIApplicationMain + 164
+#41 0000000100d5de84 Runner main + 24196 (AppDelegate.swift:)
+#42 00000001b4bee588 libdyld.dylib start + 4
+
+```
+
+<!-- {"symbolized":[1001]} -->
diff --git a/github-label-notifier/symbolizer/test/data/test20.expected.txt b/github-label-notifier/symbolizer/test/data/test20.expected.txt
new file mode 100644
index 0000000..6b4694f
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test20.expected.txt
@@ -0,0 +1,412 @@
+[
+ {
+ "crash": {
+ "engineVariant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ },
+ "frames": [
+ {
+ "no": "0",
+ "binary": "libsystem_kernel.dylib",
+ "pc": 8040073004,
+ "symbol": "__psynch_cvwait",
+ "offset": 8,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "1",
+ "binary": "libsystem_pthread.dylib",
+ "pc": 8488760112,
+ "symbol": "_pthread_cond_wait$VARIANT$mp",
+ "offset": 1180,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "2",
+ "binary": "libc++.1.dylib",
+ "pc": 7659646476,
+ "symbol": "std::__1::condition_variable::wait+ 52748 (std::__1::unique_lock<std::__1::mutex>&)",
+ "offset": 24,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "3",
+ "binary": "Flutter",
+ "pc": 4313139220,
+ "symbol": "0x101118000",
+ "offset": 247828,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "4",
+ "binary": "Flutter",
+ "pc": 4316064380,
+ "symbol": "0x101118000",
+ "offset": 3172988,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "5",
+ "binary": "Flutter",
+ "pc": 4313032308,
+ "symbol": "0x101118000",
+ "offset": 140916,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "6",
+ "binary": "Flutter",
+ "pc": 4313034752,
+ "symbol": "0x101118000",
+ "offset": 143360,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "7",
+ "binary": "CoreFoundation",
+ "pc": 7330566296,
+ "symbol": "__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__",
+ "offset": 20,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "8",
+ "binary": "CoreFoundation",
+ "pc": 7330566232,
+ "symbol": "___CFXRegistrationPost_block_invoke",
+ "offset": 48,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "9",
+ "binary": "CoreFoundation",
+ "pc": 7330563664,
+ "symbol": "_CFXRegistrationPost",
+ "offset": 400,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "10",
+ "binary": "CoreFoundation",
+ "pc": 7330562120,
+ "symbol": "_CFXNotificationPost",
+ "offset": 696,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "11",
+ "binary": "Foundation",
+ "pc": 7349582624,
+ "symbol": "-[NSNotificationCenter postNotificationName:object:userInfo:]",
+ "offset": 60,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "12",
+ "binary": "UIKitCore",
+ "pc": 7373403964,
+ "symbol": "-[UIApplication _deactivateForReason:notify:]",
+ "offset": 1540,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "13",
+ "binary": "UIKitCore",
+ "pc": 7363865612,
+ "symbol": "-[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:]",
+ "offset": 260,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "14",
+ "binary": "UIKitCore",
+ "pc": 7363866628,
+ "symbol": "-[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:]",
+ "offset": 740,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "15",
+ "binary": "UIKitCore",
+ "pc": 7363864768,
+ "symbol": "-[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:]",
+ "offset": 336,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "16",
+ "binary": "UIKitCore",
+ "pc": 7363896416,
+ "symbol": "__186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke",
+ "offset": 188,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "17",
+ "binary": "UIKitCore",
+ "pc": 7368307624,
+ "symbol": "+[BSAnimationSettings+ 6554536 (UIKit) tryAnimatingWithSettings:actions:completion:]",
+ "offset": 812,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "18",
+ "binary": "UIKitCore",
+ "pc": 7369348184,
+ "symbol": "_UISceneSettingsDiffActionPerformChangesWithTransitionContext",
+ "offset": 244,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "19",
+ "binary": "UIKitCore",
+ "pc": 7363895800,
+ "symbol": "-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]",
+ "offset": 348,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "20",
+ "binary": "UIKitCore",
+ "pc": 7362069392,
+ "symbol": "__64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke",
+ "offset": 772,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "21",
+ "binary": "UIKitCore",
+ "pc": 7362063920,
+ "symbol": "-[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:]",
+ "offset": 248,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "22",
+ "binary": "UIKitCore",
+ "pc": 7362068444,
+ "symbol": "-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]",
+ "offset": 220,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "23",
+ "binary": "UIKitCore",
+ "pc": 7368466572,
+ "symbol": "-[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:]",
+ "offset": 464,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "24",
+ "binary": "FrontBoardServices",
+ "pc": 7575229600,
+ "symbol": "-[FBSScene updater:didUpdateSettings:withDiff:transitionContext:completion:]",
+ "offset": 456,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "25",
+ "binary": "FrontBoardServices",
+ "pc": 7575395548,
+ "symbol": "__94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke_2",
+ "offset": 124,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "26",
+ "binary": "FrontBoardServices",
+ "pc": 7575282688,
+ "symbol": "-[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:]",
+ "offset": 232,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "27",
+ "binary": "FrontBoardServices",
+ "pc": 7575395368,
+ "symbol": "__94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke",
+ "offset": 368,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "28",
+ "binary": "libdispatch.dylib",
+ "pc": 7327249024,
+ "symbol": "_dispatch_client_callout",
+ "offset": 16,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "29",
+ "binary": "libdispatch.dylib",
+ "pc": 7326878476,
+ "symbol": "_dispatch_block_invoke_direct$VARIANT$mp",
+ "offset": 224,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "30",
+ "binary": "FrontBoardServices",
+ "pc": 7575540904,
+ "symbol": "__FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__",
+ "offset": 40,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "31",
+ "binary": "FrontBoardServices",
+ "pc": 7575540080,
+ "symbol": "-[FBSSerialQueue _targetQueue_performNextIfPossible]",
+ "offset": 404,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "32",
+ "binary": "FrontBoardServices",
+ "pc": 7575541316,
+ "symbol": "-[FBSSerialQueue _performNextFromRunLoopSource]",
+ "offset": 28,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "33",
+ "binary": "CoreFoundation",
+ "pc": 7330685504,
+ "symbol": "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__",
+ "offset": 24,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "34",
+ "binary": "CoreFoundation",
+ "pc": 7330685248,
+ "symbol": "__CFRunLoopDoSource0",
+ "offset": 204,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "35",
+ "binary": "CoreFoundation",
+ "pc": 7330681992,
+ "symbol": "__CFRunLoopDoSources0",
+ "offset": 256,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "36",
+ "binary": "CoreFoundation",
+ "pc": 7330658880,
+ "symbol": "__CFRunLoopRun",
+ "offset": 776,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "37",
+ "binary": "CoreFoundation",
+ "pc": 7330656768,
+ "symbol": "CFRunLoopRunSpecific",
+ "offset": 572,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "38",
+ "binary": "GraphicsServices",
+ "pc": 7701317016,
+ "symbol": "GSEventRunModal",
+ "offset": 160,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "39",
+ "binary": "UIKitCore",
+ "pc": 7373425612,
+ "symbol": "-[UIApplication _run]",
+ "offset": 1052,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "40",
+ "binary": "UIKitCore",
+ "pc": 7373447584,
+ "symbol": "UIApplicationMain",
+ "offset": 164,
+ "location": "",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "41",
+ "binary": "Runner",
+ "pc": 4308983428,
+ "symbol": "main",
+ "offset": 24196,
+ "location": "AppDelegate.swift:",
+ "runtimeType": "ios"
+ },
+ {
+ "no": "42",
+ "binary": "libdyld.dylib",
+ "pc": 7327376776,
+ "symbol": "start",
+ "offset": 4,
+ "location": "",
+ "runtimeType": "ios"
+ }
+ ],
+ "format": "native",
+ "androidMajorVersion": null
+ },
+ "engineBuild": {
+ "engineHash": "a1440ca392ca23e874a105c5f3248b495bd0e247",
+ "variant": {
+ "os": "ios",
+ "arch": "arm64",
+ "mode": "release"
+ }
+ },
+ "symbolized": "#00 00000001df39c72c libsystem_kernel.dylib __psynch_cvwait + 8\n#01 00000001f9f83330 libsystem_pthread.dylib _pthread_cond_wait$VARIANT$mp + 1180\n#02 00000001c88cee0c libc++.1.dylib std::__1::condition_variable::wait+ 52748 (std::__1::unique_lock<std::__1::mutex>&) + 24\n#03 0000000101154814 Flutter 0x101118000 + 247828\n fml::AutoResetWaitableEvent::Wait()\n flutter/fml/synchronization/waitable_event.cc:75:9\n#04 000000010141ea7c Flutter 0x101118000 + 3172988\n flutter::Shell::OnPlatformViewDestroyed()\n flutter/shell/common/shell.cc:804:9\n#05 000000010113a674 Flutter 0x101118000 + 140916\n -[FlutterViewController surfaceUpdated:]\n flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm:581:35\n#06 000000010113b000 Flutter 0x101118000 + 143360\n -[FlutterViewController applicationWillResignActive:]\n flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm:701:3\n#07 00000001b4ef9098 CoreFoundation __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20\n#08 00000001b4ef9058 CoreFoundation ___CFXRegistrationPost_block_invoke + 48\n#09 00000001b4ef8650 CoreFoundation _CFXRegistrationPost + 400\n#10 00000001b4ef8048 CoreFoundation _CFXNotificationPost + 696\n#11 00000001b611bb20 Foundation -[NSNotificationCenter postNotificationName:object:userInfo:] + 60\n#12 00000001b77d373c UIKitCore -[UIApplication _deactivateForReason:notify:] + 1540\n#13 00000001b6ebac0c UIKitCore -[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:] + 260\n#14 00000001b6ebb004 UIKitCore -[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] + 740\n#15 00000001b6eba8c0 UIKitCore -[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:] + 336\n#16 00000001b6ec2460 UIKitCore __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke + 188\n#17 00000001b72f73a8 UIKitCore +[BSAnimationSettings+ 6554536 (UIKit) tryAnimatingWithSettings:actions:completion:] + 812\n#18 00000001b73f5458 UIKitCore _UISceneSettingsDiffActionPerformChangesWithTransitionContext + 244\n#19 00000001b6ec21f8 UIKitCore -[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:] + 348\n#20 00000001b6d04390 UIKitCore __64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke + 772\n#21 00000001b6d02e30 UIKitCore -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] + 248\n#22 00000001b6d03fdc UIKitCore -[UIScene scene:didUpdateWithDiff:transitionContext:completion:] + 220\n#23 00000001b731e08c UIKitCore -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] + 464\n#24 00000001c384d4a0 FrontBoardServices -[FBSScene updater:didUpdateSettings:withDiff:transitionContext:completion:] + 456\n#25 00000001c3875cdc FrontBoardServices __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke_2 + 124\n#26 00000001c385a400 FrontBoardServices -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 232\n#27 00000001c3875c28 FrontBoardServices __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke + 368\n#28 00000001b4bcf280 libdispatch.dylib _dispatch_client_callout + 16\n#29 00000001b4b74b0c libdispatch.dylib _dispatch_block_invoke_direct$VARIANT$mp + 224\n#30 00000001c38994a8 FrontBoardServices __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 40\n#31 00000001c3899170 FrontBoardServices -[FBSSerialQueue _targetQueue_performNextIfPossible] + 404\n#32 00000001c3899644 FrontBoardServices -[FBSSerialQueue _performNextFromRunLoopSource] + 28\n#33 00000001b4f16240 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24\n#34 00000001b4f16140 CoreFoundation __CFRunLoopDoSource0 + 204\n#35 00000001b4f15488 CoreFoundation __CFRunLoopDoSources0 + 256\n#36 00000001b4f0fa40 CoreFoundation __CFRunLoopRun + 776\n#37 00000001b4f0f200 CoreFoundation CFRunLoopRunSpecific + 572\n#38 00000001cb08c598 GraphicsServices GSEventRunModal + 160\n#39 00000001b77d8bcc UIKitCore -[UIApplication _run] + 1052\n#40 00000001b77de1a0 UIKitCore UIApplicationMain + 164\n#41 0000000100d5de84 Runner main + 24196 (AppDelegate.swift:)\n#42 00000001b4bee588 libdyld.dylib start + 4\n",
+ "notes": []
+ }
+]
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/test/data/test20.input.txt b/github-label-notifier/symbolizer/test/data/test20.input.txt
new file mode 100644
index 0000000..44777f8
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/data/test20.input.txt
@@ -0,0 +1,51 @@
+@flutter-symbolizer-bot this ios release flutter#1.22.3
+
+Incident Identifier: 21BAAC4A-459E-458B-A0F3-CE6CB3BD5665
+Code Type: ARM-64 (Native)
+
+Thread 0 name: Dispatch queue: com.apple.main-thread
+Thread 0 Crashed:
+0 libsystem_kernel.dylib 0x00000001df39c72c __psynch_cvwait + 8
+1 libsystem_pthread.dylib 0x00000001f9f83330 _pthread_cond_wait$VARIANT$mp + 1180
+2 libc++.1.dylib 0x00000001c88cee0c std::__1::condition_variable::wait+ 52748 (std::__1::unique_lock<std::__1::mutex>&) + 24
+3 Flutter 0x0000000101154814 0x101118000 + 247828
+4 Flutter 0x000000010141ea7c 0x101118000 + 3172988
+5 Flutter 0x000000010113a674 0x101118000 + 140916
+6 Flutter 0x000000010113b000 0x101118000 + 143360
+7 CoreFoundation 0x00000001b4ef9098 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20
+8 CoreFoundation 0x00000001b4ef9058 ___CFXRegistrationPost_block_invoke + 48
+9 CoreFoundation 0x00000001b4ef8650 _CFXRegistrationPost + 400
+10 CoreFoundation 0x00000001b4ef8048 _CFXNotificationPost + 696
+11 Foundation 0x00000001b611bb20 -[NSNotificationCenter postNotificationName:object:userInfo:] + 60
+12 UIKitCore 0x00000001b77d373c -[UIApplication _deactivateForReason:notify:] + 1540
+13 UIKitCore 0x00000001b6ebac0c -[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:] + 260
+14 UIKitCore 0x00000001b6ebb004 -[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] + 740
+15 UIKitCore 0x00000001b6eba8c0 -[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:] + 336
+16 UIKitCore 0x00000001b6ec2460 __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke + 188
+17 UIKitCore 0x00000001b72f73a8 +[BSAnimationSettings+ 6554536 (UIKit) tryAnimatingWithSettings:actions:completion:] + 812
+18 UIKitCore 0x00000001b73f5458 _UISceneSettingsDiffActionPerformChangesWithTransitionContext + 244
+19 UIKitCore 0x00000001b6ec21f8 -[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:] + 348
+20 UIKitCore 0x00000001b6d04390 __64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke + 772
+21 UIKitCore 0x00000001b6d02e30 -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] + 248
+22 UIKitCore 0x00000001b6d03fdc -[UIScene scene:didUpdateWithDiff:transitionContext:completion:] + 220
+23 UIKitCore 0x00000001b731e08c -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] + 464
+24 FrontBoardServices 0x00000001c384d4a0 -[FBSScene updater:didUpdateSettings:withDiff:transitionContext:completion:] + 456
+25 FrontBoardServices 0x00000001c3875cdc __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke_2 + 124
+26 FrontBoardServices 0x00000001c385a400 -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 232
+27 FrontBoardServices 0x00000001c3875c28 __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke + 368
+28 libdispatch.dylib 0x00000001b4bcf280 _dispatch_client_callout + 16
+29 libdispatch.dylib 0x00000001b4b74b0c _dispatch_block_invoke_direct$VARIANT$mp + 224
+30 FrontBoardServices 0x00000001c38994a8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 40
+31 FrontBoardServices 0x00000001c3899170 -[FBSSerialQueue _targetQueue_performNextIfPossible] + 404
+32 FrontBoardServices 0x00000001c3899644 -[FBSSerialQueue _performNextFromRunLoopSource] + 28
+33 CoreFoundation 0x00000001b4f16240 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
+34 CoreFoundation 0x00000001b4f16140 __CFRunLoopDoSource0 + 204
+35 CoreFoundation 0x00000001b4f15488 __CFRunLoopDoSources0 + 256
+36 CoreFoundation 0x00000001b4f0fa40 __CFRunLoopRun + 776
+37 CoreFoundation 0x00000001b4f0f200 CFRunLoopRunSpecific + 572
+38 GraphicsServices 0x00000001cb08c598 GSEventRunModal + 160
+39 UIKitCore 0x00000001b77d8bcc -[UIApplication _run] + 1052
+40 UIKitCore 0x00000001b77de1a0 UIApplicationMain + 164
+41 Runner 0x0000000100d5de84 main + 24196 (AppDelegate.swift:5)
+42 libdyld.dylib 0x00000001b4bee588 start + 4
+
diff --git a/github-label-notifier/symbolizer/test/symbolizer_test.dart b/github-label-notifier/symbolizer/test/symbolizer_test.dart
new file mode 100644
index 0000000..dc6f08b
--- /dev/null
+++ b/github-label-notifier/symbolizer/test/symbolizer_test.dart
@@ -0,0 +1,254 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:github/github.dart';
+import 'package:mockito/mockito.dart';
+import 'package:path/path.dart' as p;
+import 'package:symbolizer/bot.dart';
+import 'package:symbolizer/config.dart';
+import 'package:symbolizer/model.dart';
+import 'package:symbolizer/ndk.dart';
+import 'package:symbolizer/symbols.dart';
+import 'package:test/test.dart';
+
+import 'package:symbolizer/symbolizer.dart';
+
+class MockSymbolsCache extends Mock implements SymbolsCache {}
+
+class MockGitHub extends Mock implements GitHub {}
+
+class MockNdk extends Mock implements Ndk {}
+
+class MockRepositoriesService extends Mock implements RepositoriesService {}
+
+class MockRepositoryCommit extends Mock implements RepositoryCommit {}
+
+final regenerateExpectations =
+ bool.fromEnvironment('REGENERATE_EXPECTATIONS') ||
+ Platform.environment['REGENERATE_EXPECTATIONS'] == 'true';
+
+final config = loadConfigFromFile();
+
+void main() {
+ group('end-to-end', () {
+ Symbolizer symbolizer;
+ final files = Directory('test/data').listSync();
+
+ setUpAll(() {
+ final ndk = Ndk();
+ final symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
+ final github = GitHub(auth: Authentication.withToken(config.githubToken));
+ symbolizer = Symbolizer(symbols: symbols, ndk: ndk, github: github);
+ });
+
+ for (var inputFile in files
+ .where((f) => p.basename(f.path).endsWith('.input.txt'))
+ .cast<File>()) {
+ final testName = p.basename(inputFile.path).split('.').first;
+ final expectationFile = File('test/data/$testName.expected.txt');
+ test(testName, () async {
+ final input = await inputFile.readAsString();
+ final overrides = Bot.parseCommand(0, input)?.overrides;
+ final result = await symbolizer.symbolize(input, overrides: overrides);
+ final roundTrip = (jsonDecode(jsonEncode(result)) as List)
+ .cast<Map<String, dynamic>>()
+ .map($SymbolizationResult.fromJson);
+ expect(result, equals(roundTrip));
+ if (regenerateExpectations) {
+ await expectationFile.writeAsString(
+ const JsonEncoder.withIndent(' ').convert(result));
+ } else {
+ final expected =
+ (jsonDecode(await expectationFile.readAsString()) as List)
+ .map((e) => SymbolizationResult.fromJson(e))
+ .toList();
+
+ expect(result, equals(expected));
+ }
+ });
+ }
+
+ tearDownAll(() {
+ symbolizer.github.dispose();
+ });
+ });
+
+ test('nothing to symbolize', () async {
+ final symbols = MockSymbolsCache();
+ final ndk = MockNdk();
+ final github = MockGitHub();
+ final symbolizer = Symbolizer(github: github, ndk: ndk, symbols: symbols);
+
+ expect(
+ await symbolizer
+ .symbolize('''This is test which does not contain anything'''),
+ isEmpty);
+ });
+
+ group('android crash', () {
+ test('no engine hash', () async {
+ final symbols = MockSymbolsCache();
+ final ndk = MockNdk();
+ final github = MockGitHub();
+ final symbolizer = Symbolizer(github: github, ndk: ndk, symbols: symbols);
+
+ final results = await symbolizer.symbolize('''
+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+backtrace:
+ #00 pc 0000000000111111 libflutter.so (BuildId: aaaabbbbccccddddaaaabbbbccccdddd)
+ #01 pc 0000000000222222 else-else
+''');
+ expect(results.length, equals(1));
+ expect(results.first.crash.engineVariant,
+ equals(EngineVariant(os: 'android', arch: null, mode: null)));
+ expect(results.first.notes.map((note) => note.kind),
+ equals([SymbolizationNoteKind.unknownEngineHash]));
+ });
+
+ test('no abi', () async {
+ final symbols = MockSymbolsCache();
+ final ndk = MockNdk();
+ final github = MockGitHub();
+ final symbolizer = Symbolizer(github: github, ndk: ndk, symbols: symbols);
+
+ final repositories = MockRepositoriesService();
+ final commit = MockRepositoryCommit();
+
+ when(commit.sha).thenReturn('abcdef123456');
+ when(repositories.getCommit(
+ RepositorySlug('flutter', 'engine'), 'abcdef'))
+ .thenAnswer((_) async => commit);
+ when(github.repositories).thenReturn(repositories);
+
+ final results = await symbolizer.symbolize('''
+• Engine revision abcdef
+
+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+backtrace:
+ #00 pc 0000000000111111 libflutter.so (BuildId: aaaabbbbccccddddaaaabbbbccccdddd)
+ #01 pc 0000000000222222 else-else
+''');
+ expect(results.length, equals(1));
+ expect(results.first.crash.engineVariant,
+ equals(EngineVariant(os: 'android', arch: null, mode: null)));
+ expect(results.first.notes.map((note) => note.kind),
+ equals([SymbolizationNoteKind.unknownAbi]));
+ });
+
+ test('illegal abi', () async {
+ final symbols = MockSymbolsCache();
+ final ndk = MockNdk();
+ final github = MockGitHub();
+ final symbolizer = Symbolizer(github: github, ndk: ndk, symbols: symbols);
+
+ final repositories = MockRepositoriesService();
+ final commit = MockRepositoryCommit();
+
+ when(commit.sha).thenReturn('abcdef123456');
+ when(repositories.getCommit(
+ RepositorySlug('flutter', 'engine'), 'abcdef'))
+ .thenAnswer((_) async => commit);
+ when(github.repositories).thenReturn(repositories);
+
+ final results = await symbolizer.symbolize('''
+• Engine revision abcdef
+
+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+ABI: 'something'
+backtrace:
+ #00 pc 0000000000111111 libflutter.so (BuildId: aaaabbbbccccddddaaaabbbbccccdddd)
+ #01 pc 0000000000222222 else-else
+''');
+ expect(results.length, equals(1));
+ expect(results.first.crash.engineVariant,
+ equals(EngineVariant(os: 'android', arch: null, mode: null)));
+ expect(results.first.notes.map((note) => note.kind),
+ equals([SymbolizationNoteKind.unknownAbi]));
+ });
+
+ test('symbolize', () async {
+ final symbols = MockSymbolsCache();
+ final ndk = MockNdk();
+ final github = MockGitHub();
+ final symbolizer = Symbolizer(github: github, ndk: ndk, symbols: symbols);
+
+ final repositories = MockRepositoriesService();
+ final commit = MockRepositoryCommit();
+
+ when(commit.sha).thenReturn('abcdef123456');
+ when(repositories.getCommit(
+ RepositorySlug('flutter', 'engine'), 'abcdef'))
+ .thenAnswer((_) async => commit);
+ when(github.repositories).thenReturn(repositories);
+
+ final releaseBuild = EngineBuild(
+ engineHash: 'abcdef123456',
+ variant:
+ EngineVariant(os: 'android', arch: 'arm64', mode: 'release'));
+
+ when(symbols.findVariantByBuildId(
+ engineHash: 'abcdef123456',
+ variant: EngineVariant(os: 'android', arch: 'arm64', mode: null),
+ buildId: 'aaaabbbbccccddddaaaabbbbccccdddd'))
+ .thenAnswer((x) async {
+ return releaseBuild;
+ });
+
+ when(symbols.get(releaseBuild)).thenAnswer(
+ (_) async => '/engines/abcdef123456/android-arm64-release');
+
+ when(ndk.getBuildId(
+ '/engines/abcdef123456/android-arm64-release/libflutter.so'))
+ .thenAnswer((_) async => 'aaaabbbbccccddddaaaabbbbccccdddd');
+
+ when(ndk.getTextSectionInfo(
+ '/engines/abcdef123456/android-arm64-release/libflutter.so'))
+ .thenAnswer((_) async => SectionInfo(
+ fileOffset: 0x12340, fileSize: 0x2000, virtualAddress: 0x13340));
+
+ final backtrace = '''
+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
+ABI: 'arm64'
+backtrace:
+ #00 pc 0000000000111111 libflutter.so (BuildId: aaaabbbbccccddddaaaabbbbccccdddd)
+ #01 pc 0000000000222222 else-else''';
+
+ when(ndk.symbolize(
+ object: '/engines/abcdef123456/android-arm64-release/libflutter.so',
+ arch: 'arm64',
+ addresses: [
+ '0x124111' // Adjusted by load bias.
+ ])).thenAnswer(
+ (_) async => ['some-function\nthird_party/something/else.cc']);
+
+ final results = await symbolizer.symbolize('''
+• Engine revision abcdef
+
+$backtrace
+''');
+
+ expect(results.length, equals(1));
+ expect(results.first.crash.engineVariant,
+ equals(EngineVariant(os: 'android', arch: 'arm64', mode: null)));
+ expect(
+ results.first.crash.frames.first,
+ equals(AndroidCrashFrame(
+ no: '00',
+ pc: 0x111111,
+ binary: 'libflutter.so',
+ rest: ' (BuildId: aaaabbbbccccddddaaaabbbbccccdddd)',
+ buildId: 'aaaabbbbccccddddaaaabbbbccccdddd')));
+ expect(results.first.engineBuild, equals(releaseBuild));
+ expect(results.first.notes, isEmpty);
+ expect(results.first.symbolized.trim(), equals('''
+#00 0000000000111111 libflutter.so (BuildId: aaaabbbbccccddddaaaabbbbccccdddd)
+ some-function
+ third_party/something/else.cc
+#01 0000000000222222 else-else'''));
+ });
+ });
+}