diff --git a/src/sentry/api/bases/chunk.py b/src/sentry/api/bases/chunk.py new file mode 100644 index 00000000000000..e75db30411e38a --- /dev/null +++ b/src/sentry/api/bases/chunk.py @@ -0,0 +1,104 @@ +from __future__ import absolute_import + +from sentry.models import File, FileBlob, FileBlobOwner +from sentry.models.file import ChunkFileState + + +class ChunkAssembleMixin(object): + def _create_file_response(self, state, missing_chunks=[]): + """ + Helper function to create response for assemble endpoint + """ + return { + 'state': state, + 'missingChunks': missing_chunks + } + + def _check_chunk_ownership(self, organization, file_blobs, chunks, file_exists): + # Check the ownership of these blobs with the org + all_owned_blobs = FileBlobOwner.objects.filter( + blob__in=file_blobs, + organization=organization + ).prefetch_related('blob').all() + + owned_blobs = [] + for owned_blob in all_owned_blobs: + owned_blobs.append((owned_blob.blob.id, owned_blob.blob.checksum)) + + # If the request does not contain any chunks for a file + # we return nothing since this should never happen only + # if the client sends an invalid request + if len(chunks) == 0: + return self._create_file_response( + ChunkFileState.NOT_FOUND + ) + # Only if this org already has the ownership of all blobs + # and the count of chunks is the same as in the request + # and the file already exists, we say this file is OK + elif len(file_blobs) == len(owned_blobs) == len(chunks) and file_exists: + return self._create_file_response( + ChunkFileState.OK + ) + # If the length of owned and sent chunks is not the same + # we return all missing blobs + elif len(owned_blobs) != len(chunks): + # Create a missing chunks array which we return as response + # so the client knows which chunks to reupload + missing_chunks = set(chunks) + for blob in owned_blobs: + if blob[1] in missing_chunks: + missing_chunks.discard(blob[1]) + # If we have any missing chunks at all, return it to the client + # that we need them to assemble the file + if len(missing_chunks) > 0: + return self._create_file_response( + ChunkFileState.NOT_FOUND, + missing_chunks + ) + + def _check_file_blobs(self, organization, checksum, chunks): + files = File.objects.filter( + checksum=checksum + ).prefetch_related('blobs').all() + # If there is no file at all, we try to find chunks in the db and check + # their ownership + if len(files) == 0: + file_blobs = FileBlob.objects.filter( + checksum__in=chunks + ).all() + return self._check_chunk_ownership(organization, file_blobs, chunks, False) + # It is possible to have multiple files in the db because + # we do not have a unique on the checksum + for file in files: + # We need to fetch all blobs + file_blobs = file.blobs.all() + rv = self._check_chunk_ownership(organization, file_blobs, chunks, True) + if rv is not None: + return rv + + def _create_file_for_assembling(self, name, checksum, chunks): + # If we have all chunks and the file wasn't found before + # we create a new file here with the state CREATED + # Note that this file only exsists while the assemble tasks run + file = File.objects.create( + name=name, + checksum=checksum, + type='chunked', + headers={'__state': ChunkFileState.CREATED} + ) + + # Load all FileBlobs from db since we can be sure here we already own all + # chunks need to build the file + file_blobs = FileBlob.objects.filter( + checksum__in=chunks + ).values_list('id', 'checksum') + + # We need to make sure the blobs are in the order in which + # we received them from the request. + # Otherwise it could happen that we assemble the file in the wrong order + # and get an garbage file. + file_blob_ids = [x[0] for x in sorted( + file_blobs, key=lambda blob: chunks.index(blob[1]) + )] + + return (file, file_blob_ids) diff --git a/src/sentry/api/endpoints/chunk.py b/src/sentry/api/endpoints/chunk.py new file mode 100644 index 00000000000000..14e614b2ccfab1 --- /dev/null +++ b/src/sentry/api/endpoints/chunk.py @@ -0,0 +1,101 @@ +from __future__ import absolute_import + +from itertools import izip +from rest_framework import status +from six.moves.urllib.parse import urljoin +from rest_framework.response import Response +from django.core.urlresolvers import reverse +from django.db import IntegrityError, transaction + +from sentry import options +from sentry.models import FileBlob, FileBlobOwner +from sentry.models.file import DEFAULT_BLOB_SIZE +from sentry.api.bases.organization import (OrganizationEndpoint, + OrganizationReleasePermission) + + +MAX_CHUNKS_PER_REQUEST = 64 +MAX_REQUEST_SIZE = 32 * 1024 * 1024 +MAX_CONCURRENCY = 4 +HASH_ALGORITHM = 'sha1' + + +class ChunkUploadEndpoint(OrganizationEndpoint): + permission_classes = (OrganizationReleasePermission, ) + + def get(self, request, organization): + """ + Return chunk upload parameters + `````````````````````````````` + :auth: required + """ + endpoint = options.get('system.upload-url-prefix') + # We fallback to default system url if config is not set + if len(endpoint) == 0: + endpoint = options.get('system.url-prefix') + + url = reverse('sentry-api-0-chunk-upload', args=[organization.slug]) + endpoint = urljoin(endpoint.rstrip('/') + '/', url.lstrip('/')) + + return Response( + { + 'url': endpoint, + 'chunkSize': DEFAULT_BLOB_SIZE, + 'chunksPerRequest': MAX_CHUNKS_PER_REQUEST, + 'maxRequestSize': MAX_REQUEST_SIZE, + 'concurrency': MAX_CONCURRENCY, + 'hashAlgorithm': HASH_ALGORITHM, + } + ) + + def post(self, request, organization): + """ + Upload chunks and store them as FileBlobs + ````````````````````````````````````````` + :pparam file file: The filename should be sha1 hash of the content. + Also not you can add up to MAX_CHUNKS_PER_REQUEST files + in this request. + + :auth: required + """ + files = request.FILES.getlist('file') + if len(files) == 0: + # No files uploaded is ok + return Response(status=status.HTTP_200_OK) + + # Validate file size + checksums = [] + size = 0 + for chunk in files: + size += chunk._size + if chunk._size > DEFAULT_BLOB_SIZE: + return Response({'error': 'Chunk size too large'}, + status=status.HTTP_400_BAD_REQUEST) + checksums.append(chunk._name) + + if size > MAX_REQUEST_SIZE: + return Response({'error': 'Request too large'}, + status=status.HTTP_400_BAD_REQUEST) + + if len(files) > MAX_CHUNKS_PER_REQUEST: + return Response({'error': 'Too many chunks'}, + status=status.HTTP_400_BAD_REQUEST) + + for checksum, chunk in izip(checksums, files): + # Here we create the actual blob + blob = FileBlob.from_file(chunk) + # Add ownership to the blob here + try: + with transaction.atomic(): + FileBlobOwner.objects.create( + organization=organization, + blob=blob + ) + except IntegrityError: + pass + if blob.checksum != checksum: + # We do not clean up here since we have a cleanup job + return Response({'error': 'Checksum missmatch'}, + status=status.HTTP_400_BAD_REQUEST) + + return Response(status=status.HTTP_200_OK) diff --git a/src/sentry/api/endpoints/chunk_upload.py b/src/sentry/api/endpoints/chunk_upload.py deleted file mode 100644 index 895c5bfd5f8888..00000000000000 --- a/src/sentry/api/endpoints/chunk_upload.py +++ /dev/null @@ -1,64 +0,0 @@ -from __future__ import absolute_import - -# from rest_framework.permissions import IsAuthenticated -from rest_framework import status -from rest_framework.response import Response - -from sentry import options -from sentry.models import FileBlob -from sentry.models.file import DEFAULT_BLOB_SIZE -from sentry.api.base import Endpoint -from sentry.api.bases.project import ProjectReleasePermission - - -MAX_CHUNKS_PER_REQUEST = 16 -MAX_CONCURRENCY = 4 -HASH_ALGORITHM = 'sha1' - - -class ChunkUploadEndpoint(Endpoint): - permission_classes = (ProjectReleasePermission, ) - - def get(self, request): - endpoint = options.get('system.upload-url-prefix') - # We fallback to default system url if config is not set - if len(endpoint) == 0: - endpoint = options.get('system.url-prefix') - - return Response( - { - 'url': endpoint, - 'chunkSize': DEFAULT_BLOB_SIZE, - 'chunksPerRequest': MAX_CHUNKS_PER_REQUEST, - 'concurrency': MAX_CONCURRENCY, - 'hashAlgorithm': HASH_ALGORITHM, - } - ) - - def post(self, request): - files = request.FILES.getlist('file') - - if len(files) > MAX_CHUNKS_PER_REQUEST: - return Response({'error': 'Too many chunks'}, - status=status.HTTP_400_BAD_REQUEST) - elif len(files) == 0: - # No files uploaded is ok - return Response(status=status.HTTP_200_OK) - - # Validate file size - checksum_list = [] - for chunk in files: - if chunk._size > DEFAULT_BLOB_SIZE: - return Response({'error': 'Chunk size too large'}, - status=status.HTTP_400_BAD_REQUEST) - checksum_list.append(chunk._name) - - for chunk in files: - # Here we create the actual file - blob = FileBlob.from_file(chunk) - if blob.checksum not in checksum_list: - # We do not clean up here since we have a cleanup job - return Response({'error': 'Checksum missmatch'}, - status=status.HTTP_400_BAD_REQUEST) - - return Response(status=status.HTTP_200_OK) diff --git a/src/sentry/api/endpoints/dif_files.py b/src/sentry/api/endpoints/dif_files.py new file mode 100644 index 00000000000000..b68f18320f6118 --- /dev/null +++ b/src/sentry/api/endpoints/dif_files.py @@ -0,0 +1,89 @@ +from __future__ import absolute_import + +import six +import jsonschema + +from rest_framework.response import Response + +from sentry.utils import json +from sentry.api.bases.chunk import ChunkAssembleMixin +from sentry.api.bases.project import ProjectEndpoint, ProjectReleasePermission +from sentry.models import File, ChunkFileState + + +class DifAssembleEndpoint(ChunkAssembleMixin, ProjectEndpoint): + permission_classes = (ProjectReleasePermission, ) + + def post(self, request, project): + """ + Assmble one or multiple chunks (FileBlob) into dsym files + ````````````````````````````````````````````````````````` + + :auth: required + """ + schema = { + "type": "object", + "patternProperties": { + "^[0-9a-f]{40}$": { + "type": "object", + "required": ["name", "chunks"], + "properties": { + "name": {"type": "string"}, + "chunks": { + "type": "array", + "items": {"type": "string"} + } + }, + "additionalProperties": False + } + }, + "additionalProperties": False + } + + try: + files = json.loads(request.body) + jsonschema.validate(files, schema) + except jsonschema.ValidationError as e: + return Response({'error': str(e).splitlines()[0]}, + status=400) + except BaseException as e: + return Response({'error': 'Invalid json body'}, + status=400) + + file_response = {} + + from sentry.tasks.assemble import assemble_dif + for checksum, file_to_assemble in six.iteritems(files): + name = file_to_assemble.get('name', None) + chunks = file_to_assemble.get('chunks', []) + + try: + result = self._check_file_blobs(project.organization, checksum, chunks) + # This either returns a file OK because we already own all chunks + # OR we return not_found with the missing chunks (or not owned) + if result is not None: + file_response[checksum] = result + continue + except File.MultipleObjectsReturned: + return Response({'error': 'Duplicate checksum'}, + status=400) + except File.DoesNotExist: + pass + + file, file_blob_ids = self._create_file_for_assembling(name, checksum, chunks) + + # Start the actual worker which does the assembling. + assemble_dif.apply_async( + kwargs={ + 'project_id': project.id, + 'file_id': file.id, + 'file_blob_ids': file_blob_ids, + 'checksum': checksum, + } + ) + + file_response[checksum] = self._create_file_response( + ChunkFileState.CREATED + ) + + return Response(file_response, status=200) diff --git a/src/sentry/api/endpoints/dsym_files.py b/src/sentry/api/endpoints/dsym_files.py index d4d96893b5348b..5d357d32fb1a87 100644 --- a/src/sentry/api/endpoints/dsym_files.py +++ b/src/sentry/api/endpoints/dsym_files.py @@ -1,4 +1,5 @@ from __future__ import absolute_import + import logging import posixpath @@ -6,6 +7,7 @@ from rest_framework import serializers from sentry import ratelimits + from sentry.api.base import DocSection from sentry.api.bases.project import ProjectEndpoint, ProjectReleasePermission from sentry.api.content_negotiation import ConditionalContentNegotiation diff --git a/src/sentry/api/urls.py b/src/sentry/api/urls.py index 163269473ff0d9..277a2326a0f4ab 100644 --- a/src/sentry/api/urls.py +++ b/src/sentry/api/urls.py @@ -10,7 +10,7 @@ from .endpoints.authenticator_index import AuthenticatorIndexEndpoint from .endpoints.broadcast_index import BroadcastIndexEndpoint from .endpoints.catchall import CatchallEndpoint -from .endpoints.chunk_upload import ChunkUploadEndpoint +from .endpoints.chunk import ChunkUploadEndpoint from .endpoints.event_details import EventDetailsEndpoint from .endpoints.event_apple_crash_report import EventAppleCrashReportEndpoint from .endpoints.group_details import GroupDetailsEndpoint @@ -122,6 +122,7 @@ from .endpoints.release_deploys import ReleaseDeploysEndpoint from .endpoints.dsym_files import DSymFilesEndpoint, \ UnknownDSymFilesEndpoint, AssociateDSymFilesEndpoint +from .endpoints.dif_files import DifAssembleEndpoint from .endpoints.shared_group_details import SharedGroupDetailsEndpoint from .endpoints.system_health import SystemHealthEndpoint from .endpoints.system_options import SystemOptionsEndpoint @@ -185,12 +186,6 @@ url(r'^broadcasts/$', BroadcastIndexEndpoint.as_view(), name='sentry-api-0-broadcast-index'), - # Chunk upload - url(r'^chunk-upload/$', - ChunkUploadEndpoint.as_view(), - name='sentry-api-0-chunk-upload' - ), - # Users url(r'^users/$', UserIndexEndpoint.as_view(), name='sentry-api-0-user-index'), url( @@ -248,6 +243,12 @@ ), # Organizations + + url( + r'^organizations/(?P[^\/]+)/chunk-upload/$', + ChunkUploadEndpoint.as_view(), + name='sentry-api-0-chunk-upload' + ), url( r'^organizations/$', OrganizationIndexEndpoint.as_view(), name='sentry-api-0-organizations' ), @@ -535,6 +536,11 @@ DSymFilesEndpoint.as_view(), name='sentry-api-0-dsym-files' ), + url( + r'^projects/(?P[^\/]+)/(?P[^\/]+)/files/difs/assemble/$', + DifAssembleEndpoint.as_view(), + name='sentry-api-0-assemble-dif-files' + ), url( r'^projects/(?P[^\/]+)/(?P[^\/]+)/files/dsyms/unknown/$', UnknownDSymFilesEndpoint.as_view(), diff --git a/src/sentry/conf/server.py b/src/sentry/conf/server.py index 482d46db2dee0f..1fffcbbce9c96b 100644 --- a/src/sentry/conf/server.py +++ b/src/sentry/conf/server.py @@ -434,11 +434,12 @@ def SOCIAL_AUTH_DEFAULT_USERNAME(): 'sentry.tasks.process_buffer', 'sentry.tasks.reports', 'sentry.tasks.reprocessing', 'sentry.tasks.scheduler', 'sentry.tasks.signals', 'sentry.tasks.store', 'sentry.tasks.unmerge', 'sentry.tasks.symcache_update', 'sentry.tasks.servicehooks', - 'sentry.tagstore.tasks', + 'sentry.tagstore.tasks', 'sentry.tasks.assemble' ) CELERY_QUEUES = [ Queue('alerts', routing_key='alerts'), Queue('auth', routing_key='auth'), + Queue('assemble', routing_key='assemble'), Queue('commits', routing_key='commits'), Queue('cleanup', routing_key='cleanup'), Queue('default', routing_key='default'), diff --git a/src/sentry/models/dsymfile.py b/src/sentry/models/dsymfile.py index cd8294b5d88d0a..c84ecc4d33392a 100644 --- a/src/sentry/models/dsymfile.py +++ b/src/sentry/models/dsymfile.py @@ -304,6 +304,52 @@ def _analyze_progard_filename(filename): pass +def detect_dif_from_filename(filename): + """This detects which kind of dif (Debug Information File) the filename + provided is. It returns an array since a FatObject can contain more than + on dif. + """ + # proguard files (proguard/UUID.txt) or + # (proguard/mapping-UUID.txt). + proguard_uuid = _analyze_progard_filename(filename) + if proguard_uuid is not None: + return [('proguard', 'any', six.text_type(proguard_uuid), filename)] + + # macho style debug symbols + try: + fo = FatObject.from_path(filename) + except UnsupportedObjectFile: + pass + except SymbolicError: + # Whatever was contained there, was probably not a + # macho file. + # XXX: log? + logger.warning('dsymfile.bad-fat-object', exc_info=True) + else: + objs = [] + for obj in fo.iter_objects(): + objs.append((obj.kind, obj.arch, six.text_type(obj.uuid), filename)) + return objs + + +def create_dsym_from_dif(to_create, project, overwrite_filename=None): + """Create a ProjectDSymFile from a dif (Debug Information File) and + return an array of created objects. + """ + rv = [] + for dsym_type, cpu, file_uuid, filename in to_create: + with open(filename, 'rb') as f: + result_filename = os.path.basename(filename) + if overwrite_filename is not None: + result_filename = overwrite_filename + dsym, created = _create_dsym_from_uuid( + project, dsym_type, cpu, file_uuid, f, result_filename + ) + if created: + rv.append(dsym) + return rv + + def create_files_from_dsym_zip(fileobj, project, update_symcaches=True): """Creates all missing dsym files from the given zip file. This @@ -317,38 +363,12 @@ def create_files_from_dsym_zip(fileobj, project, for dirpath, dirnames, filenames in os.walk(scratchpad): for fn in filenames: fn = os.path.join(dirpath, fn) + difs = detect_dif_from_filename(fn) + if difs is None: + difs = [] + to_create = to_create + difs - # proguard files (proguard/UUID.txt) or - # (proguard/mapping-UUID.txt). - proguard_uuid = _analyze_progard_filename(fn) - if proguard_uuid is not None: - to_create.append(('proguard', 'any', six.text_type(proguard_uuid), fn, )) - continue - - # macho style debug symbols - try: - fo = FatObject.from_path(fn) - except UnsupportedObjectFile: - pass - except SymbolicError: - # Whatever was contained there, was probably not a - # macho file. - # XXX: log? - logger.warning('dsymfile.bad-fat-object', exc_info=True) - else: - for obj in fo.iter_objects(): - to_create.append((obj.kind, obj.arch, - six.text_type(obj.uuid), fn)) - continue - - rv = [] - for dsym_type, cpu, file_uuid, filename in to_create: - with open(filename, 'rb') as f: - dsym, created = _create_dsym_from_uuid( - project, dsym_type, cpu, file_uuid, f, os.path.basename(filename) - ) - if created: - rv.append(dsym) + rv = create_dsym_from_dif(to_create, project) # By default we trigger the symcache generation on upload to avoid # some obvious dogpiling. diff --git a/src/sentry/models/file.py b/src/sentry/models/file.py index c433c0ce79616c..2e1dd2e9da05a5 100644 --- a/src/sentry/models/file.py +++ b/src/sentry/models/file.py @@ -35,6 +35,19 @@ DEFAULT_BLOB_SIZE = 1024 * 1024 # one mb +def enum(**named_values): + return type('Enum', (), named_values) + + +ChunkFileState = enum( + OK='ok', # File in database + NOT_FOUND='not_found', # File not found in database + CREATED='created', # File was created in the request and send to the worker for assembling + ASSEMBLING='assembling', # File still being processed by worker + ERROR='error' # Error happened during assembling +) + + def get_storage(): from sentry import options backend = options.get('filestore.backend') @@ -151,7 +164,7 @@ class File(Model): headers = JSONField() blobs = models.ManyToManyField('sentry.FileBlob', through='sentry.FileBlobIndex') size = BoundedPositiveIntegerField(null=True) - checksum = models.CharField(max_length=40, null=True) + checksum = models.CharField(max_length=40, null=True, db_index=True) # # Remove in 8.1 @@ -254,6 +267,37 @@ def putfile(self, fileobj, blob_size=DEFAULT_BLOB_SIZE, commit=True): self.save() return results + def assemble_from_file_blob_ids(self, file_blob_ids, checksum, commit=True): + """ + This creates a file, from file blobs + """ + file_blobs = FileBlob.objects.filter(id__in=file_blob_ids).all() + # Make sure the blobs are sorted with the order provided + file_blobs = sorted(file_blobs, key=lambda blob: file_blob_ids.index(blob.id)) + + new_checksum = sha1(b'') + offset = 0 + for blob in file_blobs: + FileBlobIndex.objects.create( + file=self, + blob=blob, + offset=offset, + ) + for chunk in blob.getfile().chunks(): + new_checksum.update(chunk) + offset += blob.size + + self.size = offset + self.checksum = new_checksum.hexdigest() + + if checksum != self.checksum: + self.headers['__state'] = ChunkFileState.ERROR + self.headers['error'] = 'invalid_checksum' + + metrics.timing('filestore.file-size', offset) + if commit: + self.save() + class FileBlobIndex(Model): __core__ = False @@ -416,3 +460,15 @@ def read(self, n=-1): result.extend(blob_result) return bytes(result) + + +class FileBlobOwner(Model): + __core__ = False + + blob = FlexibleForeignKey('sentry.FileBlob') + organization = FlexibleForeignKey('sentry.Organization') + + class Meta: + app_label = 'sentry' + db_table = 'sentry_fileblobowner' + unique_together = (('blob', 'organization'), ) diff --git a/src/sentry/south_migrations/0391_auto__add_fileblobowner__add_unique_fileblobowner_blob_organization__a.py b/src/sentry/south_migrations/0391_auto__add_fileblobowner__add_unique_fileblobowner_blob_organization__a.py new file mode 100644 index 00000000000000..f3c416c469482d --- /dev/null +++ b/src/sentry/south_migrations/0391_auto__add_fileblobowner__add_unique_fileblobowner_blob_organization__a.py @@ -0,0 +1,1094 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +from sentry.utils.db import is_postgres + + +class Migration(SchemaMigration): + + # Flag to indicate if this migration is too risky + # to run online and needs to be coordinated for offline + is_dangerous = True + + def forwards(self, orm): + # Adding model 'FileBlobOwner' + db.create_table('sentry_fileblobowner', ( + ('id', self.gf('sentry.db.models.fields.bounded.BoundedBigAutoField')(primary_key=True)), + ('blob', self.gf('sentry.db.models.fields.foreignkey.FlexibleForeignKey')( + to=orm['sentry.FileBlob'])), + ('organization', self.gf('sentry.db.models.fields.foreignkey.FlexibleForeignKey')( + to=orm['sentry.Organization'])), + )) + db.send_create_signal('sentry', ['FileBlobOwner']) + + # Adding unique constraint on 'FileBlobOwner', fields ['blob', 'organization'] + db.create_unique('sentry_fileblobowner', ['blob_id', 'organization_id']) + + # Adding index on 'File', fields ['checksum'] + if is_postgres(): + db.commit_transaction() + db.execute( + "CREATE INDEX CONCURRENTLY {} ON sentry_file (checksum)".format( + db.create_index_name('sentry_file', ['checksum']), + ) + ) + db.start_transaction() + else: + db.create_index('sentry_file', ['checksum']) + + def backwards(self, orm): + # Removing index on 'File', fields ['checksum'] + db.delete_index('sentry_file', ['checksum']) + + # Removing unique constraint on 'FileBlobOwner', fields ['blob', 'organization'] + db.delete_unique('sentry_fileblobowner', ['blob_id', 'organization_id']) + + # Deleting model 'FileBlobOwner' + db.delete_table('sentry_fileblobowner') + + models = { + 'sentry.activity': { + 'Meta': {'object_name': 'Activity'}, + 'data': ('sentry.db.models.fields.gzippeddict.GzippedDictField', [], {'null': 'True'}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']", 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ident': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'type': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']", 'null': 'True'}) + }, + 'sentry.apiapplication': { + 'Meta': {'object_name': 'ApiApplication'}, + 'allowed_origins': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'client_id': ('django.db.models.fields.CharField', [], {'default': "'9ddd19fefbad48d293ed3bfcbfbbd1fbc91807ef432b40d4a3b7f892be891e2b'", 'unique': 'True', 'max_length': '64'}), + 'client_secret': ('sentry.db.models.fields.encrypted.EncryptedTextField', [], {'default': "'541a0a5030c34d9189af5835e31d337f7ca41d4d7cd4456980939b0c8fa431c6'"}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'homepage_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'default': "'Decent Reptile'", 'max_length': '64', 'blank': 'True'}), + 'owner': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}), + 'privacy_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}), + 'redirect_uris': ('django.db.models.fields.TextField', [], {}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'terms_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}) + }, + 'sentry.apiauthorization': { + 'Meta': {'unique_together': "(('user', 'application'),)", 'object_name': 'ApiAuthorization'}, + 'application': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ApiApplication']", 'null': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'scope_list': ('sentry.db.models.fields.array.ArrayField', [], {'of': ('django.db.models.fields.TextField', [], {})}), + 'scopes': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.apigrant': { + 'Meta': {'object_name': 'ApiGrant'}, + 'application': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ApiApplication']"}), + 'code': ('django.db.models.fields.CharField', [], {'default': "'a41ddfc7e4ca49a39d2b7e3edc26dcaf'", 'max_length': '64', 'db_index': 'True'}), + 'expires_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2018, 2, 8, 0, 0)', 'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'redirect_uri': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'scope_list': ('sentry.db.models.fields.array.ArrayField', [], {'of': ('django.db.models.fields.TextField', [], {})}), + 'scopes': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.apikey': { + 'Meta': {'object_name': 'ApiKey'}, + 'allowed_origins': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}), + 'label': ('django.db.models.fields.CharField', [], {'default': "'Default'", 'max_length': '64', 'blank': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'key_set'", 'to': "orm['sentry.Organization']"}), + 'scope_list': ('sentry.db.models.fields.array.ArrayField', [], {'of': ('django.db.models.fields.TextField', [], {})}), + 'scopes': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}) + }, + 'sentry.apitoken': { + 'Meta': {'object_name': 'ApiToken'}, + 'application': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ApiApplication']", 'null': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'expires_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2018, 3, 10, 0, 0)', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'refresh_token': ('django.db.models.fields.CharField', [], {'default': "'9aa58a678f2443cfbdf847b07476929e88cab44495c745c2be726c0b1c222d4a'", 'max_length': '64', 'unique': 'True', 'null': 'True'}), + 'scope_list': ('sentry.db.models.fields.array.ArrayField', [], {'of': ('django.db.models.fields.TextField', [], {})}), + 'scopes': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'token': ('django.db.models.fields.CharField', [], {'default': "'31c24068607b4543a3d128daa6812c33f9b51f33967841bcb20169b7c3b07f5b'", 'unique': 'True', 'max_length': '64'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.auditlogentry': { + 'Meta': {'object_name': 'AuditLogEntry'}, + 'actor': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'blank': 'True', 'related_name': "'audit_actors'", 'null': 'True', 'to': "orm['sentry.User']"}), + 'actor_key': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ApiKey']", 'null': 'True', 'blank': 'True'}), + 'actor_label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}), + 'data': ('sentry.db.models.fields.gzippeddict.GzippedDictField', [], {}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'event': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39', 'null': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'target_object': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'target_user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'blank': 'True', 'related_name': "'audit_targets'", 'null': 'True', 'to': "orm['sentry.User']"}) + }, + 'sentry.authenticator': { + 'Meta': {'unique_together': "(('user', 'type'),)", 'object_name': 'Authenticator', 'db_table': "'auth_authenticator'"}, + 'config': ('sentry.db.models.fields.encrypted.EncryptedPickledObjectField', [], {}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedAutoField', [], {'primary_key': 'True'}), + 'last_used_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'type': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.authidentity': { + 'Meta': {'unique_together': "(('auth_provider', 'ident'), ('auth_provider', 'user'))", 'object_name': 'AuthIdentity'}, + 'auth_provider': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.AuthProvider']"}), + 'data': ('sentry.db.models.fields.encrypted.EncryptedJsonField', [], {'default': '{}'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ident': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'last_synced': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_verified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.authprovider': { + 'Meta': {'object_name': 'AuthProvider'}, + 'config': ('sentry.db.models.fields.encrypted.EncryptedJsonField', [], {'default': '{}'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'default_global_access': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'default_role': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '50'}), + 'default_teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sentry.Team']", 'symmetrical': 'False', 'blank': 'True'}), + 'flags': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_sync': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']", 'unique': 'True'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'sync_time': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}) + }, + 'sentry.broadcast': { + 'Meta': {'object_name': 'Broadcast'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_expires': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2018, 2, 15, 0, 0)', 'null': 'True', 'blank': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'db_index': 'True'}), + 'link': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'message': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'upstream_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) + }, + 'sentry.broadcastseen': { + 'Meta': {'unique_together': "(('broadcast', 'user'),)", 'object_name': 'BroadcastSeen'}, + 'broadcast': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Broadcast']"}), + 'date_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.commit': { + 'Meta': {'unique_together': "(('repository_id', 'key'),)", 'object_name': 'Commit', 'index_together': "(('repository_id', 'date_added'),)"}, + 'author': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.CommitAuthor']", 'null': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'message': ('django.db.models.fields.TextField', [], {'null': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'repository_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}) + }, + 'sentry.commitauthor': { + 'Meta': {'unique_together': "(('organization_id', 'email'), ('organization_id', 'external_id'))", 'object_name': 'CommitAuthor'}, + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}), + 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '164', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}) + }, + 'sentry.commitfilechange': { + 'Meta': {'unique_together': "(('commit', 'filename'),)", 'object_name': 'CommitFileChange'}, + 'commit': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Commit']"}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}) + }, + 'sentry.counter': { + 'Meta': {'object_name': 'Counter', 'db_table': "'sentry_projectcounter'"}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']", 'unique': 'True'}), + 'value': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}) + }, + 'sentry.deletedorganization': { + 'Meta': {'object_name': 'DeletedOrganization'}, + 'actor_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'actor_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'actor_label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'date_deleted': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}) + }, + 'sentry.deletedproject': { + 'Meta': {'object_name': 'DeletedProject'}, + 'actor_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'actor_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'actor_label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'date_deleted': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'organization_slug': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}), + 'platform': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}) + }, + 'sentry.deletedteam': { + 'Meta': {'object_name': 'DeletedTeam'}, + 'actor_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'actor_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'actor_label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'date_deleted': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'organization_slug': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}), + 'reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}) + }, + 'sentry.deploy': { + 'Meta': {'object_name': 'Deploy'}, + 'date_finished': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_started': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'environment_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}), + 'notified': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']"}), + 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + 'sentry.distribution': { + 'Meta': {'unique_together': "(('release', 'name'),)", 'object_name': 'Distribution'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']"}) + }, + 'sentry.dsymapp': { + 'Meta': {'unique_together': "(('project', 'platform', 'app_id'),)", 'object_name': 'DSymApp'}, + 'app_id': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'data': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_synced': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'platform': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'sync_id': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}) + }, + 'sentry.email': { + 'Meta': {'object_name': 'Email'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('sentry.db.models.fields.citext.CIEmailField', [], {'unique': 'True', 'max_length': '75'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}) + }, + 'sentry.environment': { + 'Meta': {'unique_together': "(('project_id', 'name'), ('organization_id', 'name'))", 'object_name': 'Environment'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sentry.Project']", 'through': "orm['sentry.EnvironmentProject']", 'symmetrical': 'False'}) + }, + 'sentry.environmentproject': { + 'Meta': {'unique_together': "(('project', 'environment'),)", 'object_name': 'EnvironmentProject'}, + 'environment': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Environment']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'is_hidden': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}) + }, + 'sentry.event': { + 'Meta': {'unique_together': "(('project_id', 'event_id'),)", 'object_name': 'Event', 'db_table': "'sentry_message'", 'index_together': "(('group_id', 'datetime'),)"}, + 'data': ('sentry.db.models.fields.node.NodeField', [], {'null': 'True', 'blank': 'True'}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'event_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'db_column': "'message_id'"}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {}), + 'platform': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'time_spent': ('sentry.db.models.fields.bounded.BoundedIntegerField', [], {'null': 'True'}) + }, + 'sentry.eventmapping': { + 'Meta': {'unique_together': "(('project_id', 'event_id'),)", 'object_name': 'EventMapping'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'event_id': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}) + }, + 'sentry.eventprocessingissue': { + 'Meta': {'unique_together': "(('raw_event', 'processing_issue'),)", 'object_name': 'EventProcessingIssue'}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'processing_issue': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ProcessingIssue']"}), + 'raw_event': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.RawEvent']"}) + }, + 'sentry.eventtag': { + 'Meta': {'unique_together': "(('event_id', 'key_id', 'value_id'),)", 'object_name': 'EventTag', 'index_together': "(('group_id', 'key_id', 'value_id'),)"}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'event_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}), + 'value_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}) + }, + 'sentry.eventuser': { + 'Meta': {'unique_together': "(('project_id', 'ident'), ('project_id', 'hash'))", 'object_name': 'EventUser', 'index_together': "(('project_id', 'email'), ('project_id', 'username'), ('project_id', 'ip_address'))"}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}), + 'hash': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ident': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}), + 'ip_address': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}) + }, + 'sentry.featureadoption': { + 'Meta': {'unique_together': "(('organization', 'feature_id'),)", 'object_name': 'FeatureAdoption'}, + 'applicable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'complete': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'data': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'date_completed': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'feature_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}) + }, + 'sentry.file': { + 'Meta': {'object_name': 'File'}, + 'blob': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'legacy_blob'", 'null': 'True', 'to': "orm['sentry.FileBlob']"}), + 'blobs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sentry.FileBlob']", 'through': "orm['sentry.FileBlobIndex']", 'symmetrical': 'False'}), + 'checksum': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}), + 'headers': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'path': ('django.db.models.fields.TextField', [], {'null': 'True'}), + 'size': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'sentry.fileblob': { + 'Meta': {'object_name': 'FileBlob'}, + 'checksum': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.TextField', [], {'null': 'True'}), + 'size': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}) + }, + 'sentry.fileblobindex': { + 'Meta': {'unique_together': "(('file', 'blob', 'offset'),)", 'object_name': 'FileBlobIndex'}, + 'blob': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.FileBlob']"}), + 'file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.File']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'offset': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}) + }, + 'sentry.fileblobowner': { + 'Meta': {'unique_together': "(('blob', 'organization'),)", 'object_name': 'FileBlobOwner'}, + 'blob': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.FileBlob']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}) + }, + 'sentry.group': { + 'Meta': {'unique_together': "(('project', 'short_id'),)", 'object_name': 'Group', 'db_table': "'sentry_groupedmessage'", 'index_together': "(('project', 'first_release'),)"}, + 'active_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}), + 'culprit': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'db_column': "'view'", 'blank': 'True'}), + 'data': ('sentry.db.models.fields.gzippeddict.GzippedDictField', [], {'null': 'True', 'blank': 'True'}), + 'first_release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']", 'null': 'True', 'on_delete': 'models.PROTECT'}), + 'first_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'level': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '40', 'db_index': 'True', 'blank': 'True'}), + 'logger': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64', 'db_index': 'True', 'blank': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {}), + 'num_comments': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'null': 'True'}), + 'platform': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']", 'null': 'True'}), + 'resolved_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}), + 'score': ('sentry.db.models.fields.bounded.BoundedIntegerField', [], {'default': '0'}), + 'short_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'time_spent_count': ('sentry.db.models.fields.bounded.BoundedIntegerField', [], {'default': '0'}), + 'time_spent_total': ('sentry.db.models.fields.bounded.BoundedIntegerField', [], {'default': '0'}), + 'times_seen': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'sentry.groupassignee': { + 'Meta': {'object_name': 'GroupAssignee', 'db_table': "'sentry_groupasignee'"}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'assignee_set'", 'unique': 'True', 'to': "orm['sentry.Group']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'assignee_set'", 'to': "orm['sentry.Project']"}), + 'team': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Team']", 'null': 'True'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'sentry_assignee_set'", 'null': 'True', 'to': "orm['sentry.User']"}) + }, + 'sentry.groupbookmark': { + 'Meta': {'unique_together': "(('project', 'user', 'group'),)", 'object_name': 'GroupBookmark'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'bookmark_set'", 'to': "orm['sentry.Group']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'bookmark_set'", 'to': "orm['sentry.Project']"}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'sentry_bookmark_set'", 'to': "orm['sentry.User']"}) + }, + 'sentry.groupcommitresolution': { + 'Meta': {'unique_together': "(('group_id', 'commit_id'),)", 'object_name': 'GroupCommitResolution'}, + 'commit_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}) + }, + 'sentry.groupemailthread': { + 'Meta': {'unique_together': "(('email', 'group'), ('email', 'msgid'))", 'object_name': 'GroupEmailThread'}, + 'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'groupemail_set'", 'to': "orm['sentry.Group']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'msgid': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'groupemail_set'", 'to': "orm['sentry.Project']"}) + }, + 'sentry.groupenvironment': { + 'Meta': {'unique_together': "[('group_id', 'environment_id')]", 'object_name': 'GroupEnvironment', 'index_together': "[('environment_id', 'first_release_id')]"}, + 'environment_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'first_release_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}) + }, + 'sentry.grouphash': { + 'Meta': {'unique_together': "(('project', 'hash'),)", 'object_name': 'GroupHash'}, + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']", 'null': 'True'}), + 'group_tombstone_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True', 'db_index': 'True'}), + 'hash': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']", 'null': 'True'}), + 'state': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}) + }, + 'sentry.grouplink': { + 'Meta': {'unique_together': "(('group_id', 'linked_type', 'linked_id'),)", 'object_name': 'GroupLink'}, + 'data': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'linked_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}), + 'linked_type': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '1'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'db_index': 'True'}), + 'relationship': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '2'}) + }, + 'sentry.groupmeta': { + 'Meta': {'unique_together': "(('group', 'key'),)", 'object_name': 'GroupMeta'}, + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'value': ('django.db.models.fields.TextField', [], {}) + }, + 'sentry.groupredirect': { + 'Meta': {'object_name': 'GroupRedirect'}, + 'group_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'previous_group_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'unique': 'True'}) + }, + 'sentry.grouprelease': { + 'Meta': {'unique_together': "(('group_id', 'release_id', 'environment'),)", 'object_name': 'GroupRelease'}, + 'environment': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'first_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'release_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}) + }, + 'sentry.groupresolution': { + 'Meta': {'object_name': 'GroupResolution'}, + 'actor_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']", 'unique': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']"}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'type': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}) + }, + 'sentry.grouprulestatus': { + 'Meta': {'unique_together': "(('rule', 'group'),)", 'object_name': 'GroupRuleStatus'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_active': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'rule': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Rule']"}), + 'status': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}) + }, + 'sentry.groupseen': { + 'Meta': {'unique_together': "(('user', 'group'),)", 'object_name': 'GroupSeen'}, + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']", 'db_index': 'False'}) + }, + 'sentry.groupshare': { + 'Meta': {'object_name': 'GroupShare'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']", 'unique': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']", 'null': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "'05a689e83afa4ae29cb05b3b6fc5cefe'", 'unique': 'True', 'max_length': '32'}) + }, + 'sentry.groupsnooze': { + 'Meta': {'object_name': 'GroupSnooze'}, + 'actor_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'count': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']", 'unique': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'state': ('jsonfield.fields.JSONField', [], {'null': 'True'}), + 'until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'user_count': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'user_window': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'window': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}) + }, + 'sentry.groupsubscription': { + 'Meta': {'unique_together': "(('group', 'user'),)", 'object_name': 'GroupSubscription'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'subscription_set'", 'to': "orm['sentry.Group']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'subscription_set'", 'to': "orm['sentry.Project']"}), + 'reason': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.grouptagkey': { + 'Meta': {'unique_together': "(('project_id', 'group_id', 'key'),)", 'object_name': 'GroupTagKey'}, + 'group_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True', 'db_index': 'True'}), + 'values_seen': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}) + }, + 'sentry.grouptagvalue': { + 'Meta': {'unique_together': "(('group_id', 'key', 'value'),)", 'object_name': 'GroupTagValue', 'db_table': "'sentry_messagefiltervalue'", 'index_together': "(('project_id', 'key', 'value', 'last_seen'),)"}, + 'first_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True', 'db_index': 'True'}), + 'group_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True', 'db_index': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True', 'db_index': 'True'}), + 'times_seen': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '200'}) + }, + 'sentry.grouptombstone': { + 'Meta': {'object_name': 'GroupTombstone'}, + 'actor_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'culprit': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'data': ('sentry.db.models.fields.gzippeddict.GzippedDictField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'level': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '40', 'blank': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {}), + 'previous_group_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'unique': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}) + }, + 'sentry.identity': { + 'Meta': {'unique_together': "(('idp', 'external_id'),)", 'object_name': 'Identity'}, + 'data': ('sentry.db.models.fields.encrypted.EncryptedJsonField', [], {'default': '{}'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_verified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'idp': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.IdentityProvider']"}), + 'scopes': ('sentry.db.models.fields.array.ArrayField', [], {'of': ('django.db.models.fields.TextField', [], {})}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.identityprovider': { + 'Meta': {'unique_together': "(('type', 'organization'),)", 'object_name': 'IdentityProvider'}, + 'config': ('sentry.db.models.fields.encrypted.EncryptedJsonField', [], {'default': '{}'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'sentry.integration': { + 'Meta': {'unique_together': "(('provider', 'external_id'),)", 'object_name': 'Integration'}, + 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'metadata': ('sentry.db.models.fields.encrypted.EncryptedJsonField', [], {'default': '{}'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'organizations': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'integrations'", 'symmetrical': 'False', 'through': "orm['sentry.OrganizationIntegration']", 'to': "orm['sentry.Organization']"}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'integrations'", 'symmetrical': 'False', 'through': "orm['sentry.ProjectIntegration']", 'to': "orm['sentry.Project']"}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'sentry.lostpasswordhash': { + 'Meta': {'object_name': 'LostPasswordHash'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'hash': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']", 'unique': 'True'}) + }, + 'sentry.option': { + 'Meta': {'object_name': 'Option'}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}), + 'last_updated': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'value': ('sentry.db.models.fields.encrypted.EncryptedPickledObjectField', [], {}) + }, + 'sentry.organization': { + 'Meta': {'object_name': 'Organization'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'default_role': ('django.db.models.fields.CharField', [], {'default': "'member'", 'max_length': '32'}), + 'flags': ('django.db.models.fields.BigIntegerField', [], {'default': '1'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'org_memberships'", 'symmetrical': 'False', 'through': "orm['sentry.OrganizationMember']", 'to': "orm['sentry.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}) + }, + 'sentry.organizationaccessrequest': { + 'Meta': {'unique_together': "(('team', 'member'),)", 'object_name': 'OrganizationAccessRequest'}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'member': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.OrganizationMember']"}), + 'team': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Team']"}) + }, + 'sentry.organizationavatar': { + 'Meta': {'object_name': 'OrganizationAvatar'}, + 'avatar_type': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}), + 'file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.File']", 'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ident': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'avatar'", 'unique': 'True', 'to': "orm['sentry.Organization']"}) + }, + 'sentry.organizationintegration': { + 'Meta': {'unique_together': "(('organization', 'integration'),)", 'object_name': 'OrganizationIntegration'}, + 'config': ('sentry.db.models.fields.encrypted.EncryptedJsonField', [], {'default': '{}'}), + 'default_auth_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True', 'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'integration': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Integration']"}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}) + }, + 'sentry.organizationmember': { + 'Meta': {'unique_together': "(('organization', 'user'), ('organization', 'email'))", 'object_name': 'OrganizationMember'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), + 'flags': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'has_global_access': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'member_set'", 'to': "orm['sentry.Organization']"}), + 'role': ('django.db.models.fields.CharField', [], {'default': "'member'", 'max_length': '32'}), + 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sentry.Team']", 'symmetrical': 'False', 'through': "orm['sentry.OrganizationMemberTeam']", 'blank': 'True'}), + 'token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'type': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '50', 'blank': 'True'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'blank': 'True', 'related_name': "'sentry_orgmember_set'", 'null': 'True', 'to': "orm['sentry.User']"}) + }, + 'sentry.organizationmemberteam': { + 'Meta': {'unique_together': "(('team', 'organizationmember'),)", 'object_name': 'OrganizationMemberTeam', 'db_table': "'sentry_organizationmember_teams'"}, + 'id': ('sentry.db.models.fields.bounded.BoundedAutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'organizationmember': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.OrganizationMember']"}), + 'team': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Team']"}) + }, + 'sentry.organizationonboardingtask': { + 'Meta': {'unique_together': "(('organization', 'task'),)", 'object_name': 'OrganizationOnboardingTask'}, + 'data': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'date_completed': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'task': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']", 'null': 'True'}) + }, + 'sentry.organizationoption': { + 'Meta': {'unique_together': "(('organization', 'key'),)", 'object_name': 'OrganizationOption', 'db_table': "'sentry_organizationoptions'"}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'value': ('sentry.db.models.fields.encrypted.EncryptedPickledObjectField', [], {}) + }, + 'sentry.processingissue': { + 'Meta': {'unique_together': "(('project', 'checksum', 'type'),)", 'object_name': 'ProcessingIssue'}, + 'checksum': ('django.db.models.fields.CharField', [], {'max_length': '40', 'db_index': 'True'}), + 'data': ('sentry.db.models.fields.gzippeddict.GzippedDictField', [], {}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'sentry.project': { + 'Meta': {'unique_together': "(('organization', 'slug'),)", 'object_name': 'Project'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'first_event': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'flags': ('django.db.models.fields.BigIntegerField', [], {'default': '0', 'null': 'True'}), + 'forced_color': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'platform': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'null': 'True'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'team': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Team']", 'null': 'True'}), + 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'teams'", 'symmetrical': 'False', 'through': "orm['sentry.ProjectTeam']", 'to': "orm['sentry.Team']"}) + }, + 'sentry.projectbookmark': { + 'Meta': {'unique_together': "(('project_id', 'user'),)", 'object_name': 'ProjectBookmark'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.projectdsymfile': { + 'Meta': {'unique_together': "(('project', 'uuid'),)", 'object_name': 'ProjectDSymFile'}, + 'cpu_name': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.File']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'object_name': ('django.db.models.fields.TextField', [], {}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']", 'null': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '36'}) + }, + 'sentry.projectintegration': { + 'Meta': {'unique_together': "(('project', 'integration'),)", 'object_name': 'ProjectIntegration'}, + 'config': ('sentry.db.models.fields.encrypted.EncryptedJsonField', [], {'default': '{}'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'integration': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Integration']"}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}) + }, + 'sentry.projectkey': { + 'Meta': {'object_name': 'ProjectKey'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'key_set'", 'to': "orm['sentry.Project']"}), + 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'unique': 'True', 'null': 'True'}), + 'rate_limit_count': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'rate_limit_window': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'roles': ('django.db.models.fields.BigIntegerField', [], {'default': '1'}), + 'secret_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'unique': 'True', 'null': 'True'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}) + }, + 'sentry.projectoption': { + 'Meta': {'unique_together': "(('project', 'key'),)", 'object_name': 'ProjectOption', 'db_table': "'sentry_projectoptions'"}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'value': ('sentry.db.models.fields.encrypted.EncryptedPickledObjectField', [], {}) + }, + 'sentry.projectplatform': { + 'Meta': {'unique_together': "(('project_id', 'platform'),)", 'object_name': 'ProjectPlatform'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'platform': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}) + }, + 'sentry.projectsymcachefile': { + 'Meta': {'unique_together': "(('project', 'dsym_file'),)", 'object_name': 'ProjectSymCacheFile'}, + 'cache_file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.File']"}), + 'checksum': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'dsym_file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ProjectDSymFile']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']", 'null': 'True'}), + 'version': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}) + }, + 'sentry.projectteam': { + 'Meta': {'unique_together': "(('project', 'team'),)", 'object_name': 'ProjectTeam'}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'team': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Team']"}) + }, + 'sentry.pullrequest': { + 'Meta': {'unique_together': "(('repository_id', 'key'),)", 'object_name': 'PullRequest', 'db_table': "'sentry_pull_request'", 'index_together': "(('repository_id', 'date_added'),)"}, + 'author': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.CommitAuthor']", 'null': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'merge_commit_sha': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'null': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'repository_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'title': ('django.db.models.fields.TextField', [], {'null': 'True'}) + }, + 'sentry.rawevent': { + 'Meta': {'unique_together': "(('project', 'event_id'),)", 'object_name': 'RawEvent'}, + 'data': ('sentry.db.models.fields.node.NodeField', [], {'null': 'True', 'blank': 'True'}), + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'event_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}) + }, + 'sentry.release': { + 'Meta': {'unique_together': "(('organization', 'version'),)", 'object_name': 'Release'}, + 'authors': ('sentry.db.models.fields.array.ArrayField', [], {'of': ('django.db.models.fields.TextField', [], {})}), + 'commit_count': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'data': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_released': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_started': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_commit_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'last_deploy_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'new_groups': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'owner': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']", 'null': 'True', 'blank': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'releases'", 'symmetrical': 'False', 'through': "orm['sentry.ReleaseProject']", 'to': "orm['sentry.Project']"}), + 'ref': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'total_deploys': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '250'}) + }, + 'sentry.releasecommit': { + 'Meta': {'unique_together': "(('release', 'commit'), ('release', 'order'))", 'object_name': 'ReleaseCommit'}, + 'commit': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Commit']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'order': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']"}) + }, + 'sentry.releaseenvironment': { + 'Meta': {'unique_together': "(('organization_id', 'release_id', 'environment_id'),)", 'object_name': 'ReleaseEnvironment', 'db_table': "'sentry_environmentrelease'"}, + 'environment_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'first_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'release_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}) + }, + 'sentry.releasefile': { + 'Meta': {'unique_together': "(('release', 'ident'),)", 'object_name': 'ReleaseFile'}, + 'dist': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Distribution']", 'null': 'True'}), + 'file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.File']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ident': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'name': ('django.db.models.fields.TextField', [], {}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']"}) + }, + 'sentry.releaseheadcommit': { + 'Meta': {'unique_together': "(('repository_id', 'release'),)", 'object_name': 'ReleaseHeadCommit'}, + 'commit': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Commit']"}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']"}), + 'repository_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {}) + }, + 'sentry.releaseproject': { + 'Meta': {'unique_together': "(('project', 'release'),)", 'object_name': 'ReleaseProject', 'db_table': "'sentry_release_project'"}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'new_groups': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'null': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'release': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Release']"}) + }, + 'sentry.repository': { + 'Meta': {'unique_together': "(('organization_id', 'name'), ('organization_id', 'provider', 'external_id'))", 'object_name': 'Repository'}, + 'config': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'integration_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True', 'db_index': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'organization_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}) + }, + 'sentry.reprocessingreport': { + 'Meta': {'unique_together': "(('project', 'event_id'),)", 'object_name': 'ReprocessingReport'}, + 'datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'event_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}) + }, + 'sentry.rule': { + 'Meta': {'object_name': 'Rule'}, + 'data': ('sentry.db.models.fields.gzippeddict.GzippedDictField', [], {}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'environment_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}) + }, + 'sentry.savedsearch': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'SavedSearch'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'owner': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']", 'null': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'query': ('django.db.models.fields.TextField', [], {}) + }, + 'sentry.savedsearchuserdefault': { + 'Meta': {'unique_together': "(('project', 'user'),)", 'object_name': 'SavedSearchUserDefault', 'db_table': "'sentry_savedsearch_userdefault'"}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}), + 'savedsearch': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.SavedSearch']"}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.scheduleddeletion': { + 'Meta': {'unique_together': "(('app_label', 'model_name', 'object_id'),)", 'object_name': 'ScheduledDeletion'}, + 'aborted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'actor_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'data': ('jsonfield.fields.JSONField', [], {'default': '{}'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_scheduled': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2018, 3, 10, 0, 0)'}), + 'guid': ('django.db.models.fields.CharField', [], {'default': "'feaede4dedd440eca1acfa15ea919d71'", 'unique': 'True', 'max_length': '32'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'in_progress': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'model_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'object_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {}) + }, + 'sentry.scheduledjob': { + 'Meta': {'object_name': 'ScheduledJob'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_scheduled': ('django.db.models.fields.DateTimeField', [], {}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'payload': ('jsonfield.fields.JSONField', [], {'default': '{}'}) + }, + 'sentry.servicehook': { + 'Meta': {'object_name': 'ServiceHook'}, + 'actor_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'application': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ApiApplication']", 'null': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'events': ('sentry.db.models.fields.array.ArrayField', [], {'of': ('django.db.models.fields.TextField', [], {})}), + 'guid': ('django.db.models.fields.CharField', [], {'max_length': '32', 'unique': 'True', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'secret': ('sentry.db.models.fields.encrypted.EncryptedTextField', [], {'default': "'0aaff9bc360042dc9599f56590a18b80d88f8487c36e4b91af6006e003a35bd1'"}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'url': ('django.db.models.fields.URLField', [], {'max_length': '512'}), + 'version': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}) + }, + 'sentry.tagkey': { + 'Meta': {'unique_together': "(('project_id', 'key'),)", 'object_name': 'TagKey', 'db_table': "'sentry_filterkey'"}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'db_index': 'True'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'values_seen': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}) + }, + 'sentry.tagvalue': { + 'Meta': {'unique_together': "(('project_id', 'key', 'value'),)", 'object_name': 'TagValue', 'db_table': "'sentry_filtervalue'", 'index_together': "(('project_id', 'key', 'last_seen'),)"}, + 'data': ('sentry.db.models.fields.gzippeddict.GzippedDictField', [], {'null': 'True', 'blank': 'True'}), + 'first_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True', 'db_index': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True', 'db_index': 'True'}), + 'project_id': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'null': 'True', 'db_index': 'True'}), + 'times_seen': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '200'}) + }, + 'sentry.team': { + 'Meta': {'unique_together': "(('organization', 'slug'),)", 'object_name': 'Team'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'status': ('sentry.db.models.fields.bounded.BoundedPositiveIntegerField', [], {'default': '0'}) + }, + 'sentry.user': { + 'Meta': {'object_name': 'User', 'db_table': "'auth_user'"}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedAutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_managed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_password_expired': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_active': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_password_change': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_column': "'first_name'", 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'session_nonce': ('django.db.models.fields.CharField', [], {'max_length': '12', 'null': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + 'sentry.useravatar': { + 'Meta': {'object_name': 'UserAvatar'}, + 'avatar_type': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}), + 'file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.File']", 'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ident': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'avatar'", 'unique': 'True', 'to': "orm['sentry.User']"}) + }, + 'sentry.useremail': { + 'Meta': {'unique_together': "(('user', 'email'),)", 'object_name': 'UserEmail'}, + 'date_hash_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'related_name': "'emails'", 'to': "orm['sentry.User']"}), + 'validation_hash': ('django.db.models.fields.CharField', [], {'default': "u'hlB5vjw0fQ1zrP3O2b8UUPs1pqs2pjVg'", 'max_length': '32'}) + }, + 'sentry.userip': { + 'Meta': {'unique_together': "(('user', 'ip_address'),)", 'object_name': 'UserIP'}, + 'first_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.useroption': { + 'Meta': {'unique_together': "(('user', 'project', 'key'), ('user', 'organization', 'key'))", 'object_name': 'UserOption'}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'organization': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Organization']", 'null': 'True'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']", 'null': 'True'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}), + 'value': ('sentry.db.models.fields.encrypted.EncryptedPickledObjectField', [], {}) + }, + 'sentry.userpermission': { + 'Meta': {'unique_together': "(('user', 'permission'),)", 'object_name': 'UserPermission'}, + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'permission': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'user': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.User']"}) + }, + 'sentry.userreport': { + 'Meta': {'unique_together': "(('project', 'event_id'),)", 'object_name': 'UserReport', 'index_together': "(('project', 'event_id'), ('project', 'date_added'))"}, + 'comments': ('django.db.models.fields.TextField', [], {}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}), + 'environment': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Environment']", 'null': 'True'}), + 'event_id': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'event_user_id': ('sentry.db.models.fields.bounded.BoundedBigIntegerField', [], {'null': 'True'}), + 'group': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Group']", 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'project': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.Project']"}) + }, + 'sentry.versiondsymfile': { + 'Meta': {'unique_together': "(('dsym_file', 'version', 'build'),)", 'object_name': 'VersionDSymFile'}, + 'build': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'dsym_app': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.DSymApp']"}), + 'dsym_file': ('sentry.db.models.fields.foreignkey.FlexibleForeignKey', [], {'to': "orm['sentry.ProjectDSymFile']", 'null': 'True'}), + 'id': ('sentry.db.models.fields.bounded.BoundedBigAutoField', [], {'primary_key': 'True'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + } + } + + complete_apps = ['sentry'] diff --git a/src/sentry/tasks/assemble.py b/src/sentry/tasks/assemble.py new file mode 100644 index 00000000000000..4b709c609e82cb --- /dev/null +++ b/src/sentry/tasks/assemble.py @@ -0,0 +1,81 @@ +from __future__ import absolute_import, print_function + +import six +import logging + +from django.db import transaction +from sentry.tasks.base import instrumented_task + +logger = logging.getLogger(__name__) + + +@instrumented_task(name='sentry.tasks.assemble.assemble_dif', queue='assemble') +def assemble_dif(project_id, file_id, file_blob_ids, checksum, **kwargs): + with transaction.atomic(): + # Assemble the chunks into files + file = assemble_chunks(file_id, file_blob_ids, checksum) + + from sentry.models import ChunkFileState, dsymfile, Project + + project = Project.objects.filter( + id=project_id + ).get() + + with file.getfile(as_tempfile=True) as tf: + result = dsymfile.detect_dif_from_filename(tf.name) + if result: + dsyms = dsymfile.create_dsym_from_dif(result, project, file.name) + + from sentry.tasks.symcache_update import symcache_update + uuids_to_update = [six.text_type(x.uuid) for x in dsyms + if x.supports_symcache] + if uuids_to_update: + symcache_update.delay(project_id=project.id, + uuids=uuids_to_update) + + # Uploading new dsysm changes the reprocessing revision + dsymfile.bump_reprocessing_revision(project) + # We can delete the original chunk file since we created new dsym files + file.delete() + else: + file.headers['__state'] = ChunkFileState.ERROR + file.headers['error'] = 'Invalid object file' + file.save() + logger.error( + 'assemble_chunks.invalid_object_file', + extra={ + 'error': file.headers.get('error', ''), + 'file_id': file.id + } + ) + + +def assemble_chunks(file_id, file_blob_ids, checksum, **kwargs): + '''This assembles multiple chunks into on File.''' + if len(file_blob_ids) == 0: + logger.warning('assemble_chunks.empty_file_blobs', extra={ + 'error': 'Empty file blobs' + }) + + from sentry.models import File, ChunkFileState + + file = File.objects.filter( + id=file_id, + ).get() + + file.headers['__state'] = ChunkFileState.ASSEMBLING + # Do the actual assembling here + + file.assemble_from_file_blob_ids(file_blob_ids, checksum) + if file.headers.get('__state', '') == ChunkFileState.ERROR: + logger.error( + 'assemble_chunks.assemble_error', + extra={ + 'error': file.headers.get('error', ''), + 'file_id': file.id + } + ) + return + file.headers['__state'] = ChunkFileState.OK + file.save() + return file diff --git a/tests/fixtures/crash.sym b/tests/fixtures/crash.sym new file mode 100644 index 00000000000000..fd697186c7be82 --- /dev/null +++ b/tests/fixtures/crash.sym @@ -0,0 +1,6096 @@ +MODULE mac x86_64 67E9247C814E392BA027DBDE6748FCBF0 crash +FILE 0 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__split_buffer +FILE 1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm +FILE 2 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iterator +FILE 3 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory +FILE 4 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/new +FILE 5 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string +FILE 6 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits +FILE 7 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/vector +FILE 8 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/crash_generation/crash_generation_client.cc +FILE 9 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/crash_generation/crash_generation_client.h +FILE 10 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/handler/dynamic_images.cc +FILE 11 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/handler/dynamic_images.h +FILE 12 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/handler/exception_handler.cc +FILE 13 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/handler/exception_handler.h +FILE 14 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/handler/minidump_generator.cc +FILE 15 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/mac/handler/minidump_generator.h +FILE 16 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/minidump_file_writer-inl.h +FILE 17 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/minidump_file_writer.cc +FILE 18 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/client/minidump_file_writer.h +FILE 19 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/convert_UTF.c +FILE 20 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/MachIPC.h +FILE 21 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/MachIPC.mm +FILE 22 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/bootstrap_compat.cc +FILE 23 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/file_id.cc +FILE 24 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/macho_id.cc +FILE 25 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/macho_utilities.cc +FILE 26 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/macho_walker.cc +FILE 27 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/scoped_task_suspend-inl.h +FILE 28 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/mac/string_utilities.cc +FILE 29 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/md5.cc +FILE 30 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/memory_allocator.h +FILE 31 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/scoped_ptr.h +FILE 32 /Users/travis/build/getsentry/breakpad-tools/macos/../deps/breakpad/src/common/string_conversion.cc +FILE 33 /Users/travis/build/getsentry/breakpad-tools/macos/../macos/main.cpp +FILE 34 /usr/include/libkern/i386/_OSByteOrder.h +FUNC d20 1a 0 +d20 6 93 17 +d26 4 94 17 +d2a 7 95 17 +d31 8 96 17 +d39 1 97 17 +FUNC d40 1a 0 google_breakpad::MinidumpFileWriter::MinidumpFileWriter() +d40 6 93 17 +d46 4 94 17 +d4a 7 95 17 +d51 8 96 17 +d59 1 97 17 +FUNC d60 34 0 +d60 4 99 17 +d64 6 100 17 +d6a 2 127 17 +d6c 5 127 17 +d71 3 133 17 +d74 5 133 17 +d79 4 133 17 +d7d 2 140 17 +d7f 5 140 17 +d84 6 142 17 +d8a 2 102 17 +d8c 8 101 17 +FUNC da0 31 0 google_breakpad::MinidumpFileWriter::Close() +da0 4 124 17 +da4 4 127 17 +da8 5 127 17 +dad 3 133 17 +db0 5 133 17 +db5 8 133 17 +dbd 2 140 17 +dbf 5 140 17 +dc4 5 140 17 +dc9 6 142 17 +dcf 2 146 17 +FUNC de0 34 0 google_breakpad::MinidumpFileWriter::~MinidumpFileWriter() +de0 4 99 17 +de4 6 100 17 +dea 2 127 17 +dec 5 127 17 +df1 3 133 17 +df4 5 133 17 +df9 4 133 17 +dfd 2 140 17 +dff 5 140 17 +e04 6 142 17 +e0a 2 102 17 +e0c 8 101 17 +FUNC e20 49 0 google_breakpad::MinidumpFileWriter::Open(char const*) +e20 7 104 17 +e27 5 105 17 +e2c 14 109 17 +e40 2 109 17 +e42 6 112 17 +e48 2 112 17 +e4a 1f 105 17 +FUNC e70 2d 0 google_breakpad::MinidumpFileWriter::SetFile(int) +e70 6 116 17 +e76 2 117 17 +e78 4 118 17 +e7c 2 122 17 +e7e 1f 116 17 +FUNC ea0 147 0 google_breakpad::MinidumpFileWriter::CopyStringToMDString(wchar_t const*, unsigned int, google_breakpad::TypedMDRVA*) +ea0 16 150 17 +eb6 1a 160 17 +ed0 2 161 17 +ed2 8 161 17 +eda 6 162 17 +ee0 a 162 17 +eea 10 172 17 +efa 14 83 16 +f0e 4 84 16 +f12 d 313 17 +f1f 4 173 17 +f23 7 86 16 +f2a 5 85 16 +f2f 5 86 16 +f34 4 316 17 +f38 9 316 17 +f41 a 327 17 +f4b 5 327 17 +f50 7 328 17 +f57 b 328 17 +f62 9 328 17 +f6b 7 166 17 +f72 4 167 17 +f76 5 175 17 +f7b 1c 160 17 +f97 12 179 17 +fa9 1f 83 16 +fc8 1f 313 17 +FUNC ff0 147 0 google_breakpad::MinidumpFileWriter::CopyStringToMDString(char const*, unsigned int, google_breakpad::TypedMDRVA*) +ff0 16 183 17 +1006 1a 189 17 +1020 10 190 17 +1030 9 191 17 +1039 10 199 17 +1049 f 83 16 +1058 3 84 16 +105b c 313 17 +1067 4 200 17 +106b 7 86 16 +1072 4 85 16 +1076 5 86 16 +107b 4 316 17 +107f d 316 17 +108c a 327 17 +1096 5 327 17 +109b 8 328 17 +10a3 b 328 17 +10ae 9 328 17 +10b7 3 195 17 +10ba 6 196 17 +10c0 5 202 17 +10c5 22 189 17 +10e7 12 205 17 +10f9 1f 83 16 +1118 1f 313 17 +FUNC 1140 5 0 google_breakpad::MinidumpFileWriter::WriteString(wchar_t const*, unsigned int, MDLocationDescriptor*) +1140 5 245 17 +FUNC 1150 2cc 0 bool google_breakpad::MinidumpFileWriter::WriteStringCore(wchar_t const*, unsigned int, MDLocationDescriptor*) +1150 10 210 17 +1160 9 211 17 +1169 9 212 17 +1172 2 216 17 +1174 23 218 17 +1197 3 218 17 +119a 5 218 17 +119f 5 159 18 +11a4 3 117 18 +11a7 4 160 18 +11ab 1a 211 18 +11c5 a 66 16 +11cf 2 223 17 +11d1 8 67 16 +11d9 5 68 16 +11de a 68 16 +11e8 8 223 17 +11f0 3 228 17 +11f3 4 227 17 +11f7 11 229 17 +1208 4 232 17 +120c 7 233 17 +1213 b 83 16 +121e 5 84 16 +1223 c 313 17 +122f 4 85 16 +1233 4 86 16 +1237 4 316 17 +123b 6 316 17 +1241 a 327 17 +124b 5 327 17 +1250 3 328 17 +1253 f 328 17 +1262 6 328 17 +1268 4 177 18 +126c 4 175 18 +1270 7 177 18 +1277 e 237 17 +1285 6 240 17 +128b 7 216 18 +1292 5 92 16 +1297 c 313 17 +12a3 4 316 17 +12a7 4 316 17 +12ab 6 316 17 +12b1 a 327 17 +12bb 5 327 17 +12c0 5 92 16 +12c5 3 328 17 +12c8 a 328 17 +12d2 e 241 17 +12e0 1f 211 17 +12ff 1f 212 17 +131e 1f 66 16 +133d 1f 313 17 +135c 1f 83 16 +137b 21 313 17 +139c b 217 18 +13a7 f 216 18 +13b6 5 92 16 +13bb 8 313 17 +13c3 1f 313 17 +13e2 5 316 17 +13e7 4 316 17 +13eb 6 316 17 +13f1 a 327 17 +13fb 5 327 17 +1400 5 92 16 +1405 3 328 17 +1408 c 328 17 +1414 8 217 18 +FUNC 1420 5 0 google_breakpad::MinidumpFileWriter::WriteString(char const*, unsigned int, MDLocationDescriptor*) +1420 5 250 17 +FUNC 1430 2cc 0 bool google_breakpad::MinidumpFileWriter::WriteStringCore(char const*, unsigned int, MDLocationDescriptor*) +1430 10 210 17 +1440 9 211 17 +1449 9 212 17 +1452 2 216 17 +1454 23 218 17 +1477 3 218 17 +147a 5 218 17 +147f 5 159 18 +1484 3 117 18 +1487 4 160 18 +148b 1a 211 18 +14a5 a 66 16 +14af 2 223 17 +14b1 8 67 16 +14b9 5 68 16 +14be a 68 16 +14c8 8 223 17 +14d0 3 228 17 +14d3 4 227 17 +14d7 11 229 17 +14e8 4 232 17 +14ec 7 233 17 +14f3 b 83 16 +14fe 5 84 16 +1503 c 313 17 +150f 4 85 16 +1513 4 86 16 +1517 4 316 17 +151b 6 316 17 +1521 a 327 17 +152b 5 327 17 +1530 3 328 17 +1533 f 328 17 +1542 6 328 17 +1548 4 177 18 +154c 4 175 18 +1550 7 177 18 +1557 e 237 17 +1565 6 240 17 +156b 7 216 18 +1572 5 92 16 +1577 c 313 17 +1583 4 316 17 +1587 4 316 17 +158b 6 316 17 +1591 a 327 17 +159b 5 327 17 +15a0 5 92 16 +15a5 3 328 17 +15a8 a 328 17 +15b2 e 241 17 +15c0 1f 211 17 +15df 1f 212 17 +15fe 1f 66 16 +161d 1f 313 17 +163c 1f 83 16 +165b 21 313 17 +167c b 217 18 +1687 f 216 18 +1696 5 92 16 +169b 8 313 17 +16a3 1f 313 17 +16c2 5 316 17 +16c7 4 316 17 +16cb 6 316 17 +16d1 a 327 17 +16db 5 327 17 +16e0 5 92 16 +16e5 3 328 17 +16e8 c 328 17 +16f4 8 217 18 +FUNC 1700 c4 0 google_breakpad::MinidumpFileWriter::WriteMemory(void const*, unsigned long, MDMemoryDescriptor*) +1700 11 254 17 +1711 5 255 17 +1716 9 256 17 +171f 4 159 18 +1723 3 117 18 +1726 4 160 18 +172a d 161 18 +1737 8 259 17 +173f 4 259 17 +1743 5 175 18 +1748 9 176 18 +1751 e 186 18 +175f 4 261 17 +1763 3 264 17 +1766 a 177 18 +1770 a 265 17 +177a c 268 17 +1786 1f 255 17 +17a5 1f 256 17 +FUNC 17d0 104 0 google_breakpad::UntypedMDRVA::Allocate(unsigned long) +17d0 11 336 17 +17e1 b 337 17 +17ec 4 338 17 +17f0 9 271 17 +17f9 3 339 17 +17fc e 272 17 +180a 4 287 17 +180e 4 287 17 +1812 5 289 17 +1817 6 289 17 +181d 5 289 17 +1822 5 289 17 +1827 8 291 17 +182f 3 294 17 +1832 4 294 17 +1836 3 297 17 +1839 10 298 17 +1849 4 298 17 +184d 5 301 17 +1852 5 304 17 +1857 7 305 17 +185e 4 339 17 +1862 6 340 17 +1868 f 340 17 +1877 1f 337 17 +1896 1f 271 17 +18b5 1f 272 17 +FUNC 18e0 b4 0 google_breakpad::MinidumpFileWriter::Allocate(unsigned long) +18e0 e 270 17 +18ee 5 271 17 +18f3 9 272 17 +18fc 4 287 17 +1900 4 287 17 +1904 4 289 17 +1908 6 289 17 +190e 4 289 17 +1912 5 289 17 +1917 8 291 17 +191f 3 294 17 +1922 4 294 17 +1926 3 297 17 +1929 12 298 17 +193b 4 298 17 +193f 4 301 17 +1943 4 304 17 +1947 6 305 17 +194d 9 308 17 +1956 1f 271 17 +1975 1f 272 17 +FUNC 19a0 c8 0 google_breakpad::MinidumpFileWriter::Copy(unsigned int, void const*, long) +19a0 11 310 17 +19b1 5 311 17 +19b6 5 312 17 +19bb d 313 17 +19c8 2 316 17 +19ca 4 316 17 +19ce 7 316 17 +19d5 a 327 17 +19df 5 327 17 +19e4 4 328 17 +19e8 10 328 17 +19f8 7 328 17 +19ff c 334 17 +1a0b 1f 311 17 +1a2a 1f 312 17 +1a49 1f 313 17 +FUNC 1a70 f3 0 google_breakpad::UntypedMDRVA::Copy(unsigned int, void const*, unsigned long) +1a70 e 343 17 +1a7e 5 344 17 +1a83 5 345 17 +1a88 17 346 17 +1a9f 3 347 17 +1aa2 b 313 17 +1aad 6 316 17 +1ab3 a 327 17 +1abd 5 327 17 +1ac2 2 328 17 +1ac4 10 328 17 +1ad4 7 328 17 +1adb c 347 17 +1ae7 1f 344 17 +1b06 1f 345 17 +1b25 1f 346 17 +1b44 1f 313 17 +FUNC 1b70 1b3 0 google_breakpad::CrashGenerationClient::RequestDumpForException(int, int, int, unsigned int) +1b70 33 41 8 +1ba3 5 44 8 +1ba8 12 46 8 +1bba 9 47 8 +1bc3 4 118 20 +1bc7 8 119 20 +1bcf 8 122 20 +1bd7 12 47 8 +1be9 4 118 20 +1bed 8 119 20 +1bf5 8 122 20 +1bfd 12 48 8 +1c0f 5 49 8 +1c14 4 118 20 +1c18 8 119 20 +1c20 8 122 20 +1c28 12 49 8 +1c3a 3 269 20 +1c3d 4 118 20 +1c41 8 119 20 +1c49 8 122 20 +1c51 12 50 8 +1c63 4 53 8 +1c67 5 54 8 +1c6c 5 55 8 +1c71 17 56 8 +1c88 15 59 8 +1c9d d 60 8 +1caa d 203 20 +1cb7 11 67 8 +1cc8 9 69 8 +1cd1 45 70 8 +1d16 d 70 8 +FUNC 1d30 bb 0 google_breakpad::ReadTaskMemory(unsigned int, unsigned long long, unsigned long, std::__1::vector >&) +1d30 17 185 10 +1d47 5 186 10 +1d4c 3 192 10 +1d4f 2 189 10 +1d51 3 189 10 +1d54 4 192 10 +1d58 5 192 10 +1d5d 3 192 10 +1d60 3 189 10 +1d63 d 194 10 +1d70 a 198 10 +1d7a 4 204 10 +1d7e 3 642 7 +1d81 4 642 7 +1d85 6 642 7 +1d8b 5 1997 7 +1d90 6 1998 7 +1d96 8 1998 7 +1d9e 7 1501 7 +1da5 4 2000 7 +1da9 5 424 7 +1dae 4 425 7 +1db2 3 209 10 +1db5 5 209 10 +1dba b 208 10 +1dc5 9 211 10 +1dce 5 211 10 +1dd3 4 211 10 +1dd7 7 211 10 +1dde d 213 10 +FUNC 1df0 1ba 0 google_breakpad::DynamicImage::CalculateMemoryAndVersionInfo() +1df0 e 301 10 +1dfe 20 305 10 +1e1e 5 162 11 +1e23 3 1510 7 +1e26 8 249 10 +1e2e b 249 10 +1e39 4 258 10 +1e3d c 254 10 +1e49 7 313 10 +1e50 2 258 10 +1e52 9 258 10 +1e5b 6 259 10 +1e61 5 260 10 +1e66 4 264 10 +1e6a c 264 10 +1e76 4 264 10 +1e7a 3 265 10 +1e7d 4 265 10 +1e81 3 266 10 +1e84 4 266 10 +1e88 b 267 10 +1e93 6 269 10 +1e99 6 269 10 +1e9f 4 141 11 +1ea3 3 271 10 +1ea6 a 270 10 +1eb0 6 278 10 +1eb6 5 279 10 +1ebb 3 283 10 +1ebe 7 283 10 +1ec5 e 288 10 +1ed3 3 293 10 +1ed6 e 258 10 +1ee4 b 249 10 +1eef 4 258 10 +1ef3 c 254 10 +1eff 11 311 10 +1f10 2 258 10 +1f12 9 258 10 +1f1b 6 259 10 +1f21 5 260 10 +1f26 4 264 10 +1f2a c 264 10 +1f36 4 264 10 +1f3a 4 271 10 +1f3e 5 265 10 +1f43 b 267 10 +1f4e 7 269 10 +1f55 7 269 10 +1f5c 4 141 11 +1f60 8 271 10 +1f68 8 270 10 +1f70 6 278 10 +1f76 5 279 10 +1f7b 3 283 10 +1f7e 7 283 10 +1f85 a 288 10 +1f8f 3 293 10 +1f92 9 258 10 +1f9b f 314 10 +FUNC 1fb0 7 0 +1fb0 3 1510 7 +1fb3 3 324 10 +1fb6 1 332 10 +FUNC 1fc0 b8 0 google_breakpad::DynamicImages::DynamicImages(unsigned int) +1fc0 c 341 10 +1fcc 2 339 10 +1fce 7 340 10 +1fd5 3 340 10 +1fd8 4 341 10 +1fdc 18 433 7 +1ff4 8 391 10 +1ffc 2 392 10 +1ffe 14 392 10 +2012 4 516 10 +2016 a 397 10 +2020 6 271 11 +2026 a 520 10 +2030 8 518 10 +2038 d 343 10 +2045 3 450 7 +2048 5 450 7 +204d 4 424 7 +2051 5 424 7 +2056 11 0 7 +2067 4 425 7 +206b d 177 4 +FUNC 2080 d6 0 google_breakpad::DynamicImages::DetermineTaskCPUType(unsigned int) +2080 16 552 10 +2096 c 553 10 +20a2 4 553 10 +20a6 9 557 10 +20af 1d 558 10 +20cc 4 559 10 +20d0 b 560 10 +20db 5 561 10 +20e0 7 561 10 +20e7 d 562 10 +20f4 18 565 10 +210c b 566 10 +2117 15 567 10 +212c b 571 10 +2137 1f 560 10 +FUNC 2160 52 0 google_breakpad::DynamicImages::ReadImageInfoForTask() +2160 8 513 10 +2168 8 391 10 +2170 c 392 10 +217c a 392 10 +2186 4 516 10 +218a a 397 10 +2194 6 271 11 +219a a 520 10 +21a4 8 518 10 +21ac 6 522 10 +FUNC 21c0 5 0 google_breakpad::DynamicImages::DynamicImages(unsigned int) +21c0 5 341 10 +FUNC 21d0 34 0 google_breakpad::DynamicImages::GetDyldAllImageInfosPointer() +21d0 c 391 10 +21dc c 392 10 +21e8 c 392 10 +21f4 2 393 10 +21f6 6 392 10 +21fc 8 406 10 +FUNC 2210 5d0 0 void google_breakpad::ReadImageInfo(google_breakpad::DynamicImages&, unsigned long long) +2210 14 413 10 +2224 17 433 7 +223b 4 425 10 +223f 12 425 10 +2251 4 428 10 +2255 8 1501 7 +225d 4 442 10 +2261 11 433 7 +2272 4 440 10 +2276 4 441 10 +227a c 442 10 +2286 a 440 10 +2290 4 443 10 +2294 5 453 7 +2299 5 450 7 +229e 7 424 7 +22a5 5 425 7 +22aa 5 177 4 +22af 8 453 7 +22b7 5 450 7 +22bc a 424 7 +22c6 8 425 7 +22ce 5 177 4 +22d3 12 511 10 +22e5 5 1501 7 +22ea 5 448 10 +22ef a 372 7 +22f9 5 372 7 +22fe 7 372 7 +2305 9 1535 7 +230e 5 642 7 +2313 8 169 4 +231b 6 642 7 +2321 3 312 0 +2324 6 642 7 +232a 6 313 0 +2330 14 1630 3 +2344 c 448 10 +2350 4 210 11 +2354 4 1630 3 +2358 4 210 11 +235c 4 1631 3 +2360 7 1628 3 +2367 8 3618 6 +236f 11 1630 3 +2380 4 210 11 +2384 4 210 11 +2388 4 210 11 +238c 4 210 11 +2390 4 210 11 +2394 4 210 11 +2398 4 210 11 +239c 4 210 11 +23a0 4 210 11 +23a4 4 210 11 +23a8 4 210 11 +23ac 4 210 11 +23b0 4 210 11 +23b4 4 210 11 +23b8 4 210 11 +23bc 4 1630 3 +23c0 4 210 11 +23c4 4 1630 3 +23c8 5 1628 3 +23cd 8 3617 6 +23d5 5 3618 6 +23da 5 3618 6 +23df 5 3618 6 +23e4 5 342 0 +23e9 8 177 4 +23f1 9 450 10 +23fa 5 1606 7 +23ff 21 450 10 +2420 11 433 7 +2431 4 455 10 +2435 4 456 10 +2439 d 455 10 +2446 8 458 10 +244e 5 1501 7 +2453 4 467 10 +2457 4 467 10 +245b 4 469 10 +245f 4 470 10 +2463 b 469 10 +246e 8 472 10 +2476 11 1798 5 +2487 4 481 10 +248b 9 477 10 +2494 4 481 10 +2498 d 481 10 +24a5 7 1697 5 +24ac 9 1741 5 +24b5 5 1776 5 +24ba 3 636 5 +24bd 9 1756 5 +24c6 c 1471 5 +24d2 27 2464 5 +24f9 17 1798 5 +2510 d 481 10 +251d d 486 10 +252a 5 1501 7 +252f 4 488 10 +2533 15 489 10 +2548 3 490 10 +254b 8 491 10 +2553 7 492 10 +255a 23 128 11 +257d 8 486 10 +2585 d 171 11 +2592 2 494 10 +2594 d 208 11 +25a1 5 1613 7 +25a6 7 1606 7 +25ad 3 210 11 +25b0 11 1613 7 +25c1 c 109 11 +25cd 4 453 7 +25d1 a 450 7 +25db 6 424 7 +25e1 4 425 7 +25e5 5 177 4 +25ea f 497 10 +25f9 17 1616 7 +2610 10 499 10 +2620 5 453 7 +2625 5 450 7 +262a 7 424 7 +2631 5 425 7 +2636 5 177 4 +263b 3 450 10 +263e 17 450 10 +2655 9 1484 7 +265e 3 1468 7 +2661 9 1484 7 +266a 5 4041 1 +266f 3 1468 7 +2672 4 1484 7 +2676 5 1358 2 +267b 5 1087 1 +2680 5 1358 2 +2685 4 218 11 +2689 3 224 11 +268c 4 141 11 +2690 a 1090 1 +269a 4 2214 1 +269e 5 1358 2 +26a3 9 1190 2 +26ac 4 2223 1 +26b0 10 1190 2 +26c0 4 1190 2 +26c4 3 1358 2 +26c7 2 2221 1 +26c9 3 218 11 +26cc 4 141 11 +26d0 3 224 11 +26d3 8 218 11 +26db 4 1190 2 +26df 6 1484 7 +26e5 3 2235 1 +26e8 9 1358 2 +26f1 f 1902 1 +2700 8 1904 1 +2708 4 424 7 +270c 4 1905 1 +2710 9 424 7 +2719 11 0 7 +272a d 425 7 +2737 1a 1471 5 +2751 a 486 10 +275b 12 486 10 +276d 11 499 10 +277e 5 453 7 +2783 5 450 7 +2788 7 424 7 +278f 5 425 7 +2794 5 177 4 +2799 5 453 7 +279e 5 450 7 +27a3 7 424 7 +27aa 5 425 7 +27af 5 177 4 +27b4 8 453 7 +27bc 5 450 7 +27c1 a 424 7 +27cb 8 425 7 +27d3 d 177 4 +FUNC 27e0 5d0 0 void google_breakpad::ReadImageInfo(google_breakpad::DynamicImages&, unsigned long long) +27e0 14 413 10 +27f4 17 433 7 +280b 4 425 10 +280f 12 425 10 +2821 4 428 10 +2825 8 1501 7 +282d 4 442 10 +2831 11 433 7 +2842 4 440 10 +2846 3 441 10 +2849 c 442 10 +2855 a 440 10 +285f 4 443 10 +2863 5 453 7 +2868 5 450 7 +286d 7 424 7 +2874 5 425 7 +2879 5 177 4 +287e 8 453 7 +2886 5 450 7 +288b a 424 7 +2895 8 425 7 +289d 5 177 4 +28a2 12 511 10 +28b4 5 1501 7 +28b9 5 448 10 +28be a 372 7 +28c8 5 372 7 +28cd 7 372 7 +28d4 9 1535 7 +28dd 5 642 7 +28e2 8 1741 3 +28ea 5 169 4 +28ef 6 642 7 +28f5 3 312 0 +28f8 6 642 7 +28fe 6 313 0 +2904 14 1630 3 +2918 8 448 10 +2920 4 210 11 +2924 4 1630 3 +2928 4 210 11 +292c 4 1631 3 +2930 7 1628 3 +2937 8 3618 6 +293f 11 1630 3 +2950 4 210 11 +2954 4 210 11 +2958 4 210 11 +295c 4 210 11 +2960 4 210 11 +2964 4 210 11 +2968 4 210 11 +296c 4 210 11 +2970 4 210 11 +2974 4 210 11 +2978 4 210 11 +297c 4 210 11 +2980 4 210 11 +2984 4 210 11 +2988 4 210 11 +298c 4 1630 3 +2990 4 210 11 +2994 4 1630 3 +2998 5 1628 3 +299d 8 3617 6 +29a5 5 3618 6 +29aa 5 3618 6 +29af 5 3618 6 +29b4 5 342 0 +29b9 8 177 4 +29c1 9 450 10 +29ca 5 1606 7 +29cf 21 450 10 +29f0 11 433 7 +2a01 4 455 10 +2a05 4 456 10 +2a09 d 455 10 +2a16 8 458 10 +2a1e 5 1501 7 +2a23 4 467 10 +2a27 4 467 10 +2a2b 4 469 10 +2a2f 4 470 10 +2a33 b 469 10 +2a3e 8 472 10 +2a46 11 1798 5 +2a57 4 481 10 +2a5b 9 481 10 +2a64 4 481 10 +2a68 d 481 10 +2a75 7 1697 5 +2a7c 9 1741 5 +2a85 5 1776 5 +2a8a 3 636 5 +2a8d 9 1756 5 +2a96 c 1471 5 +2aa2 27 2464 5 +2ac9 17 1798 5 +2ae0 d 481 10 +2aed d 486 10 +2afa 5 1501 7 +2aff 4 488 10 +2b03 15 489 10 +2b18 3 490 10 +2b1b 8 491 10 +2b23 7 492 10 +2b2a 23 128 11 +2b4d 8 486 10 +2b55 d 171 11 +2b62 2 494 10 +2b64 d 208 11 +2b71 5 1613 7 +2b76 7 1606 7 +2b7d 3 210 11 +2b80 11 1613 7 +2b91 c 109 11 +2b9d 4 453 7 +2ba1 a 450 7 +2bab 6 424 7 +2bb1 4 425 7 +2bb5 5 177 4 +2bba f 497 10 +2bc9 17 1616 7 +2be0 10 499 10 +2bf0 5 453 7 +2bf5 5 450 7 +2bfa 7 424 7 +2c01 5 425 7 +2c06 5 177 4 +2c0b 3 450 10 +2c0e 17 450 10 +2c25 9 1484 7 +2c2e 3 1468 7 +2c31 9 1484 7 +2c3a 5 4041 1 +2c3f 3 1468 7 +2c42 4 1484 7 +2c46 5 1358 2 +2c4b 5 1087 1 +2c50 5 1358 2 +2c55 4 218 11 +2c59 3 224 11 +2c5c 4 141 11 +2c60 a 1090 1 +2c6a 4 2214 1 +2c6e 5 1358 2 +2c73 9 1190 2 +2c7c 4 2223 1 +2c80 10 1190 2 +2c90 4 1190 2 +2c94 3 1358 2 +2c97 2 2221 1 +2c99 3 218 11 +2c9c 4 141 11 +2ca0 3 224 11 +2ca3 8 218 11 +2cab 4 1190 2 +2caf 6 1484 7 +2cb5 3 2235 1 +2cb8 9 1358 2 +2cc1 f 1902 1 +2cd0 8 1904 1 +2cd8 4 424 7 +2cdc 4 1905 1 +2ce0 9 424 7 +2ce9 11 0 7 +2cfa d 425 7 +2d07 1a 1471 5 +2d21 a 486 10 +2d2b 12 486 10 +2d3d 11 499 10 +2d4e 5 453 7 +2d53 5 450 7 +2d58 7 424 7 +2d5f 5 425 7 +2d64 5 177 4 +2d69 5 453 7 +2d6e 5 450 7 +2d73 7 424 7 +2d7a 5 425 7 +2d7f 5 177 4 +2d84 8 453 7 +2d8c 5 450 7 +2d91 a 424 7 +2d9b 8 425 7 +2da3 d 177 4 +FUNC 2db0 4a 0 google_breakpad::DynamicImages::GetExecutableImage() +2db0 4 642 7 +2db4 4 642 7 +2db8 7 642 7 +2dbf a 540 10 +2dc9 7 526 10 +2dd0 4 224 11 +2dd4 3 1510 7 +2dd7 6 526 10 +2ddd c 540 10 +2de9 3 533 10 +2dec 9 528 10 +2df5 4 224 11 +2df9 1 533 10 +FUNC 2e00 3a 0 google_breakpad::DynamicImages::GetExecutableImageIndex() +2e00 4 642 7 +2e04 4 642 7 +2e08 c 642 7 +2e14 c 540 10 +2e20 4 224 11 +2e24 9 1510 7 +2e2d c 540 10 +2e39 1 548 10 +FUNC 2e40 1c3 0 std::__1::vector >::__append(unsigned long) +2e40 11 1035 7 +2e51 4 1036 7 +2e55 4 1036 7 +2e59 6 1036 7 +2e5f 5 1036 7 +2e64 3 642 7 +2e67 3 642 7 +2e6a 5 963 7 +2e6f 8 964 7 +2e77 3 372 7 +2e7a 4 372 7 +2e7e 3 372 7 +2e81 13 966 7 +2e94 3 968 7 +2e97 3 702 1 +2e9a 4 968 7 +2e9e 4 642 7 +2ea2 5 642 7 +2ea7 3 311 0 +2eaa 11 311 0 +2ebb 15 981 7 +2ed0 3 1752 3 +2ed3 b 985 7 +2ede 3 986 7 +2ee1 5 988 7 +2ee6 a 981 7 +2ef0 3 1752 3 +2ef3 c 985 7 +2eff 4 1752 3 +2f03 c 985 7 +2f0f 4 1752 3 +2f13 c 985 7 +2f1f 4 1752 3 +2f23 b 985 7 +2f2e b 988 7 +2f39 4 642 7 +2f3d d 642 7 +2f4a e 169 4 +2f58 3 312 0 +2f5b 15 201 0 +2f70 3 1752 3 +2f73 3 204 0 +2f76 3 205 0 +2f79 a 206 0 +2f83 d 201 0 +2f90 14 1752 3 +2fa4 4 204 0 +2fa8 6 206 0 +2fae 3 313 0 +2fb1 3 3617 6 +2fb4 4 893 7 +2fb8 3 1647 3 +2fbb 3 1648 3 +2fbe 5 1649 3 +2fc3 b 1650 3 +2fce 3 3618 6 +2fd1 4 3618 6 +2fd5 4 3618 6 +2fd9 5 342 0 +2fde 16 177 4 +2ff4 f 1045 7 +FUNC 3010 1bb 0 google_breakpad::ReadTaskString(unsigned int, unsigned long long) +3010 13 156 10 +3023 5 92 10 +3028 8 94 10 +3030 21 96 10 +3051 7 103 10 +3058 4 110 10 +305c d 142 10 +3069 5 121 10 +306e 5 121 10 +3073 6 112 10 +3079 3 112 10 +307c 9 118 10 +3085 3 121 10 +3088 1e 120 10 +30a6 7 126 10 +30ad 2 134 10 +30af 2 135 10 +30b1 5 140 10 +30b6 7 140 10 +30bd 5 135 10 +30c2 5 135 10 +30c7 4 135 10 +30cb 7 134 10 +30d2 a 136 10 +30dc 3 140 10 +30df 3 140 10 +30e2 3 164 10 +30e5 2 164 10 +30e7 b 166 10 +30f2 4 166 10 +30f6 11 433 7 +3107 f 169 10 +3116 2 169 10 +3118 2 169 10 +311a 19 1798 5 +3133 19 1798 5 +314c 5 1501 7 +3151 17 2242 3 +3168 8 644 5 +3170 e 2021 5 +317e 5 453 7 +3183 5 450 7 +3188 7 424 7 +318f 5 425 7 +3194 5 177 4 +3199 f 177 10 +31a8 5 453 7 +31ad 5 450 7 +31b2 7 424 7 +31b9 5 425 7 +31be d 177 4 +FUNC 31d0 116 0 google_breakpad::DynamicImage::DynamicImage(unsigned char*, unsigned long, unsigned long long, std::__1::basic_string, std::__1::allocator >, unsigned long, unsigned int, int) +31d0 2c 128 11 +31fc 17 433 7 +3213 12 1169 7 +3225 8 931 7 +322d 8 1618 3 +3235 4 932 7 +3239 3 932 7 +323c 6 933 7 +3242 4 933 7 +3246 10 1615 3 +3256 b 1617 3 +3261 4 1618 3 +3265 4 119 11 +3269 4 120 11 +326d 4 125 11 +3271 1f 122 11 +3290 8 125 11 +3298 9 126 11 +32a1 4 127 11 +32a5 7 128 11 +32ac 1b 129 11 +32c7 3 453 7 +32ca 5 450 7 +32cf 6 424 7 +32d5 4 425 7 +32d9 d 177 4 +FUNC 32f0 185 0 void std::__1::vector >::__push_back_slow_path(google_breakpad::DynamicImageRef&&) +32f0 11 1573 7 +3301 3 642 7 +3304 4 642 7 +3308 7 642 7 +330f 3 1575 7 +3312 9 963 7 +331b 8 964 7 +3323 3 372 7 +3326 4 372 7 +332a a 372 7 +3334 f 966 7 +3343 4 968 7 +3347 3 702 1 +334a 4 968 7 +334e 4 642 7 +3352 c 642 7 +335e 3 311 0 +3361 13 311 0 +3374 4 642 7 +3378 a 642 7 +3382 8 1741 3 +338a 8 169 4 +3392 4 312 0 +3396 4 313 0 +339a 3 210 11 +339d 4 210 11 +33a1 5 1578 7 +33a6 c 1628 3 +33b2 1e 1630 3 +33d0 4 210 11 +33d4 4 1630 3 +33d8 4 210 11 +33dc 4 1631 3 +33e0 5 1628 3 +33e5 b 1630 3 +33f0 4 210 11 +33f4 4 210 11 +33f8 4 210 11 +33fc 4 210 11 +3400 4 210 11 +3404 4 210 11 +3408 4 210 11 +340c 4 210 11 +3410 4 210 11 +3414 4 210 11 +3418 4 210 11 +341c 4 210 11 +3420 4 210 11 +3424 4 210 11 +3428 4 210 11 +342c 4 1630 3 +3430 4 210 11 +3434 4 1630 3 +3438 5 1628 3 +343d 3 3617 6 +3440 3 3618 6 +3443 4 3618 6 +3447 4 3618 6 +344b 5 342 0 +3450 16 177 4 +3466 f 1580 7 +FUNC 3480 5f9 0 void std::__1::__sort&, google_breakpad::DynamicImageRef*>(google_breakpad::DynamicImageRef*, google_breakpad::DynamicImageRef*, std::__1::__less&) +3480 1a 3839 1 +349a 4 4022 1 +349e 12 4022 1 +34b0 4 3876 1 +34b4 1c 3838 1 +34d0 f 4016 1 +34df 21 4018 1 +3500 5 3908 1 +3505 3 213 11 +3508 18 3951 1 +3520 4 213 11 +3524 4 214 11 +3528 4 141 11 +352c 4 141 11 +3530 3 167 11 +3533 3 213 11 +3536 6 141 11 +353c 9 3619 1 +3545 4 3618 6 +3549 17 3619 6 +3560 4 3912 1 +3564 3 214 11 +3567 a 167 11 +3571 9 3918 1 +357a 16 0 1 +3590 4 214 11 +3594 6 3920 1 +359a 16 3918 1 +35b0 5 3607 1 +35b5 4 3618 6 +35b9 3 3619 6 +35bc 4 213 11 +35c0 4 214 11 +35c4 4 141 11 +35c8 6 3612 1 +35ce 4 3618 6 +35d2 6 3619 6 +35d8 4 3618 6 +35dc 4 3619 6 +35e0 3 213 11 +35e3 6 3627 1 +35e9 4 3618 6 +35ed 1e 3619 6 +360b 4 3618 6 +360f 3 3619 6 +3612 e 3931 1 +3620 4 3618 6 +3624 3 3619 6 +3627 3 213 11 +362a 6 141 11 +3630 3 214 11 +3633 4 3936 1 +3637 6 3935 1 +363d 13 3898 1 +3650 4 214 11 +3654 4 3937 1 +3658 4 167 11 +365c 2 3937 1 +365e 5 3939 1 +3663 d 3848 1 +3670 a 3849 1 +367a a 3868 1 +3684 17 3882 1 +369b 5 3883 1 +36a0 d 3880 1 +36ad e 3884 1 +36bb 3 3885 1 +36be 4 3884 1 +36c2 5 3885 1 +36c7 3 3885 1 +36ca 12 3885 1 +36dc 3 213 11 +36df 3 213 11 +36e2 4 214 11 +36e6 4 141 11 +36ea 4 141 11 +36ee 12 167 11 +3700 4 3618 6 +3704 4 3619 6 +3708 4 3618 6 +370c 2 3954 1 +370e 4 3960 1 +3712 e 3963 1 +3720 3 3618 6 +3723 3 3619 6 +3726 2 3978 1 +3728 3 3981 1 +372b 4 3981 1 +372f 4 214 11 +3733 4 141 11 +3737 9 3970 1 +3740 8 213 11 +3748 4 167 11 +374c 2 3970 1 +374e 12 3898 1 +3760 4 213 11 +3764 4 3973 1 +3768 6 3973 1 +376e 8 3975 1 +3776 5 3987 1 +377b 4 213 11 +377f 4 214 11 +3783 4 141 11 +3787 6 3987 1 +378d 4 3618 6 +3791 4 3619 6 +3795 2 3990 1 +3797 9 3994 1 +37a0 15 3996 1 +37b5 4 3997 1 +37b9 e 3997 1 +37c7 12 3997 1 +37d9 6 4014 1 +37df 6 4014 1 +37e5 2f 4014 1 +3814 3 213 11 +3817 4 214 11 +381b 4 141 11 +381f a 3855 1 +3829 4 3618 6 +382d 8 3619 6 +3835 4 214 11 +3839 4 213 11 +383d 4 141 11 +3841 4 141 11 +3845 3 167 11 +3848 4 213 11 +384c 6 141 11 +3852 5 3619 1 +3857 6 3618 6 +385d 5 3607 1 +3862 4 3618 6 +3866 4 3619 6 +386a 5 3612 1 +386f 4 3618 6 +3873 6 3619 6 +3879 4 3618 6 +387d 4 3619 6 +3881 5 3627 1 +3886 4 3618 6 +388a 4 3619 6 +388e 8 3870 1 +3896 4 3734 1 +389a 16 3734 1 +38b0 3 214 11 +38b3 4 3734 1 +38b7 3 3870 1 +38ba 3 213 11 +38bd 4 141 11 +38c1 6 3736 1 +38c7 c 3870 1 +38d3 a 3743 1 +38dd 5 3745 1 +38e2 5 214 11 +38e7 4 3745 1 +38eb 6 167 11 +38f1 5 3746 1 +38f6 4 3734 1 +38fa 5 3734 1 +38ff f 4027 1 +390e 4 214 11 +3912 4 213 11 +3916 4 141 11 +391a 4 141 11 +391e 3 167 11 +3921 3 213 11 +3924 6 141 11 +392a 9 3619 1 +3933 4 3618 6 +3937 5 3619 6 +393c 4 3865 1 +3940 4 3865 1 +3944 4 3865 1 +3948 1d 3865 1 +3965 4 214 11 +3969 4 213 11 +396d 4 141 11 +3971 4 141 11 +3975 3 167 11 +3978 4 213 11 +397c 6 141 11 +3982 5 3619 1 +3987 9 3618 6 +3990 9 3607 1 +3999 4 3618 6 +399d 3 3619 6 +39a0 4 214 11 +39a4 4 213 11 +39a8 4 141 11 +39ac a 3612 1 +39b6 4 3618 6 +39ba 9 3619 6 +39c3 5 3607 1 +39c8 4 3618 6 +39cc 4 3619 6 +39d0 5 3612 1 +39d5 4 3618 6 +39d9 4 3619 6 +39dd 5 210 11 +39e2 4 3618 6 +39e6 4 3619 6 +39ea 3 213 11 +39ed a 3627 1 +39f7 4 3618 6 +39fb 8 3619 6 +3a03 4 3618 6 +3a07 4 3619 6 +3a0b 5 3627 1 +3a10 4 3618 6 +3a14 4 3619 6 +3a18 3 210 11 +3a1b a 214 11 +3a25 3 210 11 +3a28 3 213 11 +3a2b 4 141 11 +3a2f a 3643 1 +3a39 4 3618 6 +3a3d 3 3619 6 +3a40 4 214 11 +3a44 4 213 11 +3a48 4 141 11 +3a4c a 3647 1 +3a56 4 3618 6 +3a5a 4 3619 6 +3a5e 4 214 11 +3a62 a 3651 1 +3a6c 4 3618 6 +3a70 9 3619 6 +FUNC 3aa0 142 0 unsigned int std::__1::__sort5&, google_breakpad::DynamicImageRef*>(google_breakpad::DynamicImageRef*, google_breakpad::DynamicImageRef*, google_breakpad::DynamicImageRef*, google_breakpad::DynamicImageRef*, google_breakpad::DynamicImageRef*, std::__1::__less&) +3aa0 6 213 11 +3aa6 3 214 11 +3aa9 4 141 11 +3aad 4 141 11 +3ab1 3 167 11 +3ab4 3 213 11 +3ab7 6 141 11 +3abd 5 3619 1 +3ac2 3 3618 6 +3ac5 a 3619 6 +3acf 5 3607 1 +3ad4 3 3618 6 +3ad7 3 3619 6 +3ada 3 213 11 +3add 3 214 11 +3ae0 4 141 11 +3ae4 6 3612 1 +3aea 3 3618 6 +3aed 3 3619 6 +3af0 a 214 11 +3afa 3 3618 6 +3afd 3 3619 6 +3b00 8 213 11 +3b08 6 3627 1 +3b0e 3 3618 6 +3b11 8 3619 6 +3b19 11 210 11 +3b2a 3 213 11 +3b2d 4 141 11 +3b31 6 3643 1 +3b37 3 3618 6 +3b3a 3 3619 6 +3b3d 3 213 11 +3b40 3 214 11 +3b43 4 141 11 +3b47 6 3647 1 +3b4d 3 3618 6 +3b50 3 3619 6 +3b53 3 213 11 +3b56 3 214 11 +3b59 4 141 11 +3b5d 6 3651 1 +3b63 3 3618 6 +3b66 3 3619 6 +3b69 5 3654 1 +3b6e 4 3646 1 +3b72 3 3650 1 +3b75 3 213 11 +3b78 3 214 11 +3b7b 4 141 11 +3b7f 6 3669 1 +3b85 3 3618 6 +3b88 3 3619 6 +3b8b 3 213 11 +3b8e 3 214 11 +3b91 4 141 11 +3b95 6 3673 1 +3b9b 3 3618 6 +3b9e 3 3619 6 +3ba1 3 213 11 +3ba4 3 214 11 +3ba7 4 141 11 +3bab 6 3677 1 +3bb1 3 3618 6 +3bb4 3 3619 6 +3bb7 3 213 11 +3bba 3 214 11 +3bbd 4 141 11 +3bc1 6 3681 1 +3bc7 3 3618 6 +3bca 3 3619 6 +3bcd 5 3684 1 +3bd2 4 3672 1 +3bd6 5 3676 1 +3bdb 3 3680 1 +3bde 4 3689 1 +FUNC 3bf0 2b3 0 bool std::__1::__insertion_sort_incomplete&, google_breakpad::DynamicImageRef*>(google_breakpad::DynamicImageRef*, google_breakpad::DynamicImageRef*, std::__1::__less&) +3bf0 a 3755 1 +3bfa a 3756 1 +3c04 18 3756 1 +3c1c 4 213 11 +3c20 3 214 11 +3c23 4 141 11 +3c27 a 3762 1 +3c31 3 3618 6 +3c34 9 3619 6 +3c3d 3 214 11 +3c40 4 213 11 +3c44 4 141 11 +3c48 4 141 11 +3c4c 3 167 11 +3c4f 4 213 11 +3c53 a 141 11 +3c5d 9 3619 1 +3c66 8 3618 6 +3c6e 3 214 11 +3c71 4 213 11 +3c75 4 141 11 +3c79 4 141 11 +3c7d 3 167 11 +3c80 4 213 11 +3c84 a 141 11 +3c8e 9 3619 1 +3c97 3 3618 6 +3c9a 9 3619 6 +3ca3 4 3772 1 +3ca7 4 3772 1 +3cab 4 3772 1 +3caf 4 3772 1 +3cb3 d 3772 1 +3cc0 3 214 11 +3cc3 4 213 11 +3cc7 4 141 11 +3ccb 4 141 11 +3ccf 3 167 11 +3cd2 4 213 11 +3cd6 6 141 11 +3cdc 9 3619 1 +3ce5 8 3618 6 +3ced 9 3607 1 +3cf6 4 3618 6 +3cfa 4 3619 6 +3cfe 9 3612 1 +3d07 3 3618 6 +3d0a 6 3619 6 +3d10 9 3607 1 +3d19 4 3618 6 +3d1d 4 3619 6 +3d21 3 214 11 +3d24 4 213 11 +3d28 4 141 11 +3d2c a 3612 1 +3d36 3 3618 6 +3d39 9 3619 6 +3d42 9 3607 1 +3d4b 4 3618 6 +3d4f 4 3619 6 +3d53 9 3612 1 +3d5c 3 3618 6 +3d5f 4 3619 6 +3d63 8 210 11 +3d6b 3 3618 6 +3d6e 4 3619 6 +3d72 5 3627 1 +3d77 4 3618 6 +3d7b c 3619 6 +3d87 7 3780 1 +3d8e 22 3780 1 +3db0 3 214 11 +3db3 7 3780 1 +3dba 3 213 11 +3dbd 4 141 11 +3dc1 12 3782 1 +3dd3 9 3789 1 +3ddc 5 3791 1 +3de1 5 214 11 +3de6 4 3791 1 +3dea 6 167 11 +3df0 4 3792 1 +3df4 3 3793 1 +3df7 4 3794 1 +3dfb 6 3794 1 +3e01 6 3793 1 +3e07 4 3780 1 +3e0b 7 3780 1 +3e12 3 3618 6 +3e15 4 3619 6 +3e19 4 213 11 +3e1d 6 3627 1 +3e23 4 3618 6 +3e27 6 3619 6 +3e2d 3 3618 6 +3e30 4 3619 6 +3e34 5 3627 1 +3e39 4 3618 6 +3e3d 4 3619 6 +3e41 3 210 11 +3e44 12 214 11 +3e56 3 210 11 +3e59 4 213 11 +3e5d 4 141 11 +3e61 6 3643 1 +3e67 4 3618 6 +3e6b 4 3619 6 +3e6f 4 214 11 +3e73 4 213 11 +3e77 4 141 11 +3e7b 6 3647 1 +3e81 4 3618 6 +3e85 4 3619 6 +3e89 3 214 11 +3e8c 6 3651 1 +3e92 3 3618 6 +3e95 4 3619 6 +3e99 a 3799 1 +FUNC 3ec0 5 0 +3ec0 5 207 12 +FUNC 3ed0 20 0 google_breakpad::catch_exception_raise +3ed0 7 216 12 +3ed7 4 216 12 +3edb f 219 12 +3eea 6 220 12 +FUNC 3ef0 fc 0 google_breakpad::ForwardException(unsigned int, unsigned int, int, int*, unsigned int) +3ef0 1c 432 12 +3f0c 8 438 12 +3f14 9 439 12 +3f1d 6 441 12 +3f23 5 442 12 +3f28 5 444 12 +3f2d 5 445 12 +3f32 8 446 12 +3f3a e 440 12 +3f48 6 450 12 +3f4e 5 457 12 +3f53 d 451 12 +3f60 6 451 12 +3f66 3 450 12 +3f69 5 450 12 +3f6e 4 457 12 +3f72 2 462 12 +3f74 4 463 12 +3f78 5 468 12 +3f7d 4 462 12 +3f81 14 470 12 +3f95 a 474 12 +3f9f 13 474 12 +3fb2 10 479 12 +3fc2 a 458 12 +3fcc 16 458 12 +3fe2 a 459 12 +FUNC 3ff0 18d 0 google_breakpad::ExceptionHandler::ExceptionHandler(std::__1::basic_string, std::__1::allocator > const&, bool (*)(void*), bool (*)(char const*, char const*, void*, bool), void*, bool, char const*) +3ff0 e 240 12 +3ffe 47 1798 5 +4045 4 230 12 +4049 4 231 12 +404d 4 232 12 +4051 7 240 12 +4058 1d 234 12 +4075 1b 236 12 +4090 16 92 31 +40a6 5 125 13 +40ab 5 1697 5 +40b0 6 1785 5 +40b6 4 1779 5 +40ba 4 126 13 +40be 8 127 13 +40c6 a 243 12 +40d0 5 245 12 +40d5 d 246 12 +40e2 b 40 9 +40ed 7 105 31 +40f4 5 105 31 +40f9 5 107 31 +40fe 5 107 31 +4103 7 108 31 +410a c 248 12 +4116 c 249 12 +4122 d 246 12 +412f 7 92 31 +4136 7 98 31 +413d 5 98 31 +4142 5 98 31 +4147 8 223 12 +414f 4 98 31 +4153 5 98 31 +4158 5 98 31 +415d 8 249 12 +4165 8 249 12 +416d 10 249 12 +FUNC 4180 111 0 google_breakpad::ExceptionHandler::Setup(bool) +4180 21 736 12 +41a1 a 737 12 +41ab 7 737 12 +41b2 8 737 12 +41ba a 741 12 +41c4 8 744 12 +41cc 12 742 12 +41de 8 746 12 +41e6 2 747 12 +41e8 12 747 12 +41fa d 750 12 +4207 a 751 12 +4211 9 751 12 +421a a 754 12 +4224 8 757 12 +422c d 758 12 +4239 7 759 12 +4240 14 759 12 +4254 8 761 12 +425c a 762 12 +4266 17 765 12 +427d 14 766 12 +FUNC 42a0 e 0 google_breakpad::scoped_ptr::~scoped_ptr() +42a0 3 98 31 +42a3 5 98 31 +42a8 5 98 31 +42ad 1 99 31 +FUNC 42b0 e 0 google_breakpad::scoped_ptr::~scoped_ptr() +42b0 3 98 31 +42b3 5 98 31 +42b8 5 98 31 +42bd 1 99 31 +FUNC 42c0 9 0 +42c0 9 240 12 +FUNC 42d0 124 0 google_breakpad::ExceptionHandler::ExceptionHandler(bool (*)(void*, int, int, int, unsigned int), void*, bool) +42d0 d 267 12 +42dd 8 253 12 +42e5 47 1798 5 +432c 10 257 12 +433c 4 259 12 +4340 4 260 12 +4344 b 261 12 +434f a 262 12 +4359 7 267 12 +4360 7 92 31 +4367 1b 263 12 +4382 16 92 31 +4398 5 268 12 +439d c 269 12 +43a9 c 270 12 +43b5 7 98 31 +43bc 5 98 31 +43c1 5 98 31 +43c6 4 98 31 +43ca 5 98 31 +43cf 5 98 31 +43d4 8 270 12 +43dc 8 270 12 +43e4 10 270 12 +FUNC 4400 8 0 google_breakpad::ExceptionHandler::ExceptionHandler(bool (*)(void*, int, int, int, unsigned int), void*, bool) +4400 8 267 12 +FUNC 4410 163 0 google_breakpad::ExceptionHandler::~ExceptionHandler() +4410 1f 272 12 +442f 7 770 12 +4436 7 772 12 +443d 8 772 12 +4445 5 273 12 +444a a 795 12 +4454 8 796 12 +445c 8 804 12 +4464 6 805 12 +446a 4 805 12 +446e 8 806 12 +4476 23 808 12 +4499 4 776 12 +449d 9 777 12 +44a6 6 778 12 +44ac 5 778 12 +44b1 4 273 12 +44b5 b 785 12 +44c0 a 786 12 +44ca 7 787 12 +44d1 5 787 12 +44d6 7 98 31 +44dd 5 98 31 +44e2 5 98 31 +44e7 7 98 31 +44ee 5 98 31 +44f3 5 98 31 +44f8 4 274 12 +44fc 5 274 12 +4501 4 274 12 +4505 5 274 12 +450a 1c 274 12 +4526 13 274 12 +4539 13 274 12 +454c 5 274 12 +4551 4 274 12 +4555 5 274 12 +455a 4 274 12 +455e 5 274 12 +4563 8 274 12 +456b 8 274 12 +FUNC 4580 f8 0 google_breakpad::ExceptionHandler::Teardown() +4580 1e 768 12 +459e 7 770 12 +45a5 9 772 12 +45ae d 772 12 +45bb a 795 12 +45c5 8 796 12 +45cd 8 804 12 +45d5 6 805 12 +45db 4 805 12 +45df 8 806 12 +45e7 25 808 12 +460c 4 776 12 +4610 9 777 12 +4619 6 778 12 +461f d 778 12 +462c b 785 12 +4637 a 786 12 +4641 7 787 12 +4648 1f 787 12 +4667 11 790 12 +FUNC 4690 5 0 +4690 5 272 12 +FUNC 46a0 112 0 google_breakpad::ExceptionHandler::WriteMinidump(bool) +46a0 22 276 12 +46c2 d 278 12 +46cf 7 281 12 +46d6 7 282 12 +46dd 7 285 12 +46e4 8 285 12 +46ec 4 285 12 +46f0 7 301 12 +46f7 8 302 12 +46ff 22 303 12 +4721 c 304 12 +472d 9 288 12 +4736 a 795 12 +4740 4 796 12 +4744 5 800 12 +4749 4 800 12 +474d 8 802 12 +4755 8 804 12 +475d 6 805 12 +4763 4 805 12 +4767 8 806 12 +476f 23 808 12 +4792 3 298 12 +4795 2 813 12 +4797 2 291 12 +4799 a 292 12 +47a3 f 298 12 +FUNC 47c0 b1 0 google_breakpad::ExceptionHandler::SendMessageToHandlerThread(google_breakpad::HandlerThreadMessage) +47c0 25 793 12 +47e5 a 795 12 +47ef 4 796 12 +47f3 8 797 12 +47fb 5 800 12 +4800 4 800 12 +4804 8 802 12 +480c 8 804 12 +4814 6 805 12 +481a 4 805 12 +481e 8 806 12 +4826 23 808 12 +4849 19 813 12 +4862 f 813 12 +FUNC 4880 b4 0 google_breakpad::ExceptionHandler::UpdateNextID() +4880 c 816 12 +488c 4 817 12 +4890 8 818 12 +4898 b 818 12 +48a3 7 1697 5 +48aa 7 1741 5 +48b1 4 1776 5 +48b5 3 636 5 +48b8 8 1756 5 +48c0 a 1471 5 +48ca 19 2464 5 +48e3 14 1798 5 +48f7 5 817 12 +48fc 5 1697 5 +4901 5 1785 5 +4906 4 1779 5 +490a 4 820 12 +490e 7 1697 5 +4915 5 1785 5 +491a 4 1779 5 +491e 4 821 12 +4922 a 822 12 +492c 8 1471 5 +FUNC 4940 96 0 google_breakpad::ExceptionHandler::WriteMinidump(std::__1::basic_string, std::__1::allocator > const&, bool, bool (*)(char const*, char const*, void*, bool), void*) +4940 21 310 12 +4961 23 240 12 +4984 12 313 12 +4996 19 272 12 +49af 1a 314 12 +49c9 d 272 12 +FUNC 49e0 139 0 google_breakpad::ExceptionHandler::WriteMinidumpForChild(unsigned int, unsigned int, std::__1::basic_string, std::__1::allocator > const&, bool (*)(char const*, char const*, void*, bool), void*) +49e0 1d 321 12 +49fd 5 43 27 +4a02 f 324 12 +4a11 10 1798 5 +4a21 11 326 12 +4a32 8 102 15 +4a3a 8 103 15 +4a42 8 104 15 +4a4a 4 105 15 +4a4e 5 1697 5 +4a53 5 1785 5 +4a58 6 1791 5 +4a5e c 340 12 +4a6a 5 342 12 +4a6f 4 1785 5 +4a73 4 1697 5 +4a77 5 1791 5 +4a7c 4 1697 5 +4a80 5 1785 5 +4a85 6 1791 5 +4a8b 10 343 12 +4a9b 9 347 12 +4aa4 a 347 12 +4aae 5 347 12 +4ab3 8 47 27 +4abb 14 347 12 +4acf 10 47 27 +4adf e 347 12 +4aed a 347 12 +4af7 a 347 12 +4b01 10 47 27 +4b11 8 47 27 +FUNC 4b20 252 0 google_breakpad::ExceptionHandler::WriteMinidumpWithException(int, int, int, __darwin_ucontext*, unsigned int, bool, bool) +4b20 27 356 12 +4b47 7 364 12 +4b4e 5 364 12 +4b53 6 365 12 +4b59 d 365 12 +4b66 11 365 12 +4b77 7 371 12 +4b7e 7 122 31 +4b85 3 163 13 +4b88 4 374 12 +4b8c 14 375 12 +4ba0 9 378 12 +4ba9 4 378 12 +4bad 2 378 12 +4baf 8 378 12 +4bb7 10 119 31 +4bc7 14 380 12 +4bdb 17 385 12 +4bf2 8 386 12 +4bfa 11 1798 5 +4c0b 3 1749 5 +4c0e 2 1697 5 +4c10 6 1460 5 +4c16 5 1749 5 +4c1b 6 1759 5 +4c21 10 1474 5 +4c31 9 396 12 +4c3a 4 397 12 +4c3e f 398 12 +4c4d c 396 12 +4c59 11 399 12 +4c6a 9 400 12 +4c73 b 403 12 +4c7e 4 403 12 +4c82 2 403 12 +4c84 a 403 12 +4c8e 4 102 15 +4c92 5 103 15 +4c97 5 104 15 +4c9c 5 105 15 +4ca1 4 410 12 +4ca5 12 410 12 +4cb7 c 411 12 +4cc3 c 414 12 +4ccf 4 418 12 +4cd3 4 418 12 +4cd7 4 418 12 +4cdb 6 418 12 +4ce1 c 418 12 +4ced 5 424 12 +4cf2 6 426 12 +4cf8 1b 427 12 +4d13 a 411 12 +4d1d 9 424 12 +4d26 9 421 12 +4d2f 27 119 31 +4d56 f 411 12 +4d65 d 424 12 +FUNC 4d80 2d2 0 google_breakpad::ExceptionHandler::WaitForMessage(void*) +4d80 26 483 12 +4da6 11 555 12 +4db7 19 828 12 +4dd0 4 606 12 +4dd4 1c 605 12 +4df0 7 490 12 +4df7 5 490 12 +4dfc 8 491 12 +4e04 1e 492 12 +4e22 4 499 12 +4e26 e 511 12 +4e34 4 565 12 +4e38 a 565 12 +4e42 11 828 12 +4e53 8 832 12 +4e5b 5 566 12 +4e60 8 833 12 +4e68 5 833 12 +4e6d 4 833 12 +4e71 8 834 12 +4e79 5 834 12 +4e7e 4 834 12 +4e82 3 832 12 +4e85 9 832 12 +4e8e 5 579 12 +4e93 7 574 12 +4e9a 14 574 12 +4eae 3 574 12 +4eb1 3 574 12 +4eb4 3 574 12 +4eb7 7 578 12 +4ebe 1a 578 12 +4ed8 d 590 12 +4ee5 b 207 12 +4ef0 d 601 12 +4efd 5 514 12 +4f02 9 514 12 +4f0b 4 828 12 +4f0f 11 828 12 +4f20 8 832 12 +4f28 8 517 12 +4f30 9 833 12 +4f39 5 833 12 +4f3e 5 833 12 +4f43 8 834 12 +4f4b 5 834 12 +4f50 4 834 12 +4f54 3 832 12 +4f57 9 832 12 +4f60 f 527 12 +4f6f 18 527 12 +4f87 1c 543 12 +4fa3 a 542 12 +4fad 4 846 12 +4fb1 11 846 12 +4fc2 8 850 12 +4fca 6 552 12 +4fd0 8 851 12 +4fd8 5 851 12 +4fdd 4 851 12 +4fe1 8 852 12 +4fe9 5 852 12 +4fee 4 852 12 +4ff2 3 850 12 +4ff5 9 850 12 +4ffe e 554 12 +500c 23 555 12 +502f 14 613 12 +5043 f 602 12 +FUNC 5060 70 0 google_breakpad::ExceptionHandler::SuspendThreads() +5060 1b 828 12 +507b 5 828 12 +5080 7 828 12 +5087 f 840 12 +5096 a 832 12 +50a0 8 833 12 +50a8 5 833 12 +50ad 4 833 12 +50b1 8 834 12 +50b9 5 834 12 +50be 4 834 12 +50c2 3 832 12 +50c5 b 832 12 +FUNC 50d0 70 0 google_breakpad::ExceptionHandler::ResumeThreads() +50d0 1b 846 12 +50eb 5 846 12 +50f0 7 846 12 +50f7 f 858 12 +5106 a 850 12 +5110 8 851 12 +5118 5 851 12 +511d 4 851 12 +5121 8 852 12 +5129 5 852 12 +512e 4 852 12 +5132 3 850 12 +5135 b 850 12 +FUNC 5140 e6 0 google_breakpad::ExceptionHandler::UninstallHandler(bool) +5140 e 694 12 +514e 8 122 31 +5156 5 697 12 +515b c 698 12 +5167 8 105 31 +516f 5 105 31 +5174 5 107 31 +5179 c 108 31 +5185 e 704 12 +5193 b 707 12 +519e 8 711 12 +51a6 5 711 12 +51ab 15 708 12 +51c0 4 712 12 +51c4 4 713 12 +51c8 4 714 12 +51cc 8 715 12 +51d4 7 712 12 +51db 4 716 12 +51df 3 711 12 +51e2 8 711 12 +51ea 2 711 12 +51ec 5 711 12 +51f1 a 725 12 +51fb 5 725 12 +5200 c 729 12 +520c e 730 12 +521a c 734 12 +FUNC 5230 47 0 google_breakpad::ExceptionHandler::SignalHandler(int, __siginfo*, void*) +5230 a 616 12 +523a 7 621 12 +5241 5 626 12 +5246 29 621 12 +526f 8 633 12 +FUNC 5280 161 0 google_breakpad::ExceptionHandler::InstallHandler() +5280 9 635 12 +5289 e 637 12 +5297 a 640 12 +52a1 a 665 12 +52ab 7 665 12 +52b2 6 673 12 +52b8 9 674 12 +52c1 6 676 12 +52c7 4 677 12 +52cb 4 679 12 +52cf 4 680 12 +52d3 7 681 12 +52da e 675 12 +52e8 4 684 12 +52ec 6 685 12 +52f2 6 686 12 +52f8 12 685 12 +530a 5 689 12 +530f 7 689 12 +5316 7 692 12 +531d 8 644 12 +5325 c 645 12 +5331 8 646 12 +5339 d 648 12 +5346 12 649 12 +5358 3 649 12 +535b 2 649 12 +535d 7 132 31 +5364 7 133 31 +536b 7 653 12 +5372 9 98 31 +537b a 98 31 +5385 10 98 31 +5395 13 98 31 +53a8 5 667 12 +53ad 8 667 12 +53b5 10 82 4 +53c5 d 667 12 +53d2 5 670 12 +53d7 a 670 12 +FUNC 53f0 316 0 google_breakpad::MinidumpGenerator::MinidumpGenerator() +53f0 c 83 14 +53fc b 83 14 +5407 c 73 14 +5413 10 75 14 +5423 9 78 14 +542c 4 78 14 +5430 5 79 14 +5435 4 79 14 +5439 8 80 14 +5441 4 190 30 +5445 5 63 30 +544a 3 90 30 +544d 10 82 14 +545d 4 63 30 +5461 3e 2065 3 +549f 1d 2065 3 +54bc 7 90 30 +54c3 8 90 30 +54cb 4 119 30 +54cf 20 119 30 +54ef 6 121 30 +54f5 4 131 30 +54f9 3 131 30 +54fc 4 132 30 +5500 4 133 30 +5504 4 135 30 +5508 5 92 30 +550d 4 98 30 +5511 7 96 30 +5518 b 96 30 +5523 5 96 30 +5528 4 95 30 +552c 3 98 30 +552f 4 98 30 +5533 3 98 30 +5536 7 98 30 +553d 4 98 30 +5541 9 100 30 +554a 4 893 7 +554e 7 893 7 +5555 7 313 0 +555c 3 1628 3 +555f 9 3618 6 +5568 28 1630 3 +5590 8 1752 3 +5598 4 1630 3 +559c 8 1752 3 +55a4 4 1631 3 +55a8 a 1628 3 +55b2 1e 1630 3 +55d0 7f 1752 3 +564f 4 1630 3 +5653 13 1628 3 +5666 4 3618 6 +566a 7 3618 6 +5671 7 3618 6 +5678 5 84 14 +567d f 85 14 +568c 4 450 7 +5690 5 450 7 +5695 7 424 7 +569c 5 424 7 +56a1 11 0 7 +56b2 7 425 7 +56b9 4 64 30 +56bd 13 143 30 +56d0 5 143 30 +56d5 3 71 30 +56d8 3 144 30 +56db 4 145 30 +56df 5 145 30 +56e4 7 145 30 +56eb b 71 30 +56f6 10 85 14 +FUNC 5710 259 0 google_breakpad::MinidumpGenerator::GatherSystemInformation() +5710 20 123 14 +5730 21 125 14 +5751 f 192 14 +5760 15 132 14 +5775 d 136 14 +5782 8 137 14 +578a 5 138 14 +578f a 141 14 +5799 b 141 14 +57a4 13 151 14 +57b7 19 152 14 +57d0 5 158 14 +57d5 5 160 14 +57da c 161 14 +57e6 e 163 14 +57f4 13 151 14 +5807 5 152 14 +580c 5 153 14 +5811 b 154 14 +581c 8 165 14 +5824 8 166 14 +582c 9 167 14 +5835 14 171 14 +5849 8 173 14 +5851 9 174 14 +585a 12 178 14 +586c 17 180 14 +5883 8 181 14 +588b d 182 14 +5898 8 184 14 +58a0 5 1697 5 +58a5 5 1785 5 +58aa 6 1791 5 +58b0 11 186 14 +58c1 c 189 14 +58cd 6 189 14 +58d3 f 190 14 +58e2 6 190 14 +58e8 f 191 14 +58f7 b 191 14 +5902 a 192 14 +590c 1e 192 14 +592a 28 142 14 +5952 a 192 14 +595c d 192 14 +FUNC 5970 5 0 google_breakpad::MinidumpGenerator::MinidumpGenerator() +5970 5 83 14 +FUNC 5980 343 0 google_breakpad::MinidumpGenerator::MinidumpGenerator(unsigned int, unsigned int) +5980 10 101 14 +5990 a 101 14 +599a c 91 14 +59a6 10 93 14 +59b6 4 96 14 +59ba 3 97 14 +59bd 7 98 14 +59c4 4 190 30 +59c8 5 63 30 +59cd 3 90 30 +59d0 10 100 14 +59e0 4 63 30 +59e4 3e 2065 3 +5a22 1d 2065 3 +5a3f 7 90 30 +5a46 8 90 30 +5a4e 4 119 30 +5a52 20 119 30 +5a72 6 121 30 +5a78 4 131 30 +5a7c 3 131 30 +5a7f 4 132 30 +5a83 4 133 30 +5a87 4 135 30 +5a8b 5 92 30 +5a90 4 98 30 +5a94 7 96 30 +5a9b b 96 30 +5aa6 5 96 30 +5aab 4 95 30 +5aaf 3 98 30 +5ab2 4 98 30 +5ab6 3 98 30 +5ab9 7 98 30 +5ac0 4 98 30 +5ac4 9 100 30 +5acd 4 893 7 +5ad1 7 893 7 +5ad8 7 313 0 +5adf 3 1628 3 +5ae2 9 3618 6 +5aeb 25 1630 3 +5b10 8 1752 3 +5b18 4 1630 3 +5b1c 8 1752 3 +5b24 4 1631 3 +5b28 a 1628 3 +5b32 1e 1630 3 +5b50 7f 1752 3 +5bcf 4 1630 3 +5bd3 13 1628 3 +5be6 4 3618 6 +5bea 7 3618 6 +5bf1 7 3618 6 +5bf8 7 102 14 +5bff 5 102 14 +5c04 f 106 14 +5c13 d 103 14 +5c20 3 103 14 +5c23 8 103 14 +5c2b 4 103 14 +5c2f 3 268 11 +5c32 3 104 14 +5c35 5 110 14 +5c3a c 111 14 +5c46 f 103 14 +5c55 4 450 7 +5c59 5 450 7 +5c5e 7 424 7 +5c65 5 424 7 +5c6a 11 0 7 +5c7b 7 425 7 +5c82 4 64 30 +5c86 a 143 30 +5c90 5 143 30 +5c95 3 71 30 +5c98 3 144 30 +5c9b 4 145 30 +5c9f 5 145 30 +5ca4 7 145 30 +5cab 10 111 14 +5cbb 8 71 30 +FUNC 5cd0 5 0 google_breakpad::MinidumpGenerator::MinidumpGenerator(unsigned int, unsigned int) +5cd0 5 101 14 +FUNC 5ce0 94 0 google_breakpad::MinidumpGenerator::~MinidumpGenerator() +5ce0 8 113 14 +5ce8 a 113 14 +5cf2 4 114 14 +5cf6 5 114 14 +5cfb 8 243 11 +5d03 8 114 14 +5d0b 4 450 7 +5d0f 5 450 7 +5d14 7 424 7 +5d1b 5 424 7 +5d20 11 0 7 +5d31 7 425 7 +5d38 8 143 30 +5d40 5 143 30 +5d45 3 71 30 +5d48 3 144 30 +5d4b 4 145 30 +5d4f 5 145 30 +5d54 7 145 30 +5d5b 4 115 14 +5d5f d 115 14 +5d6c 8 71 30 +FUNC 5d80 5 0 +5d80 5 113 14 +FUNC 5d90 12 0 google_breakpad::MinidumpGenerator::~MinidumpGenerator() +5d90 4 113 14 +5d94 5 113 14 +5d99 9 113 14 +FUNC 5db0 5 0 google_breakpad::MinidumpGenerator::SetTaskContext(__darwin_ucontext*) +5db0 4 195 14 +5db4 1 196 14 +FUNC 5dc0 114 0 google_breakpad::MinidumpGenerator::UniqueNameInDirectory(std::__1::basic_string, std::__1::allocator > const&, std::__1::basic_string, std::__1::allocator >*) +5dc0 16 199 14 +5dd6 a 200 14 +5de0 d 201 14 +5ded d 202 14 +5dfa 8 203 14 +5e02 8 204 14 +5e0a b 205 14 +5e15 5 1749 5 +5e1a 6 1749 5 +5e20 2 1697 5 +5e22 6 1460 5 +5e28 5 1474 5 +5e2d 3 210 14 +5e30 8 210 14 +5e38 5 210 14 +5e3d 12 211 14 +5e4f 5 1749 5 +5e54 4 1697 5 +5e58 5 1785 5 +5e5d 6 1791 5 +5e63 3 1749 5 +5e66 2 1697 5 +5e68 6 1460 5 +5e6e 8 2677 5 +5e76 f 215 14 +5e85 5 217 14 +5e8a 12 218 14 +5e9c 1e 221 14 +5eba d 221 14 +5ec7 d 221 14 +FUNC 5ee0 2b3 0 google_breakpad::MinidumpGenerator::Write(char const*) +5ee0 14 223 14 +5ef4 4 241 14 +5ef8 8 241 14 +5f00 8 241 14 +5f08 5 159 18 +5f0d 4 117 18 +5f11 4 160 18 +5f15 2d 211 18 +5f42 4 159 18 +5f46 4 160 18 +5f4a 1b 211 18 +5f65 8 46 16 +5f6d f 47 16 +5f7c d 245 14 +5f89 7 252 14 +5f90 e 252 14 +5f9e 2 256 14 +5fa0 5 59 16 +5fa5 d 59 16 +5fb2 c 60 16 +5fbe 9 60 16 +5fc7 d 256 14 +5fd4 f 260 14 +5fe3 5 262 14 +5fe8 5 262 14 +5fed 4 263 14 +5ff1 4 168 18 +5ff5 1b 264 14 +6010 7 269 14 +6017 9 269 14 +6020 8 269 14 +6028 8 269 14 +6030 5 271 14 +6035 b 73 16 +6040 8 74 16 +6048 10 74 16 +6058 8 268 14 +6060 24 268 14 +6084 f 216 18 +6093 5 216 18 +6098 4 92 16 +609c 4 92 16 +60a0 5 92 16 +60a5 a 92 16 +60af 7 216 18 +60b6 5 92 16 +60bb 4 92 16 +60bf 5 92 16 +60c4 13 92 16 +60d7 6 275 14 +60dd 12 276 14 +60ef 23 73 16 +6112 8 217 18 +611a 12 217 18 +612c 5 216 18 +6131 a 276 14 +613b a 216 18 +6145 4 92 16 +6149 4 92 16 +614d 5 92 16 +6152 a 92 16 +615c 7 216 18 +6163 5 92 16 +6168 4 92 16 +616c 5 92 16 +6171 12 92 16 +6183 8 217 18 +618b 8 217 18 +FUNC 61a0 246 0 google_breakpad::MinidumpGenerator::WriteThreadListStream(MDRawDirectory*) +61a0 17 989 14 +61b7 4 990 14 +61bb 5 159 18 +61c0 3 117 18 +61c3 4 160 18 +61c7 50 211 18 +6217 3 995 14 +621a f 995 14 +6229 2 995 14 +622b 2 995 14 +622d a 216 18 +6237 4 1000 14 +623b 9 999 14 +6244 8 66 16 +624c 3 1003 14 +624f 8 67 16 +6257 8 68 16 +625f 4 68 16 +6263 a 68 16 +626d 5 67 16 +6272 8 1003 14 +627a 7 1007 14 +6281 4 177 18 +6285 4 175 18 +6289 7 177 18 +6290 4 1008 14 +6294 4 1010 14 +6298 7 1015 14 +629f a 1015 14 +62a9 2c 1016 14 +62d5 8 1018 14 +62dd 5 1018 14 +62e2 f 1019 14 +62f1 4 1019 14 +62f5 7 83 16 +62fc 5 84 16 +6301 9 86 16 +630a 3 85 16 +630d 4 86 16 +6311 d 84 16 +631e 3 1022 14 +6321 4 1015 14 +6325 3 1016 14 +6328 3 1015 14 +632b c 1015 14 +6337 6 216 18 +633d 5 92 16 +6342 4 92 16 +6346 5 92 16 +634b a 92 16 +6355 15 1027 14 +636a 1f 83 16 +6389 21 66 16 +63aa d 217 18 +63b7 7 216 18 +63be 5 92 16 +63c3 4 92 16 +63c7 5 92 16 +63cc 12 92 16 +63de 8 217 18 +FUNC 63f0 51f 0 google_breakpad::MinidumpGenerator::WriteMemoryListStream(MDRawDirectory*) +63f0 29 1030 14 +6419 4 1031 14 +641d 5 159 18 +6422 4 117 18 +6426 4 160 18 +642a 2c 211 18 +6456 4 1043 14 +645a 4 1038 14 +645e 7 1038 14 +6465 8 1040 14 +646d 7 896 14 +6474 5 896 14 +6479 4 896 14 +647d 4 918 14 +6481 f 897 14 +6490 4 918 14 +6494 e 918 14 +64a2 4 921 14 +64a6 a 918 14 +64b0 3 921 14 +64b3 4 922 14 +64b7 4 922 14 +64bb 4 922 14 +64bf 3 702 1 +64c2 4 921 14 +64c6 b 923 14 +64d1 5 922 14 +64d6 14 923 14 +64ea 9 931 14 +64f3 11 931 14 +6504 14 961 14 +6518 f 1043 14 +6527 4 443 14 +652b 13 443 14 +653e 9 794 14 +6547 8 802 14 +654f 5 1048 14 +6554 8 1050 14 +655c 8 1052 14 +6564 4 1057 14 +6568 1e 1057 14 +6586 c 1063 14 +6592 5 1071 14 +6597 f 1063 14 +65a6 3 1063 14 +65a9 5 1063 14 +65ae 4 1068 14 +65b2 4 1070 14 +65b6 3 702 1 +65b9 7 1067 14 +65c0 5 1066 14 +65c5 3 1072 14 +65c8 3 702 1 +65cb 5 1072 14 +65d0 4 1074 14 +65d4 7 1587 7 +65db 7 1587 7 +65e2 2 1587 7 +65e4 11 1752 3 +65f5 12 1593 7 +6607 7 1080 14 +660e 10 1596 7 +661e 7 642 7 +6625 11 642 7 +6636 8 67 16 +663e 4 68 16 +6642 a 68 16 +664c 8 1087 14 +6654 6 1091 14 +665a 4 177 18 +665e 4 175 18 +6662 7 177 18 +6669 4 1092 14 +666d 13 1094 14 +6680 b 83 16 +668b 8 1501 7 +6693 5 84 16 +6698 4 85 16 +669c e 84 16 +66aa 2 1097 14 +66ac 5 1097 14 +66b1 8 1097 14 +66b9 9 1102 14 +66c2 8 159 18 +66ca 4 117 18 +66ce 7 160 18 +66d5 c 161 18 +66e1 4 1105 14 +66e5 d 1105 14 +66f2 8 1105 14 +66fa 5 1108 14 +66ff 6 1108 14 +6705 14 433 7 +6719 4 1111 14 +671d 5 1112 14 +6722 4 1113 14 +6726 10 1111 14 +6736 4 1114 14 +673a 5 1501 7 +673f 7 1118 14 +6746 7 186 18 +674d d 186 18 +675a 5 453 7 +675f 5 450 7 +6764 7 424 7 +676b 5 425 7 +6770 c 177 4 +677c 7 216 18 +6783 5 92 16 +6788 4 92 16 +678c 5 92 16 +6791 22 92 16 +67b3 14 1133 14 +67c7 5 1122 14 +67cc 4 1123 14 +67d0 7 186 18 +67d7 d 186 18 +67e4 7 177 18 +67eb 7 175 18 +67f2 7 177 18 +67f9 5 1126 14 +67fe b 83 16 +6809 5 84 16 +680e 1a 84 16 +6828 1f 83 16 +6847 24 66 16 +686b 1f 465 14 +688a 26 83 16 +68b0 5 453 7 +68b5 5 450 7 +68ba 7 424 7 +68c1 5 425 7 +68c6 d 177 4 +68d3 d 217 18 +68e0 7 216 18 +68e7 5 92 16 +68ec 4 92 16 +68f0 5 92 16 +68f5 12 92 16 +6907 8 217 18 +FUNC 6910 25d 0 google_breakpad::MinidumpGenerator::WriteSystemInfoStream(MDRawDirectory*) +6910 21 1171 14 +6931 4 1172 14 +6935 5 159 18 +693a 3 117 18 +693d 4 160 18 +6941 48 211 18 +6989 8 46 16 +6991 f 47 16 +69a0 8 1174 14 +69a8 7 1177 14 +69af 4 177 18 +69b3 4 175 18 +69b7 7 177 18 +69be 4 1178 14 +69c2 9 1182 14 +69cb 1b 1183 14 +69e6 3 1206 14 +69e9 14 1186 14 +69fd 2 1237 14 +69ff 3 1206 14 +6a02 8 1207 14 +6a0a 5 1207 14 +6a0f 10 1237 14 +6a1f f 1241 14 +6a2e 5 1246 14 +6a33 5 1260 14 +6a38 5 1245 14 +6a3d 5 1249 14 +6a42 b 1250 14 +6a4d 2 1249 14 +6a4f 5 1248 14 +6a54 10 1253 14 +6a64 b 1256 14 +6a6f 7 1255 14 +6a76 8 1260 14 +6a7e 6 1262 14 +6a84 a 1261 14 +6a8e 7 1269 14 +6a95 4 1273 14 +6a99 4 1273 14 +6a9d 8 1277 14 +6aa5 16 1282 14 +6abb 4 1282 14 +6abf 4 1286 14 +6ac3 4 1286 14 +6ac7 6 1287 14 +6acd 4 1287 14 +6ad1 6 1288 14 +6ad7 4 1288 14 +6adb 6 1289 14 +6ae1 a 1289 14 +6aeb 7 216 18 +6af2 5 92 16 +6af7 4 92 16 +6afb 5 92 16 +6b00 1b 92 16 +6b1b 14 1292 14 +6b2f f 217 18 +6b3e 7 216 18 +6b45 5 92 16 +6b4a 4 92 16 +6b4e 5 92 16 +6b53 12 92 16 +6b65 8 217 18 +FUNC 6b70 28d 0 google_breakpad::MinidumpGenerator::WriteModuleListStream(MDRawDirectory*) +6b70 17 1490 14 +6b87 4 1491 14 +6b8b 5 159 18 +6b90 3 117 18 +6b93 4 160 18 +6b97 5 161 18 +6b9c f 211 18 +6bab 9 1493 14 +6bb4 4 642 7 +6bb8 a 642 7 +6bc2 8 1495 14 +6bca 9 66 16 +6bd3 3 1497 14 +6bd6 b 67 16 +6be1 4 68 16 +6be5 4 68 16 +6be9 a 68 16 +6bf3 8 1497 14 +6bfb 7 1500 14 +6c02 4 177 18 +6c06 4 175 18 +6c0a 7 177 18 +6c11 4 1501 14 +6c15 5 1502 14 +6c1a c 1400 14 +6c26 2 1400 14 +6c28 8 1401 14 +6c30 7 1404 14 +6c37 7 1407 14 +6c3e 12 1410 14 +6c50 8 1411 14 +6c58 6 1413 14 +6c5e 3 1410 14 +6c61 8 1410 14 +6c69 15 1508 14 +6c7e 8 1508 14 +6c86 e 83 16 +6c94 5 84 16 +6c99 4 85 16 +6c9d 3 86 16 +6ca0 30 84 16 +6cd0 5 1516 14 +6cd5 f 1517 14 +6ce4 4 1517 14 +6ce8 a 83 16 +6cf2 5 84 16 +6cf7 4 85 16 +6cfb 4 86 16 +6cff 4 86 16 +6d03 d 84 16 +6d10 3 1521 14 +6d13 5 1515 14 +6d18 9 1515 14 +6d21 a 216 18 +6d2b 5 92 16 +6d30 4 92 16 +6d34 5 92 16 +6d39 a 92 16 +6d43 14 1526 14 +6d57 1f 83 16 +6d76 1f 66 16 +6d95 23 83 16 +6db8 13 217 18 +6dcb a 216 18 +6dd5 5 92 16 +6dda 4 92 16 +6dde 5 92 16 +6de3 12 92 16 +6df5 8 217 18 +FUNC 6e00 259 0 google_breakpad::MinidumpGenerator::WriteMiscInfoStream(MDRawDirectory*) +6e00 1d 1528 14 +6e1d 4 1529 14 +6e21 8 159 18 +6e29 3 117 18 +6e2c 7 160 18 +6e33 8 161 18 +6e3b a 211 18 +6e45 b 46 16 +6e50 12 47 16 +6e62 8 1531 14 +6e6a 6 1534 14 +6e70 7 177 18 +6e77 7 175 18 +6e7e 7 177 18 +6e85 4 1535 14 +6e89 12 1538 14 +6e9b 5 1544 14 +6ea0 7 1544 14 +6ea7 c 1548 14 +6eb3 5 1548 14 +6eb8 4 1551 14 +6ebc 7 1550 14 +6ec3 4 1553 14 +6ec7 7 1552 14 +6ece 1d 1555 14 +6eeb 7 1556 14 +6ef2 7 1555 14 +6ef9 8 1559 14 +6f01 24 1560 14 +6f25 4 1560 14 +6f29 7 1562 14 +6f30 7 1561 14 +6f37 8 1568 14 +6f3f 1a 1569 14 +6f59 13 1570 14 +6f6c 7 1570 14 +6f73 7 1571 14 +6f7a 8 1572 14 +6f82 1a 1573 14 +6f9c 13 1574 14 +6faf d 1574 14 +6fbc a 216 18 +6fc6 8 92 16 +6fce 7 92 16 +6fd5 8 92 16 +6fdd 1e 92 16 +6ffb 10 1577 14 +700b 13 217 18 +701e a 216 18 +7028 8 92 16 +7030 7 92 16 +7037 8 92 16 +703f 12 92 16 +7051 8 217 18 +FUNC 7060 10b 0 google_breakpad::MinidumpGenerator::WriteBreakpadInfoStream(MDRawDirectory*) +7060 d 1580 14 +706d 4 1581 14 +7071 4 159 18 +7075 3 117 18 +7078 4 160 18 +707c 1b 211 18 +7097 8 46 16 +709f e 47 16 +70ad 4 1583 14 +70b1 7 1586 14 +70b8 4 177 18 +70bc 4 175 18 +70c0 7 177 18 +70c7 4 1587 14 +70cb 3 1594 14 +70ce 4 1590 14 +70d2 6 1590 14 +70d8 8 1591 14 +70e0 3 1593 14 +70e3 4 1593 14 +70e7 a 1594 14 +70f1 8 1596 14 +70f9 3 1597 14 +70fc 4 1597 14 +7100 a 1598 14 +710a 7 216 18 +7111 4 92 16 +7115 4 92 16 +7119 5 92 16 +711e a 92 16 +7128 a 1602 14 +7132 b 217 18 +713d 7 216 18 +7144 4 92 16 +7148 4 92 16 +714c 5 92 16 +7151 12 92 16 +7163 8 217 18 +FUNC 7170 113 0 google_breakpad::MinidumpGenerator::CalculateStackSize(unsigned long long) +7170 14 278 14 +7184 5 279 14 +7189 8 281 14 +7191 8 283 14 +7199 9 288 14 +71a2 1c 293 14 +71be 9 293 14 +71c7 8 297 14 +71cf e 297 14 +71dd b 311 14 +71e8 18 314 14 +7200 f 329 14 +720f 5 313 14 +7214 3 313 14 +7217 5 313 14 +721c 8 317 14 +7224 8 318 14 +722c 3 319 14 +722f 18 319 14 +7247 12 322 14 +7259 7 325 14 +7260 5 333 14 +7265 3 333 14 +7268 c 333 14 +7274 f 334 14 +FUNC 7290 176 0 google_breakpad::MinidumpGenerator::WriteStackFromStartAddress(unsigned long long, MDMemoryDescriptor*) +7290 15 338 14 +72a5 4 339 14 +72a9 5 159 18 +72ae 3 117 18 +72b1 4 160 18 +72b5 9 161 18 +72be d 342 14 +72cb 9 344 14 +72d4 8 361 14 +72dc 8 361 14 +72e4 5 364 14 +72e9 6 364 14 +72ef 11 433 7 +7300 3 366 14 +7303 13 366 14 +7316 9 369 14 +731f 5 1501 7 +7324 4 186 18 +7328 13 186 18 +733b 5 453 7 +7340 5 450 7 +7345 7 424 7 +734c 5 425 7 +7351 e 177 4 +735f a 350 14 +7369 4 350 14 +736d c 355 14 +7379 e 186 18 +7387 19 186 18 +73a0 9 186 18 +73a9 e 186 18 +73b7 3 379 14 +73ba 4 177 18 +73be 4 175 18 +73c2 7 177 18 +73c9 4 380 14 +73cd 6 382 14 +73d3 10 383 14 +73e3 5 453 7 +73e8 5 450 7 +73ed 7 424 7 +73f4 5 425 7 +73f9 d 177 4 +FUNC 7410 24 0 +7410 4 387 14 +7414 c 387 14 +7420 5 775 14 +7425 4 785 14 +7429 9 786 14 +7432 2 411 14 +FUNC 7440 8 0 google_breakpad::MinidumpGenerator::WriteStackX86(unsigned int*, MDMemoryDescriptor*) +7440 3 775 14 +7443 5 776 14 +FUNC 7450 9 0 google_breakpad::MinidumpGenerator::WriteStackX86_64(unsigned int*, MDMemoryDescriptor*) +7450 4 785 14 +7454 5 786 14 +FUNC 7460 22 0 +7460 4 415 14 +7464 c 415 14 +7470 7 432 14 +7477 9 434 14 +7480 2 439 14 +FUNC 7490 1a7 0 google_breakpad::MinidumpGenerator::WriteContextX86(unsigned int*, MDLocationDescriptor*) +7490 22 807 14 +74b2 4 808 14 +74b6 5 159 18 +74bb 3 117 18 +74be 4 160 18 +74c2 5 161 18 +74c7 a 211 18 +74d1 b 46 16 +74dc f 47 16 +74eb 8 812 14 +74f3 4 177 18 +74f7 4 175 18 +74fb 7 177 18 +7502 3 815 14 +7505 8 821 14 +750d 9 822 14 +7516 a 823 14 +7520 a 824 14 +752a a 825 14 +7534 a 826 14 +753e a 827 14 +7548 a 828 14 +7552 a 829 14 +755c a 831 14 +7566 a 832 14 +7570 a 833 14 +757a a 834 14 +7584 a 835 14 +758e a 836 14 +7598 a 837 14 +75a2 10 839 14 +75b2 a 216 18 +75bc 5 92 16 +75c1 4 92 16 +75c5 5 92 16 +75ca 1e 92 16 +75e8 12 843 14 +75fa b 217 18 +7605 a 216 18 +760f 5 92 16 +7614 4 92 16 +7618 5 92 16 +761d 12 92 16 +762f 8 217 18 +FUNC 7640 1c1 0 google_breakpad::MinidumpGenerator::WriteContextX86_64(unsigned int*, MDLocationDescriptor*) +7640 22 847 14 +7662 4 848 14 +7666 4 159 18 +766a 3 117 18 +766d 4 160 18 +7671 5 161 18 +7676 a 211 18 +7680 b 46 16 +768b e 47 16 +7699 8 852 14 +76a1 4 177 18 +76a5 4 175 18 +76a9 7 177 18 +76b0 3 855 14 +76b3 8 861 14 +76bb b 862 14 +76c6 c 863 14 +76d2 c 864 14 +76de c 866 14 +76ea c 867 14 +76f6 c 868 14 +7702 c 869 14 +770e c 870 14 +771a c 872 14 +7726 c 874 14 +7732 c 876 14 +773e c 877 14 +774a 6 883 14 +7750 4 883 14 +7754 c 884 14 +7760 c 885 14 +776c 12 886 14 +777e a 216 18 +7788 4 92 16 +778c 4 92 16 +7790 5 92 16 +7795 1e 92 16 +77b3 12 890 14 +77c5 b 217 18 +77d0 a 216 18 +77da 4 92 16 +77de 4 92 16 +77e2 5 92 16 +77e7 12 92 16 +77f9 8 217 18 +FUNC 7810 3d 0 google_breakpad::MinidumpGenerator::CurrentPCForStack(unsigned int*) +7810 4 443 14 +7814 c 443 14 +7820 3 794 14 +7823 2 468 14 +7825 7 802 14 +782c 2 468 14 +782e 1f 465 14 +FUNC 7850 4 0 google_breakpad::MinidumpGenerator::CurrentPCForStackX86(unsigned int*) +7850 3 794 14 +7853 1 794 14 +FUNC 7860 8 0 google_breakpad::MinidumpGenerator::CurrentPCForStackX86_64(unsigned int*) +7860 7 802 14 +7867 1 802 14 +FUNC 7870 b5 0 google_breakpad::MinidumpGenerator::GetThreadState(unsigned int, unsigned int*, unsigned int*) +7870 12 895 14 +7882 7 896 14 +7889 5 896 14 +788e 4 896 14 +7892 3 918 14 +7895 10 897 14 +78a5 3 918 14 +78a8 e 918 14 +78b6 3 921 14 +78b9 a 918 14 +78c3 3 921 14 +78c6 4 922 14 +78ca 4 922 14 +78ce 4 922 14 +78d2 3 702 1 +78d5 4 921 14 +78d9 3 923 14 +78dc 8 922 14 +78e4 7 923 14 +78eb 8 931 14 +78f3 11 931 14 +7904 d 961 14 +7911 9 962 14 +791a b 963 14 +FUNC 7930 1a6 0 google_breakpad::MinidumpGenerator::WriteThreadStream(unsigned int, MDRawThread*) +7930 2c 966 14 +795c 8 968 14 +7964 7 896 14 +796b 5 896 14 +7970 5 896 14 +7975 3 918 14 +7978 e 897 14 +7986 4 897 14 +798a 4 922 14 +798e 4 922 14 +7992 4 922 14 +7996 3 918 14 +7999 19 918 14 +79b2 9 923 14 +79bb 5 922 14 +79c0 7 923 14 +79c7 8 931 14 +79cf 1f 931 14 +79ee 8 961 14 +79f6 8 971 14 +79fe 4 931 14 +7a02 4 387 14 +7a06 4 972 14 +7a0a 11 387 14 +7a1b 7 785 14 +7a22 4 775 14 +7a26 b 786 14 +7a31 4 972 14 +7a35 7 1587 7 +7a3c 7 1587 7 +7a43 2 1587 7 +7a45 f 1752 3 +7a54 a 1593 7 +7a5e 4 975 14 +7a62 8 1596 7 +7a6a 4 977 14 +7a6e 4 415 14 +7a72 11 415 14 +7a83 8 434 14 +7a8b b 977 14 +7a96 8 432 14 +7a9e 4 977 14 +7aa2 1d 980 14 +7abf 17 986 14 +FUNC 7ae0 272 0 google_breakpad::MinidumpGenerator::WriteExceptionStream(MDRawDirectory*) +7ae0 25 1136 14 +7b05 4 1137 14 +7b09 5 159 18 +7b0e 3 117 18 +7b11 4 160 18 +7b15 5 161 18 +7b1a a 211 18 +7b24 b 46 16 +7b2f f 47 16 +7b3e 8 1139 14 +7b46 7 1142 14 +7b4d 4 177 18 +7b51 4 175 18 +7b55 7 177 18 +7b5c 4 1143 14 +7b60 3 1145 14 +7b63 4 1145 14 +7b67 4 1149 14 +7b6b 4 1149 14 +7b6f 4 1150 14 +7b73 4 1150 14 +7b77 8 1153 14 +7b7f 7 896 14 +7b86 5 896 14 +7b8b 4 896 14 +7b8f 4 918 14 +7b93 f 897 14 +7ba2 4 897 14 +7ba6 4 918 14 +7baa e 918 14 +7bb8 4 921 14 +7bbc a 918 14 +7bc6 3 921 14 +7bc9 4 922 14 +7bcd 4 922 14 +7bd1 4 922 14 +7bd5 3 702 1 +7bd8 4 921 14 +7bdc b 923 14 +7be7 5 922 14 +7bec d 923 14 +7bf9 8 931 14 +7c01 11 931 14 +7c12 14 961 14 +7c26 8 1156 14 +7c2e 4 931 14 +7c32 3 415 14 +7c35 8 1159 14 +7c3d f 415 14 +7c4c 12 432 14 +7c5e 10 434 14 +7c6e 4 1159 14 +7c72 6 1162 14 +7c78 a 1163 14 +7c82 3 443 14 +7c85 c 443 14 +7c91 9 794 14 +7c9a 8 802 14 +7ca2 7 1165 14 +7ca9 a 216 18 +7cb3 5 92 16 +7cb8 4 92 16 +7cbc 5 92 16 +7cc1 1e 92 16 +7cdf 15 1168 14 +7cf4 1f 465 14 +7d13 d 217 18 +7d20 a 216 18 +7d2a 5 92 16 +7d2f 4 92 16 +7d33 5 92 16 +7d38 12 92 16 +7d4a 8 217 18 +FUNC 7d60 399 0 google_breakpad::MinidumpGenerator::WriteModuleStream(unsigned int, MDRawModule*) +7d60 17 1295 14 +7d77 7 1296 14 +7d7e 6 1296 14 +7d84 4 642 7 +7d88 4 642 7 +7d8c 7 642 7 +7d93 9 254 11 +7d9c 3 255 11 +7d9f 4 224 11 +7da3 9 1300 14 +7dac 7d 1303 14 +7e29 d 136 11 +7e36 4 1697 5 +7e3a 4 1308 14 +7e3e a 1785 5 +7e48 4 1791 5 +7e4c c 1308 14 +7e58 8 1308 14 +7e60 4 147 11 +7e64 4 1311 14 +7e68 4 1311 14 +7e6c 4 150 11 +7e70 5 1312 14 +7e75 4 1313 14 +7e79 5 1313 14 +7e7e 7 1400 14 +7e85 6 1400 14 +7e8b 7 1401 14 +7e92 d 1404 14 +7e9f b 1341 14 +7eaa 9 1342 14 +7eb3 c 1346 14 +7ebf 3 1357 14 +7ec2 11 1358 14 +7ed3 d 1359 14 +7ee0 7d 1363 14 +7f5d 7 1361 14 +7f64 9 1365 14 +7f6d 13 1371 14 +7f80 3 1365 14 +7f83 9 1365 14 +7f8c 6 1366 14 +7f92 4 1371 14 +7f96 8 1371 14 +7f9e 4 1371 14 +7fa2 3 1392 14 +7fa5 e 1365 14 +7fb3 a 1338 14 +7fbd b 1374 14 +7fc8 f 1374 14 +7fd7 d 1374 14 +7fe4 4 1377 14 +7fe8 4 1377 14 +7fec 3 1378 14 +7fef 5 1378 14 +7ff4 4 1379 14 +7ff8 5 1379 14 +7ffd 1d 1385 14 +801a 7 1407 14 +8021 f 1410 14 +8030 7 1411 14 +8037 6 1413 14 +803d 2 1410 14 +803f 6 1410 14 +8045 5 1318 14 +804a 9 1319 14 +8053 6 1320 14 +8059 4 164 11 +805d 2 1331 14 +805f 3 1332 14 +8062 3 1330 14 +8065 5 1330 14 +806a 9 1331 14 +8073 2 1331 14 +8075 5 1332 14 +807a 4 156 11 +807e 9 1697 5 +8087 6 1791 5 +808d 14 1335 14 +80a1 11 1338 14 +80b2 12 1397 14 +80c4 28 1346 14 +80ec d 1338 14 +FUNC 8100 4e 0 google_breakpad::MinidumpGenerator::FindExecutableModule() +8100 a 1400 14 +810a 2 1400 14 +810c 7 1401 14 +8113 6 1404 14 +8119 7 1407 14 +8120 10 1410 14 +8130 7 1411 14 +8137 6 1413 14 +813d 2 1410 14 +813f 6 1410 14 +8145 9 1420 14 +FUNC 8150 3a2 0 google_breakpad::MinidumpGenerator::WriteCVRecord(MDRawModule*, int, char const*, bool) +8150 2f 1423 14 +817f 4 1424 14 +8183 8 159 18 +818b 3 117 18 +818e 7 160 18 +8195 3c 211 18 +81d1 d 1427 14 +81de 3 1430 14 +81e1 4 1431 14 +81e5 b 1430 14 +81f0 b 1435 14 +81fb a 66 16 +8205 b 67 16 +8210 4 68 16 +8214 d 68 16 +8221 8 1437 14 +8229 e 83 16 +8237 8 84 16 +823f 7 85 16 +8246 3 86 16 +8249 b 84 16 +8254 8 1440 14 +825c 7 177 18 +8263 7 175 18 +826a 7 177 18 +8271 4 1443 14 +8275 b 1445 14 +8280 b 1446 14 +828b 5 1451 14 +8290 4 1453 14 +8294 4 1454 14 +8298 10 1452 14 +82a8 1f 1455 14 +82c7 4 1456 14 +82cb 27 1457 14 +82f2 5 1458 14 +82f7 4 1460 14 +82fb c 1461 14 +8307 19 1462 14 +8320 8 1466 14 +8328 10 1468 14 +8338 5 1468 14 +833d b 1469 14 +8348 2 1468 14 +834a b 1470 14 +8355 2 1469 14 +8357 2 1470 14 +8359 7 1467 14 +8360 d 1473 14 +836d a 1473 14 +8377 2 1473 14 +8379 8 1472 14 +8381 6 1475 14 +8387 4 1475 14 +838b 2 1475 14 +838d 8 1474 14 +8395 f 1476 14 +83a4 7 1476 14 +83ab 7 1477 14 +83b2 5 1478 14 +83b7 7 1478 14 +83be 7 1479 14 +83c5 7 1480 14 +83cc 7 1480 14 +83d3 7 1481 14 +83da 7 1481 14 +83e1 7 1482 14 +83e8 7 1482 14 +83ef 4 1483 14 +83f3 d 1483 14 +8400 a 216 18 +840a 8 92 16 +8412 7 92 16 +8419 8 92 16 +8421 1e 92 16 +843f 14 1487 14 +8453 24 66 16 +8477 2c 83 16 +84a3 9 1458 14 +84ac b 217 18 +84b7 a 216 18 +84c1 8 92 16 +84c9 7 92 16 +84d0 8 92 16 +84d8 12 92 16 +84ea 8 217 18 +FUNC 8500 ad 0 google_breakpad::DynamicImages::~DynamicImages() +8500 8 243 11 +8508 4 642 7 +850c 4 642 7 +8510 a 642 7 +851a 16 244 11 +8530 4 224 11 +8534 5 245 11 +8539 9 109 11 +8542 3 453 7 +8545 5 450 7 +854a 6 424 7 +8550 4 425 7 +8554 5 177 4 +8559 8 245 11 +8561 4 642 7 +8565 4 642 7 +8569 3 244 11 +856c 6 642 7 +8572 c 244 11 +857e 3 450 7 +8581 2 450 7 +8583 5 424 7 +8588 11 0 7 +8599 4 425 7 +859d a 177 4 +85a7 6 247 11 +FUNC 85b0 158 0 std::__1::__split_buffer&>::__split_buffer(unsigned long, unsigned long, google_breakpad::PageStdAllocator&) +85b0 14 310 0 +85c4 8 2065 3 +85cc 4 2065 3 +85d0 9 311 0 +85d9 7 186 30 +85e0 a 187 30 +85ea 3 190 30 +85ed 3 90 30 +85f0 9 78 30 +85f9 4 78 30 +85fd 6 78 30 +8603 d 78 30 +8610 7 90 30 +8617 3 90 30 +861a 8 90 30 +8622 6 119 30 +8628 20 119 30 +8648 a 121 30 +8652 4 131 30 +8656 3 131 30 +8659 4 132 30 +865d 4 133 30 +8661 4 135 30 +8665 9 92 30 +866e 4 90 30 +8672 3 98 30 +8675 7 96 30 +867c 6 96 30 +8682 8 96 30 +868a 4 95 30 +868e 3 98 30 +8691 4 98 30 +8695 3 98 30 +8698 7 98 30 +869f 4 98 30 +86a3 4 100 30 +86a7 9 190 30 +86b0 4 188 30 +86b4 3 311 0 +86b7 7 312 0 +86be 4 312 0 +86c2 4 312 0 +86c6 7 313 0 +86cd 4 313 0 +86d1 f 314 0 +86e0 3 79 30 +86e3 7 80 30 +86ea 5 81 30 +86ef 4 78 30 +86f3 15 83 30 +FUNC 8710 272 0 void std::__1::vector >::__push_back_slow_path(MDMemoryDescriptor const&&&) +8710 f 1573 7 +871f 3 642 7 +8722 4 642 7 +8726 7 642 7 +872d 3 1575 7 +8730 9 963 7 +8739 8 964 7 +8741 3 372 7 +8744 4 2123 3 +8748 4 372 7 +874c a 372 7 +8756 f 966 7 +8765 4 968 7 +8769 3 702 1 +876c 10 968 7 +877c 4 642 7 +8780 c 642 7 +878c 5 310 0 +8791 5 1577 7 +8796 e 1752 3 +87a4 e 1578 7 +87b2 3 893 7 +87b5 4 893 7 +87b9 9 1628 3 +87c2 1e 1630 3 +87e0 8 1752 3 +87e8 4 1630 3 +87ec 8 1752 3 +87f4 e 1631 3 +8802 5 1628 3 +8807 19 1630 3 +8820 10 1752 3 +8830 e 1631 3 +883e 10 1752 3 +884e e 1631 3 +885c 10 1752 3 +886c e 1631 3 +887a 10 1752 3 +888a e 1631 3 +8898 10 1752 3 +88a8 e 1631 3 +88b6 10 1752 3 +88c6 e 1631 3 +88d4 10 1752 3 +88e4 e 1631 3 +88f2 f 1752 3 +8901 e 1631 3 +890f 9 1628 3 +8918 a 1628 3 +8922 3 3617 6 +8925 4 3617 6 +8929 7 3618 6 +8930 5 3618 6 +8935 3 3618 6 +8938 5 3619 6 +893d 4 3618 6 +8941 5 3619 6 +8946 4 3617 6 +894a 5 3618 6 +894f 4 3618 6 +8953 5 3619 6 +8958 5 897 7 +895d 5 295 0 +8962 11 0 0 +8973 5 296 0 +8978 a 1580 7 +FUNC 8990 1a3 0 ConvertUTF32toUTF16 +8990 9 85 19 +8999 5 86 19 +899e 12 87 19 +89b0 15 107 19 +89c5 9 89 19 +89ce 3 92 19 +89d1 9 93 19 +89da 18 95 19 +89f2 4 104 19 +89f6 a 104 19 +8a00 7 106 19 +8a07 2 106 19 +8a09 4 114 19 +8a0d 5 114 19 +8a12 6 118 19 +8a18 a 119 19 +8a22 4 119 19 +8a26 6 120 19 +8a2c 6 120 19 +8a32 5 120 19 +8a37 4 120 19 +8a3b 4 92 19 +8a3f 21 87 19 +8a60 25 86 19 +8a85 9 89 19 +8a8e 3 92 19 +8a91 9 93 19 +8a9a 11 95 19 +8aab 6 101 19 +8ab1 6 101 19 +8ab7 4 110 19 +8abb 9 106 19 +8ac4 8 110 19 +8acc 4 104 19 +8ad0 6 101 19 +8ad6 5 114 19 +8adb 6 118 19 +8ae1 a 119 19 +8aeb 4 119 19 +8aef 6 120 19 +8af5 6 120 19 +8afb 5 120 19 +8b00 7 120 19 +8b07 6 92 19 +8b0d 14 87 19 +8b21 3 123 19 +8b24 3 124 19 +8b27 c 125 19 +FUNC 8b40 11f 0 ConvertUTF16toUTF32 +8b40 5 133 19 +8b45 5 134 19 +8b4a 9 136 19 +8b53 d 159 19 +8b60 4 138 19 +8b64 4 138 19 +8b68 11 140 19 +8b79 9 142 19 +8b82 4 143 19 +8b86 10 145 19 +8b96 4 146 19 +8b9a 8 147 19 +8ba2 4 148 19 +8ba6 9 167 19 +8baf 3 171 19 +8bb2 4 171 19 +8bb6 1a 136 19 +8bd0 4 138 19 +8bd4 4 138 19 +8bd8 28 140 19 +8c00 5 142 19 +8c05 4 143 19 +8c09 11 145 19 +8c1a 4 146 19 +8c1e 8 147 19 +8c26 4 148 19 +8c2a 5 167 19 +8c2f 3 171 19 +8c32 4 171 19 +8c36 20 136 19 +8c56 3 173 19 +8c59 3 174 19 +8c5c 3 181 19 +FUNC 8c60 2e7 0 ConvertUTF16toUTF8 +8c60 c 236 19 +8c6c 5 237 19 +8c71 9 238 19 +8c7a 10 255 19 +8c8a 7 291 19 +8c91 f 278 19 +8ca0 4 244 19 +8ca4 4 244 19 +8ca8 11 246 19 +8cb9 9 248 19 +8cc2 5 249 19 +8cc7 11 251 19 +8cd8 4 252 19 +8cdc 8 253 19 +8ce4 9 254 19 +8ced e 274 19 +8cfb e 275 19 +8d09 9 276 19 +8d12 7 277 19 +8d19 a 278 19 +8d23 7 277 19 +8d2a 6 278 19 +8d30 7 282 19 +8d37 f 283 19 +8d46 13 287 19 +8d59 c 288 19 +8d65 4 288 19 +8d69 3 288 19 +8d6c 4 288 19 +8d70 c 289 19 +8d7c 4 289 19 +8d80 3 289 19 +8d83 4 289 19 +8d87 c 290 19 +8d93 4 290 19 +8d97 3 290 19 +8d9a 4 290 19 +8d9e 5 291 19 +8da3 3 291 19 +8da6 4 291 19 +8daa 3 291 19 +8dad 3 293 19 +8db0 18 238 19 +8dc8 7 291 19 +8dcf 11 278 19 +8de0 4 244 19 +8de4 4 244 19 +8de8 28 246 19 +8e10 9 248 19 +8e19 5 249 19 +8e1e 15 251 19 +8e33 4 252 19 +8e37 8 253 19 +8e3f 9 254 19 +8e48 e 274 19 +8e56 e 275 19 +8e64 9 276 19 +8e6d 7 277 19 +8e74 a 278 19 +8e7e 7 277 19 +8e85 b 278 19 +8e90 7 282 19 +8e97 f 283 19 +8ea6 13 287 19 +8eb9 c 288 19 +8ec5 4 288 19 +8ec9 3 288 19 +8ecc 4 288 19 +8ed0 c 289 19 +8edc 4 289 19 +8ee0 3 289 19 +8ee3 4 289 19 +8ee7 c 290 19 +8ef3 4 290 19 +8ef7 3 290 19 +8efa 4 290 19 +8efe 5 291 19 +8f03 3 291 19 +8f06 4 291 19 +8f0a 3 291 19 +8f0d 3 293 19 +8f10 11 238 19 +8f21 16 285 19 +8f37 3 295 19 +8f3a 3 296 19 +8f3d a 297 19 +FUNC 8f70 fa 0 isLegalUTF8Sequence +8f70 e 345 19 +8f7e 8 346 19 +8f86 7 346 19 +8f8d 4 350 19 +8f91 17 316 19 +8fa8 12 332 19 +8fba a 350 19 +8fc4 6 319 19 +8fca 13 319 19 +8fdd 3 319 19 +8fe0 6 320 19 +8fe6 b 320 19 +8ff1 3 320 19 +8ff4 3 321 19 +8ff7 7 321 19 +8ffe 4 350 19 +9002 1f 323 19 +9021 7 325 19 +9028 6 350 19 +902e 7 326 19 +9035 6 350 19 +903b 7 327 19 +9042 4 350 19 +9046 a 329 19 +9050 6 350 19 +9056 7 328 19 +905d 4 350 19 +9061 5 334 19 +9066 4 350 19 +FUNC 90d0 26d 0 ConvertUTF8toUTF16 +90d0 f 355 19 +90df 8 357 19 +90e7 5 358 19 +90ec 13 359 19 +90ff 4 374 19 +9103 4 376 19 +9107 c 361 19 +9113 d 362 19 +9120 e 362 19 +912e a 316 19 +9138 e 315 19 +9146 5 319 19 +914b 11 319 19 +915c 3 319 19 +915f 5 320 19 +9164 11 320 19 +9175 3 320 19 +9178 5 321 19 +917d a 321 19 +9187 1f 323 19 +91a6 b 325 19 +91b1 9 329 19 +91ba 22 332 19 +91dc b 326 19 +91e7 b 327 19 +91f2 e 328 19 +9200 20 373 19 +9220 4 376 19 +9224 5 377 19 +9229 6 376 19 +922f 4 377 19 +9233 3 377 19 +9236 4 377 19 +923a 5 378 19 +923f 3 377 19 +9242 4 378 19 +9246 3 378 19 +9249 4 378 19 +924d 5 379 19 +9252 3 378 19 +9255 3 379 19 +9258 4 379 19 +925c 14 379 19 +9270 9 383 19 +9279 b 381 19 +9284 9 387 19 +928d 13 389 19 +92a0 10 398 19 +92b0 9 400 19 +92b9 4 390 19 +92bd 6 395 19 +92c3 d 398 19 +92d0 4 410 19 +92d4 5 410 19 +92d9 6 414 19 +92df a 415 19 +92e9 4 415 19 +92ed 6 416 19 +92f3 6 416 19 +92f9 5 416 19 +92fe 6 416 19 +9304 b 359 19 +930f d 384 19 +931c 6 391 19 +9322 8 419 19 +932a 8 420 19 +9332 b 421 19 +FUNC 93c0 24b 0 ConvertUTF32toUTF8 +93c0 d 429 19 +93cd 5 430 19 +93d2 b 431 19 +93dd 3 437 19 +93e0 d 437 19 +93ed 7 467 19 +93f4 c 453 19 +9400 7 436 19 +9407 d 449 19 +9414 d 450 19 +9421 9 451 19 +942a 7 452 19 +9431 8 453 19 +9439 7 452 19 +9440 10 453 19 +9450 7 458 19 +9457 9 459 19 +9460 a 436 19 +946a 13 463 19 +947d b 464 19 +9488 4 464 19 +948c 3 464 19 +948f 4 464 19 +9493 b 465 19 +949e 4 465 19 +94a2 3 465 19 +94a5 4 465 19 +94a9 b 466 19 +94b4 4 466 19 +94b8 3 466 19 +94bb 4 466 19 +94bf 5 467 19 +94c4 2 467 19 +94c6 4 467 19 +94ca 3 467 19 +94cd 3 469 19 +94d0 15 431 19 +94e5 7 467 19 +94ec 14 453 19 +9500 3 436 19 +9503 1b 439 19 +951e d 449 19 +952b d 450 19 +9538 9 451 19 +9541 7 452 19 +9548 8 453 19 +9550 7 452 19 +9557 9 453 19 +9560 7 458 19 +9567 5 459 19 +956c a 436 19 +9576 13 463 19 +9589 c 464 19 +9595 4 464 19 +9599 3 464 19 +959c 4 464 19 +95a0 c 465 19 +95ac 4 465 19 +95b0 3 465 19 +95b3 4 465 19 +95b7 c 466 19 +95c3 4 466 19 +95c7 3 466 19 +95ca 4 466 19 +95ce 5 467 19 +95d3 3 467 19 +95d6 4 467 19 +95da 3 467 19 +95dd 3 469 19 +95e0 b 431 19 +95eb f 461 19 +95fa 3 471 19 +95fd 3 472 19 +9600 b 473 19 +FUNC 9630 3f9 0 ConvertUTF8toUTF32 +9630 d 481 19 +963d 5 482 19 +9642 15 483 19 +9657 3 517 19 +965a 16 517 19 +9670 4 498 19 +9674 4 500 19 +9678 c 485 19 +9684 8 486 19 +968c 9 486 19 +9695 a 316 19 +969f e 315 19 +96ad 5 319 19 +96b2 11 319 19 +96c3 3 319 19 +96c6 5 320 19 +96cb 11 320 19 +96dc 3 320 19 +96df 5 321 19 +96e4 9 321 19 +96ed 1e 323 19 +970b a 325 19 +9715 8 329 19 +971d 20 332 19 +973d a 326 19 +9747 a 327 19 +9751 f 328 19 +9760 15 497 19 +9775 4 500 19 +9779 5 501 19 +977e 6 500 19 +9784 4 501 19 +9788 3 501 19 +978b 4 501 19 +978f 5 502 19 +9794 3 501 19 +9797 4 502 19 +979b 3 502 19 +979e 4 502 19 +97a2 5 503 19 +97a7 3 502 19 +97aa 3 503 19 +97ad 4 503 19 +97b1 f 503 19 +97c0 9 507 19 +97c9 b 505 19 +97d4 9 511 19 +97dd 13 516 19 +97f0 10 522 19 +9800 10 529 19 +9810 3 525 19 +9813 4 522 19 +9817 29 483 19 +9840 a 316 19 +984a e 315 19 +9858 5 319 19 +985d 11 319 19 +986e 3 319 19 +9871 5 320 19 +9876 11 320 19 +9887 3 320 19 +988a 5 321 19 +988f 9 321 19 +9898 1e 323 19 +98b6 a 325 19 +98c0 8 329 19 +98c8 20 332 19 +98e8 a 326 19 +98f2 a 327 19 +98fc 14 328 19 +9910 19 497 19 +9929 4 500 19 +992d 5 501 19 +9932 6 500 19 +9938 4 501 19 +993c 3 501 19 +993f 4 501 19 +9943 5 502 19 +9948 3 501 19 +994b 4 502 19 +994f 3 502 19 +9952 4 502 19 +9956 5 503 19 +995b 3 502 19 +995e 3 503 19 +9961 4 503 19 +9965 3 503 19 +9968 5 507 19 +996d b 505 19 +9978 9 511 19 +9981 29 516 19 +99aa 3 525 19 +99ad 4 522 19 +99b1 f 483 19 +99c0 4 498 19 +99c4 4 500 19 +99c8 c 485 19 +99d4 8 486 19 +99dc 10 486 19 +99ec 4 490 19 +99f0 13 508 19 +9a03 3 490 19 +9a06 8 518 19 +9a0e 8 532 19 +9a16 8 533 19 +9a1e b 534 19 +FUNC 9b20 13 0 google_breakpad::MD5Init(google_breakpad::MD5Context*) +9b20 a 48 29 +9b2a 8 53 29 +9b32 1 55 29 +FUNC 9b40 137 0 google_breakpad::MD5Update(google_breakpad::MD5Context*, unsigned char const*, unsigned long) +9b40 14 62 29 +9b54 4 67 29 +9b58 a 68 29 +9b62 4 68 29 +9b66 c 69 29 +9b72 7 70 29 +9b79 6 70 29 +9b7f 3 72 29 +9b82 5 76 29 +9b87 7 77 29 +9b8e 9 79 29 +9b97 5 80 29 +9b9c 8 81 29 +9ba4 6 93 29 +9baa 4 77 29 +9bae b 84 29 +9bb9 b 86 29 +9bc4 3 87 29 +9bc7 3 88 29 +9bca 26 92 29 +9bf0 46 93 29 +9c36 b 95 29 +9c41 4 96 29 +9c45 4 97 29 +9c49 4 92 29 +9c4d 11 92 29 +9c5e 3 102 29 +9c61 16 81 29 +FUNC 9c80 6ec 0 google_breakpad::MD5Transform(unsigned int*, unsigned int const*) +9c80 d 168 29 +9c8d 7 171 29 +9c94 8 172 29 +9c9c 3 173 29 +9c9f 3 174 29 +9ca2 b 176 29 +9cad 9 177 29 +9cb6 10 176 29 +9cc6 1c 177 29 +9ce2 1d 178 29 +9cff 1e 179 29 +9d1d 1e 180 29 +9d3b 1e 181 29 +9d59 20 182 29 +9d79 21 183 29 +9d9a 20 184 29 +9dba 1f 185 29 +9dd9 22 186 29 +9dfb 21 187 29 +9e1c 21 188 29 +9e3d 1c 189 29 +9e59 1c 190 29 +9e75 22 191 29 +9e97 1a 193 29 +9eb1 19 194 29 +9eca 19 195 29 +9ee3 1c 196 29 +9eff 1f 197 29 +9f1e 19 198 29 +9f37 18 199 29 +9f4f 1d 200 29 +9f6c 1c 201 29 +9f88 1e 202 29 +9fa6 1c 203 29 +9fc2 1d 204 29 +9fdf 1c 205 29 +9ffb 21 206 29 +a01c 1e 207 29 +a03a 20 208 29 +a05a 11 210 29 +a06b 16 211 29 +a081 16 212 29 +a097 15 213 29 +a0ac 16 214 29 +a0c2 15 215 29 +a0d7 18 216 29 +a0ef 1a 217 29 +a109 14 218 29 +a11d 1a 219 29 +a137 14 220 29 +a14b 1b 221 29 +a166 18 222 29 +a17e 16 223 29 +a194 1b 224 29 +a1af 11 225 29 +a1c0 3 227 29 +a1c3 7 225 29 +a1ca 10 227 29 +a1da 3 228 29 +a1dd 6 227 29 +a1e3 10 228 29 +a1f3 4 229 29 +a1f7 5 228 29 +a1fc 10 229 29 +a20c 5 230 29 +a211 5 229 29 +a216 10 230 29 +a226 3 231 29 +a229 5 230 29 +a22e f 231 29 +a23d 4 232 29 +a241 5 231 29 +a246 f 232 29 +a255 3 233 29 +a258 5 232 29 +a25d 14 233 29 +a271 18 234 29 +a289 18 235 29 +a2a1 17 236 29 +a2b8 16 237 29 +a2ce 18 238 29 +a2e6 18 239 29 +a2fe 18 240 29 +a316 17 241 29 +a32d 13 242 29 +a340 7 244 29 +a347 8 242 29 +a34f 5 244 29 +a354 2 242 29 +a356 5 245 29 +a35b 3 246 29 +a35e 3 247 29 +a361 b 248 29 +FUNC a370 108 0 google_breakpad::MD5Final(unsigned char*, google_breakpad::MD5Context*) +a370 d 110 29 +a37d 3 115 29 +a380 5 115 29 +a385 3 115 29 +a388 4 119 29 +a38c 5 120 29 +a391 5 120 29 +a396 3 123 29 +a399 5 126 29 +a39e 2 128 29 +a3a0 5 128 29 +a3a5 b 130 29 +a3b0 37 133 29 +a3e7 5 141 29 +a3ec 3 136 29 +a3ef 5 136 29 +a3f4 3 141 29 +a3f7 6 142 29 +a3fd b 144 29 +a408 e 146 29 +a416 57 147 29 +a46d b 148 29 +FUNC a480 ed 0 google_breakpad::UTF8ToUTF16(char const*, std::__1::vector >*) +a480 d 41 32 +a48d 5 42 32 +a492 5 43 32 +a497 3 44 32 +a49a 3 1468 7 +a49d 4 424 7 +a4a1 5 424 7 +a4a6 11 0 7 +a4b7 4 425 7 +a4bb c 47 32 +a4c7 b 47 32 +a4d2 3 1501 7 +a4d5 5 48 32 +a4da 4 372 7 +a4de 3 372 7 +a4e1 e 49 32 +a4ef b 50 32 +a4fa 2 55 32 +a4fc 2 55 32 +a4fe 3 642 7 +a501 4 642 7 +a505 d 642 7 +a512 5 55 32 +a517 3 1501 7 +a51a 4 642 7 +a51e 6 55 32 +a524 3 55 32 +a527 9 642 7 +a530 8 1997 7 +a538 a 1998 7 +a542 5 1999 7 +a547 4 2000 7 +a54b 5 424 7 +a550 11 0 7 +a561 4 425 7 +a565 8 56 32 +FUNC a570 685 0 std::__1::vector >::insert(std::__1::__wrap_iter, unsigned long, unsigned short const&) +a570 1a 1839 7 +a58a 9 1846 7 +a593 4 1848 7 +a597 4 1848 7 +a59b 9 1848 7 +a5a4 9 1848 7 +a5ad 4 642 7 +a5b1 6 642 7 +a5b7 5 963 7 +a5bc 8 964 7 +a5c4 4 372 7 +a5c8 9 372 7 +a5d1 9 372 7 +a5da 3 702 1 +a5dd 4 968 7 +a5e1 d 966 7 +a5ee e 966 7 +a5fc 11 1872 7 +a60d 13 311 0 +a620 4 1741 3 +a624 d 169 4 +a631 9 1852 7 +a63a 3 1852 7 +a63d f 1709 7 +a64c 6 1854 7 +a652 39 1003 7 +a68b 11 1752 3 +a69c 14 775 7 +a6b0 9 1752 3 +a6b9 f 1003 7 +a6c8 18 775 7 +a6e0 3 1752 3 +a6e3 3 1752 3 +a6e6 4 1007 7 +a6ea 3 1008 7 +a6ed 5 1010 7 +a6f2 e 775 7 +a700 3 1752 3 +a703 3 1752 3 +a706 3 1752 3 +a709 4 1752 3 +a70d 3 1752 3 +a710 4 1752 3 +a714 3 1752 3 +a717 4 1752 3 +a71b 3 1752 3 +a71e 4 1752 3 +a722 3 1752 3 +a725 4 1752 3 +a729 3 1752 3 +a72c 4 1752 3 +a730 3 1752 3 +a733 4 1752 3 +a737 a 1010 7 +a741 7 1003 7 +a748 4 1006 7 +a74c c 1858 7 +a758 9 1861 7 +a761 c 1706 7 +a76d 6 1707 7 +a773 5a 1707 7 +a7cd 33 1513 3 +a800 3 1752 3 +a803 3 1752 3 +a806 4 1707 7 +a80a 4 1707 7 +a80e 5 1707 7 +a813 d 1513 3 +a820 3 1752 3 +a823 3 1752 3 +a826 4 1752 3 +a82a 4 1752 3 +a82e 4 1752 3 +a832 4 1752 3 +a836 4 1752 3 +a83a 4 1752 3 +a83e 4 1752 3 +a842 4 1752 3 +a846 4 1752 3 +a84a 4 1752 3 +a84e 4 1752 3 +a852 4 1752 3 +a856 4 1752 3 +a85a 4 1752 3 +a85e 4 1707 7 +a862 4 1707 7 +a866 5 1707 7 +a86b a 1707 7 +a875 4 1709 7 +a879 5 1939 1 +a87e 6 1941 1 +a884 8 1942 1 +a88c 5 1864 7 +a891 4 1864 7 +a895 4 1865 7 +a899 4 1864 7 +a89d 2c 2046 1 +a8c9 1a 2047 1 +a8e3 3 2047 1 +a8e6 4 2046 1 +a8ea 3 2046 1 +a8ed 5 2046 1 +a8f2 11 2047 1 +a903 3 2047 1 +a906 3 2047 1 +a909 4 2047 1 +a90d 3 2047 1 +a910 4 2047 1 +a914 3 2047 1 +a917 4 2047 1 +a91b 3 2047 1 +a91e 4 2047 1 +a922 3 2047 1 +a925 4 2047 1 +a929 3 2047 1 +a92c 4 2047 1 +a930 3 2047 1 +a933 4 2047 1 +a937 4 2046 1 +a93b e 2046 1 +a949 4 312 0 +a94d 3f 220 0 +a98c 11 1752 3 +a99d 13 115 0 +a9b0 9 1752 3 +a9b9 f 220 0 +a9c8 18 115 0 +a9e0 3 1752 3 +a9e3 3 1752 3 +a9e6 4 223 0 +a9ea 3 224 0 +a9ed 5 225 0 +a9f2 e 115 0 +aa00 3 1752 3 +aa03 3 1752 3 +aa06 3 1752 3 +aa09 4 1752 3 +aa0d 3 1752 3 +aa10 4 1752 3 +aa14 3 1752 3 +aa17 4 1752 3 +aa1b 3 1752 3 +aa1e 4 1752 3 +aa22 3 1752 3 +aa25 4 1752 3 +aa29 3 1752 3 +aa2c 4 1752 3 +aa30 3 1752 3 +aa33 4 1752 3 +aa37 a 225 0 +aa41 6 1648 3 +aa47 5 1649 3 +aa4c 16 1650 3 +aa62 9 313 0 +aa6b 5 220 0 +aa70 e 909 7 +aa7e 3 1583 3 +aa81 5 1584 3 +aa86 b 1586 3 +aa91 8 1587 3 +aa99 3 3618 6 +aa9c 4 3618 6 +aaa0 9 3618 6 +aaa9 5 342 0 +aaae 5 177 4 +aab3 12 1878 7 +aac5 b 2046 1 +aad0 20 2047 1 +aaf0 e 2047 1 +aafe 19 2046 1 +ab17 29 1709 7 +ab40 a 1752 3 +ab4a a 1752 3 +ab54 d 1707 7 +ab61 2f 1709 7 +ab90 8 1752 3 +ab98 8 1752 3 +aba0 8 1752 3 +aba8 8 1752 3 +abb0 8 1752 3 +abb8 8 1752 3 +abc0 8 1752 3 +abc8 9 1752 3 +abd1 24 1707 7 +FUNC ac00 7f 0 google_breakpad::UTF8ToUTF16Char(char const*, int, unsigned short*) +ac00 14 58 32 +ac14 5 59 32 +ac19 4 60 32 +ac1d 5 61 32 +ac22 7 63 32 +ac29 4 62 32 +ac2d 13 78 32 +ac40 14 67 32 +ac54 4 71 32 +ac58 5 75 32 +ac5d c 76 32 +ac69 4 72 32 +ac6d 3 72 32 +ac70 f 83 32 +FUNC ac80 ed 0 google_breakpad::UTF32ToUTF16(wchar_t const*, std::__1::vector >*) +ac80 f 85 32 +ac8f 5 86 32 +ac94 5 87 32 +ac99 4 88 32 +ac9d 3 1468 7 +aca0 4 424 7 +aca4 5 424 7 +aca9 11 0 7 +acba 4 425 7 +acbe a 91 32 +acc8 b 91 32 +acd3 3 1501 7 +acd6 4 92 32 +acda 4 372 7 +acde 3 372 7 +ace1 d 93 32 +acee b 94 32 +acf9 2 99 32 +acfb 2 99 32 +acfd 3 642 7 +ad00 4 642 7 +ad04 d 642 7 +ad11 4 99 32 +ad15 3 1501 7 +ad18 4 642 7 +ad1c 6 99 32 +ad22 3 99 32 +ad25 9 642 7 +ad2e 8 1997 7 +ad36 a 1998 7 +ad40 5 1999 7 +ad45 4 2000 7 +ad49 5 424 7 +ad4e 11 0 7 +ad5f 4 425 7 +ad63 a 100 32 +FUNC ad70 4c 0 google_breakpad::UTF32ToUTF16Char(wchar_t, unsigned short*) +ad70 11 102 32 +ad81 5 103 32 +ad86 5 104 32 +ad8b 5 105 32 +ad90 4 106 32 +ad94 10 107 32 +ada4 8 108 32 +adac 4 112 32 +adb0 6 113 32 +adb6 6 115 32 +FUNC adc0 2be 0 google_breakpad::UTF16ToUTF8(std::__1::vector > const&, bool) +adc0 11 121 32 +add1 3 642 7 +add4 5 122 32 +add9 4 642 7 +addd b 126 32 +ade8 c 642 7 +adf4 16 128 32 +ae0a 9 1358 2 +ae13 5d 130 32 +ae70 3 132 32 +ae73 4 132 32 +ae77 5 132 32 +ae7c 4 1190 2 +ae80 8 130 32 +ae88 18 130 32 +aea0 3 132 32 +aea3 4 132 32 +aea7 4 132 32 +aeab 4 132 32 +aeaf 4 132 32 +aeb3 4 132 32 +aeb7 4 132 32 +aebb 4 132 32 +aebf 4 132 32 +aec3 4 132 32 +aec7 4 132 32 +aecb 3 132 32 +aece d 1358 2 +aedb 10 134 32 +aeeb 3 138 32 +aeee 3 642 7 +aef1 4 139 32 +aef5 b 140 32 +af00 3 138 32 +af03 5 141 32 +af08 3 142 32 +af0b 18 143 32 +af23 18 2242 3 +af3b 4 147 32 +af3f 13 2021 5 +af52 8 644 5 +af5a e 2021 5 +af68 8 203 31 +af70 5 203 31 +af75 8 203 31 +af7d 24 153 32 +afa1 9 132 32 +afaa 12 132 32 +afbc 2b 132 32 +afe7 9 132 32 +aff0 a 132 32 +affa a 132 32 +b004 a 132 32 +b00e 9 132 32 +b017 a 132 32 +b021 9 132 32 +b02a 32 130 32 +b05c d 203 31 +b069 5 203 31 +b06e 10 203 31 +FUNC b080 114 0 std::__1::vector >::__append(unsigned long) +b080 11 1035 7 +b091 4 1036 7 +b095 4 1036 7 +b099 9 1036 7 +b0a2 5 1036 7 +b0a7 3 642 7 +b0aa 9 642 7 +b0b3 5 963 7 +b0b8 8 964 7 +b0c0 4 372 7 +b0c4 3 372 7 +b0c7 4 642 7 +b0cb 9 372 7 +b0d4 3 702 1 +b0d7 4 968 7 +b0db d 966 7 +b0e8 e 966 7 +b0f6 9 642 7 +b0ff 5 311 0 +b104 5 1741 3 +b109 7 169 4 +b110 4 981 7 +b114 8 1752 3 +b11c 5 981 7 +b121 8 984 7 +b129 4 312 0 +b12d 4 313 0 +b131 8 201 0 +b139 8 1752 3 +b141 4 201 0 +b145 3 1648 3 +b148 5 1649 3 +b14d e 1650 3 +b15b 3 3618 6 +b15e 4 3618 6 +b162 8 3618 6 +b16a 5 342 0 +b16f 16 177 4 +b185 f 1045 7 +FUNC b1a0 5 0 breakpad::BootstrapRegister(unsigned int, char*, unsigned int) +b1a0 5 38 22 +FUNC b1b0 16 0 +b1b0 3 48 23 +b1b3 13 49 23 +FUNC b1d0 16 0 google_breakpad::FileID::FileID(char const*) +b1d0 3 48 23 +b1d3 13 49 23 +FUNC b1f0 d6 0 google_breakpad::FileID::FileIdentifier(unsigned char*) +b1f0 24 52 23 +b214 b 53 23 +b21f d 54 23 +b22c 9 58 23 +b235 c 64 23 +b241 1f 64 23 +b260 10 65 23 +b270 f 64 23 +b27f 3 64 23 +b282 2 64 23 +b284 f 68 23 +b293 1e 69 23 +b2b1 15 72 23 +FUNC b2d0 a8 0 google_breakpad::FileID::MachoIdentifier(int, int, unsigned char*) +b2d0 2e 76 23 +b2fe b 77 23 +b309 12 79 23 +b31b 4 79 23 +b31f 17 82 23 +b336 35 83 23 +b36b d 83 23 +FUNC b380 8e 0 google_breakpad::FileID::ConvertIdentifierToString(unsigned char const*, char*, int) +b380 10 89 23 +b390 5 90 23 +b395 6 90 23 +b39b 7 91 23 +b3a2 b 93 23 +b3ad 3 94 23 +b3b0 3 94 23 +b3b3 4 94 23 +b3b7 3 97 23 +b3ba 3 97 23 +b3bd 4 97 23 +b3c1 3 97 23 +b3c4 3 98 23 +b3c7 3 96 23 +b3ca 4 99 23 +b3ce 6 99 23 +b3d4 4 99 23 +b3d8 4 99 23 +b3dc 4 98 23 +b3e0 4 98 23 +b3e4 e 89 23 +b3f2 13 103 23 +b405 3 103 23 +b408 4 103 23 +b40c 2 104 23 +FUNC b410 c5 0 +b410 3 61 24 +b413 99 58 24 +b4ac 16 61 24 +b4c2 13 62 24 +FUNC b4e0 c5 0 MacFileUtilities::MachoID::MachoID(char const*) +b4e0 3 61 24 +b4e3 99 58 24 +b57c 16 61 24 +b592 13 62 24 +FUNC b5b0 c0 0 +b5b0 3 70 24 +b5b3 7 66 24 +b5ba 7 67 24 +b5c1 83 69 24 +b644 16 70 24 +b65a 16 71 24 +FUNC b670 c0 0 MacFileUtilities::MachoID::MachoID(char const*, void*, unsigned long) +b670 3 70 24 +b673 7 66 24 +b67a 7 67 24 +b681 83 69 24 +b704 16 70 24 +b71a 16 71 24 +FUNC b730 1 0 MacFileUtilities::MachoID::~MachoID() +b730 1 75 24 +FUNC b740 1 0 MacFileUtilities::MachoID::~MachoID() +b740 1 75 24 +FUNC b750 280 0 MacFileUtilities::MachoID::UpdateCRC(unsigned char*, unsigned long) +b750 8 93 24 +b758 3 93 24 +b75b 3 94 24 +b75e 22 97 24 +b780 10 98 24 +b790 8 101 24 +b798 9 101 24 +b7a1 9 101 24 +b7aa 9 101 24 +b7b3 9 101 24 +b7bc 9 101 24 +b7c5 9 101 24 +b7ce 9 101 24 +b7d7 9 101 24 +b7e0 9 101 24 +b7e9 9 101 24 +b7f2 9 101 24 +b7fb 9 101 24 +b804 9 101 24 +b80d 9 101 24 +b816 9 101 24 +b81f 4 103 24 +b823 c 103 24 +b82f 7 100 24 +b836 12 104 24 +b848 12 105 24 +b85a d 97 24 +b867 9 109 24 +b870 a 110 24 +b87a 1a 111 24 +b894 8 112 24 +b89c 9 112 24 +b8a5 9 112 24 +b8ae 9 112 24 +b8b7 9 112 24 +b8c0 9 112 24 +b8c9 9 112 24 +b8d2 9 112 24 +b8db 9 112 24 +b8e4 9 112 24 +b8ed 9 112 24 +b8f6 9 112 24 +b8ff 9 112 24 +b908 9 112 24 +b911 9 112 24 +b91a 9 112 24 +b923 4 110 24 +b927 a 110 24 +b931 5 115 24 +b936 8 111 24 +b93e 15 115 24 +b953 3 116 24 +b956 3 116 24 +b959 2 116 24 +b95b 2 117 24 +b95d 5 115 24 +b962 e 115 24 +b970 3 116 24 +b973 2 116 24 +b975 2 117 24 +b977 4 116 24 +b97b 2 116 24 +b97d 2 117 24 +b97f 4 116 24 +b983 2 116 24 +b985 2 117 24 +b987 4 116 24 +b98b 2 116 24 +b98d 2 117 24 +b98f a 115 24 +b999 17 119 24 +b9b0 12 120 24 +b9c2 3 121 24 +b9c5 2 121 24 +b9c7 6 121 24 +b9cd 3 123 24 +FUNC b9d0 e 0 MacFileUtilities::MachoID::UpdateMD5(unsigned char*, unsigned long) +b9d0 7 126 24 +b9d7 2 126 24 +b9d9 5 126 24 +FUNC b9e0 eb 0 +b9e0 2f 129 24 +ba0f 9 130 24 +ba18 18 130 24 +ba30 7 138 24 +ba37 c 138 24 +ba43 11 146 24 +ba54 4 146 24 +ba58 10 149 24 +ba68 7 149 24 +ba6f 8 149 24 +ba77 8 149 24 +ba7f 13 137 24 +ba92 7 140 24 +ba99 1b 150 24 +bab4 17 152 24 +FUNC bad0 6b 0 MacFileUtilities::MachoID::UUIDCommand(int, int, unsigned char*) +bad0 17 156 24 +bae7 7 158 24 +baee 14 159 24 +bb02 a 159 24 +bb0c 24 165 24 +bb30 b 170 24 +FUNC bb40 8b 0 MacFileUtilities::MachoID::WalkHeader(int, int, bool (*)(MacFileUtilities::MachoWalker*, load_command*, long long, bool, void*), void*) +bb40 f 240 24 +bb4f 7 242 24 +bb56 3 241 24 +bb59 2 241 24 +bb5b b 242 24 +bb66 8 242 24 +bb6e 14 243 24 +bb82 11 245 24 +bb93 12 246 24 +bba5 5 244 24 +bbaa 14 248 24 +bbbe d 244 24 +FUNC bbd0 3d 0 MacFileUtilities::MachoID::UUIDWalkerCB(MacFileUtilities::MachoWalker*, load_command*, long long, bool, void*) +bbd0 d 331 24 +bbdd 5 332 24 +bbe2 11 336 24 +bbf3 9 336 24 +bbfc a 341 24 +bc06 7 348 24 +FUNC bc10 e4 0 MacFileUtilities::MachoID::IDCommand(int, int, unsigned char*) +bc10 e 174 24 +bc1e 8 176 24 +bc26 17 177 24 +bc3d 13 177 24 +bc50 6 188 24 +bc56 8 192 24 +bc5e 4 192 24 +bc62 e 192 24 +bc70 6 192 24 +bc76 5 192 24 +bc7b 11 193 24 +bc8c 3 193 24 +bc8f 3 193 24 +bc92 2 192 24 +bc94 9 192 24 +bc9d 4 196 24 +bca1 5 196 24 +bca6 3 196 24 +bca9 5 197 24 +bcae 3 197 24 +bcb1 3 198 24 +bcb4 3 199 24 +bcb7 4 200 24 +bcbb 5 200 24 +bcc0 3 200 24 +bcc3 5 201 24 +bcc8 3 201 24 +bccb 3 202 24 +bcce 5 203 24 +bcd3 5 204 24 +bcd8 3 204 24 +bcdb 5 205 24 +bce0 3 205 24 +bce3 3 206 24 +bce6 5 207 24 +bceb 9 213 24 +FUNC bd00 3d 0 MacFileUtilities::MachoID::IDWalkerCB(MacFileUtilities::MachoWalker*, load_command*, long long, bool, void*) +bd00 d 352 24 +bd0d 5 353 24 +bd12 11 356 24 +bd23 9 356 24 +bd2c a 360 24 +bd36 7 367 24 +FUNC bd40 40 0 MacFileUtilities::MachoID::Adler32(int, int) +bd40 4 215 24 +bd44 13 216 24 +bd57 a 217 24 +bd61 13 219 24 +bd74 4 219 24 +bd78 6 222 24 +bd7e 2 223 24 +FUNC bd80 598 0 MacFileUtilities::MachoID::WalkerCB(MacFileUtilities::MachoWalker*, load_command*, long long, bool, void*) +bd80 30 252 24 +bdb0 4 255 24 +bdb4 1a 255 24 +bdce 11 258 24 +bddf 8 258 24 +bde7 d 261 24 +bdf4 f 262 24 +be03 9 267 24 +be0c 8 267 24 +be14 e 274 24 +be22 4 272 24 +be26 1a 278 24 +be40 14 275 24 +be54 d 275 24 +be61 d 279 24 +be6e b 283 24 +be79 5 284 24 +be7e 9 283 24 +be87 5 284 24 +be8c 9 284 24 +be95 10 130 24 +bea5 b 284 24 +beb0 7 138 24 +beb7 c 138 24 +bec3 17 146 24 +beda 4 146 24 +bede e 149 24 +beec 7 149 24 +bef3 8 149 24 +befb d 149 24 +bf08 13 137 24 +bf1b 7 140 24 +bf22 13 150 24 +bf35 4 286 24 +bf39 3 274 24 +bf3c 7 274 24 +bf43 16 274 24 +bf59 11 291 24 +bf6a 8 291 24 +bf72 d 294 24 +bf7f f 295 24 +bf8e 9 300 24 +bf97 8 300 24 +bf9f e 307 24 +bfad c 305 24 +bfb9 17 311 24 +bfd0 14 308 24 +bfe4 8 308 24 +bfec d 312 24 +bff9 b 316 24 +c004 5 318 24 +c009 9 316 24 +c012 5 319 24 +c017 9 130 24 +c020 10 130 24 +c030 10 318 24 +c040 7 138 24 +c047 c 138 24 +c053 17 146 24 +c06a 4 146 24 +c06e e 149 24 +c07c 7 149 24 +c083 8 149 24 +c08b d 149 24 +c098 13 137 24 +c0ab 7 140 24 +c0b2 e 150 24 +c0c0 4 321 24 +c0c4 3 307 24 +c0c7 7 307 24 +c0ce 12 307 24 +c0e0 14 308 24 +c0f4 8 308 24 +c0fc b 316 24 +c107 5 318 24 +c10c 9 316 24 +c115 5 319 24 +c11a 9 130 24 +c123 10 130 24 +c133 d 318 24 +c140 7 138 24 +c147 c 138 24 +c153 17 146 24 +c16a 4 146 24 +c16e e 149 24 +c17c 7 149 24 +c183 8 149 24 +c18b d 149 24 +c198 13 137 24 +c1ab 7 140 24 +c1b2 e 150 24 +c1c0 4 321 24 +c1c4 3 307 24 +c1c7 7 307 24 +c1ce 22 307 24 +c1f0 14 275 24 +c204 8 275 24 +c20c b 283 24 +c217 5 284 24 +c21c 9 283 24 +c225 4 284 24 +c229 9 284 24 +c232 10 130 24 +c242 e 284 24 +c250 7 138 24 +c257 c 138 24 +c263 17 146 24 +c27a 4 146 24 +c27e e 149 24 +c28c 7 149 24 +c293 8 149 24 +c29b d 149 24 +c2a8 13 137 24 +c2bb 7 140 24 +c2c2 e 150 24 +c2d0 4 286 24 +c2d4 3 274 24 +c2d7 7 274 24 +c2de 23 274 24 +c301 17 327 24 +FUNC c320 6c 0 MacFileUtilities::MachoID::MD5(int, int, unsigned char*) +c320 14 225 24 +c334 13 226 24 +c347 7 228 24 +c34e 8 228 24 +c356 18 230 24 +c36e 4 230 24 +c372 11 233 24 +c383 9 235 24 +FUNC c390 f 0 breakpad_swap_uuid_command(breakpad_uuid_command*) +c390 2 41 25 +c392 2 60 34 +c394 2 41 25 +c396 3 42 25 +c399 2 60 34 +c39b 3 42 25 +c39e 1 43 25 +FUNC c3a0 f 0 breakpad_swap_load_command(load_command*) +c3a0 2 46 25 +c3a2 2 60 34 +c3a4 2 46 25 +c3a6 3 47 25 +c3a9 2 60 34 +c3ab 3 47 25 +c3ae 1 48 25 +FUNC c3b0 22 0 breakpad_swap_dylib_command(dylib_command*) +c3b0 4 51 25 +c3b4 9 60 34 +c3bd 4 51 25 +c3c1 3 56 25 +c3c4 2 60 34 +c3c6 3 56 25 +c3c9 3 57 25 +c3cc 2 60 34 +c3ce 3 57 25 +c3d1 1 58 25 +FUNC c3e0 35 0 breakpad_swap_segment_command(segment_command*) +c3e0 2 61 25 +c3e2 2 60 34 +c3e4 2 61 25 +c3e6 3 62 25 +c3e9 2 60 34 +c3eb 3 62 25 +c3ee 5 64 25 +c3f3 d 60 34 +c400 5 64 25 +c405 5 68 25 +c40a 5 60 34 +c40f 5 68 25 +c414 1 72 25 +FUNC c420 6d 0 breakpad_swap_segment_command_64(segment_command_64*) +c420 3 75 25 +c423 4 60 34 +c427 2 75 25 +c429 4 76 25 +c42d 2 60 34 +c42f 3 76 25 +c432 5 78 25 +c437 d 74 34 +c444 5 78 25 +c449 5 80 25 +c44e 5 74 34 +c453 5 80 25 +c458 4 83 25 +c45c 4 85 25 +c460 4 83 25 +c464 4 84 25 +c468 c 83 25 +c474 4 86 25 +c478 6 83 25 +c47e 9 60 34 +c487 5 83 25 +c48c 1 87 25 +FUNC c490 f 0 breakpad_swap_fat_header(fat_header*) +c490 2 90 25 +c492 2 60 34 +c494 2 90 25 +c496 3 91 25 +c499 2 60 34 +c49b 3 91 25 +c49e 1 92 25 +FUNC c4a0 87 0 breakpad_swap_fat_arch(fat_arch*, unsigned int) +c4a0 8 95 25 +c4a8 2 95 25 +c4aa c 96 25 +c4b6 9 60 34 +c4bf 4 96 25 +c4c3 3 100 25 +c4c6 2 60 34 +c4c8 8 100 25 +c4d0 11 96 25 +c4e1 f 60 34 +c4f0 5 96 25 +c4f5 5 60 34 +c4fa 5 96 25 +c4ff 3 100 25 +c502 2 60 34 +c504 3 100 25 +c507 5 96 25 +c50c 5 60 34 +c511 5 96 25 +c516 2 100 25 +c518 2 60 34 +c51a 2 100 25 +c51c a 95 25 +c526 1 102 25 +FUNC c530 2a 0 breakpad_swap_mach_header(mach_header*) +c530 4 105 25 +c534 9 60 34 +c53d 4 105 25 +c541 3 109 25 +c544 2 60 34 +c546 3 109 25 +c549 3 110 25 +c54c 2 60 34 +c54e 3 110 25 +c551 3 111 25 +c554 2 60 34 +c556 3 111 25 +c559 1 112 25 +FUNC c560 25 0 breakpad_swap_mach_header_64(mach_header_64*) +c560 4 115 25 +c564 d 60 34 +c571 4 115 25 +c575 5 119 25 +c57a 5 60 34 +c57f 5 119 25 +c584 1 123 25 +FUNC c590 c8 0 breakpad_swap_section(section*, unsigned int) +c590 8 127 25 +c598 2 127 25 +c59a d 128 25 +c5a7 d 60 34 +c5b4 5 128 25 +c5b9 5 133 25 +c5be 5 60 34 +c5c3 5 133 25 +c5c8 3 137 25 +c5cb 2 60 34 +c5cd 8 137 25 +c5d5 14 128 25 +c5e9 17 60 34 +c600 5 128 25 +c605 5 60 34 +c60a 5 128 25 +c60f 5 133 25 +c614 5 60 34 +c619 5 133 25 +c61e 3 137 25 +c621 2 60 34 +c623 3 137 25 +c626 5 128 25 +c62b 5 60 34 +c630 5 128 25 +c635 5 133 25 +c63a 5 60 34 +c63f 5 133 25 +c644 2 137 25 +c646 2 60 34 +c648 2 137 25 +c64a d 127 25 +c657 1 139 25 +FUNC c660 5e 0 breakpad_swap_section_64(section_64*, unsigned int) +c660 4 143 25 +c664 2 143 25 +c666 1f 144 25 +c685 5 74 34 +c68a 5 144 25 +c68f 5 147 25 +c694 5 60 34 +c699 5 147 25 +c69e 3 151 25 +c6a1 2 60 34 +c6a3 3 151 25 +c6a6 3 152 25 +c6a9 2 60 34 +c6ab 3 152 25 +c6ae 2 153 25 +c6b0 2 60 34 +c6b2 2 153 25 +c6b4 9 143 25 +c6bd 1 155 25 +FUNC c6c0 4d 0 +c6c0 7 59 26 +c6c7 6 52 26 +c6cd 10 54 26 +c6dd 4 55 26 +c6e1 4 56 26 +c6e5 18 58 26 +c6fd c 60 26 +c709 2 60 26 +c70b 2 61 26 +FUNC c710 4d 0 MacFileUtilities::MachoWalker::MachoWalker(char const*, bool (*)(MacFileUtilities::MachoWalker*, load_command*, long long, bool, void*), void*) +c710 7 59 26 +c717 6 52 26 +c71d 10 54 26 +c72d 4 55 26 +c731 4 56 26 +c735 18 58 26 +c74d c 60 26 +c759 2 60 26 +c75b 2 61 26 +FUNC c760 2f 0 +c760 6 65 26 +c766 4 66 26 +c76a 4 67 26 +c76e 4 68 26 +c772 4 69 26 +c776 18 71 26 +c78e 1 73 26 +FUNC c790 2f 0 MacFileUtilities::MachoWalker::MachoWalker(void*, unsigned long, bool (*)(MacFileUtilities::MachoWalker*, load_command*, long long, bool, void*), void*) +c790 6 65 26 +c796 4 66 26 +c79a 4 67 26 +c79e 4 68 26 +c7a2 4 69 26 +c7a6 18 71 26 +c7be 1 73 26 +FUNC c7c0 17 0 +c7c0 3 76 26 +c7c3 5 76 26 +c7c8 5 77 26 +c7cd 2 78 26 +c7cf 8 77 26 +FUNC c7e0 17 0 MacFileUtilities::MachoWalker::~MachoWalker() +c7e0 3 76 26 +c7e3 5 76 26 +c7e8 5 77 26 +c7ed 2 78 26 +c7ef 8 77 26 +FUNC c800 152 0 MacFileUtilities::MachoWalker::WalkHeader(int, int) +c800 d 80 26 +c80d 4 84 26 +c811 5 85 26 +c816 9 86 26 +c81f d 87 26 +c82c 8 91 26 +c834 4 91 26 +c838 6 92 26 +c83e 7 93 26 +c845 d 95 26 +c852 4 112 26 +c856 3 102 26 +c859 2 102 26 +c85b 5 103 26 +c860 4 106 26 +c864 4 106 26 +c868 5 106 26 +c86d 5 107 26 +c872 8 112 26 +c87a 7 112 26 +c881 7 115 26 +c888 d 115 26 +c895 8 115 26 +c89d 9 99 26 +c8a6 27 112 26 +c8cd 4 233 26 +c8d1 d 234 26 +c8de 15 235 26 +c8f3 4 237 26 +c8f7 8 238 26 +c8ff 4 239 26 +c903 4 240 26 +c907 4 241 26 +c90b b 241 26 +c916 1d 243 26 +c933 1f 86 26 +FUNC c960 392 0 MacFileUtilities::MachoWalker::FindHeader(int, int, long long&) +c960 19 131 26 +c979 4 112 26 +c97d 3 102 26 +c980 2 102 26 +c982 4 106 26 +c986 6 106 26 +c98c 13 107 26 +c99f a 115 26 +c9a9 c 115 26 +c9b5 a 134 26 +c9bf 6 141 26 +c9c5 6 112 26 +c9cb a 137 26 +c9d5 37 141 26 +ca0c 4 112 26 +ca10 3 102 26 +ca13 2 102 26 +ca15 4 106 26 +ca19 a 106 26 +ca23 e 107 26 +ca31 d 112 26 +ca3e 7 169 26 +ca45 4 112 26 +ca49 3 102 26 +ca4c 6 102 26 +ca52 4 106 26 +ca56 a 106 26 +ca60 a 107 26 +ca6a 18 112 26 +ca82 a 115 26 +ca8c c 115 26 +ca98 a 153 26 +caa2 6 156 26 +caa8 21 112 26 +cac9 11 156 26 +cada 5 157 26 +cadf 7 159 26 +cae6 5 160 26 +caeb 6 159 26 +caf1 1f 165 26 +cb10 a 115 26 +cb1a c 115 26 +cb26 11 115 26 +cb37 d 112 26 +cb44 5 175 26 +cb49 d 177 26 +cb56 b 181 26 +cb61 3 189 26 +cb64 1c 189 26 +cb80 4 112 26 +cb84 3 102 26 +cb87 2 102 26 +cb89 9 103 26 +cb92 4 106 26 +cb96 4 106 26 +cb9a 9 106 26 +cba3 1d 112 26 +cbc0 2 115 26 +cbc2 12 115 26 +cbd4 a 115 26 +cbde 10 186 26 +cbee 15 188 26 +cc03 a 195 26 +cc0d 3 181 26 +cc10 22 181 26 +cc32 4 112 26 +cc36 3 102 26 +cc39 2 102 26 +cc3b 9 103 26 +cc44 4 106 26 +cc48 4 106 26 +cc4c 9 106 26 +cc55 1d 112 26 +cc72 2 115 26 +cc74 d 115 26 +cc81 a 182 26 +cc8b d 186 26 +cc98 7 188 26 +cc9f a 195 26 +cca9 2 181 26 +ccab 10 181 26 +ccbb 12 200 26 +cccd 4 191 26 +ccd1 b 191 26 +ccdc 9 107 26 +cce5 d 112 26 +FUNC cd00 e9 0 MacFileUtilities::MachoWalker::WalkHeader64AtOffset(long long) +cd00 e 228 26 +cd0e 4 112 26 +cd12 3 102 26 +cd15 2 102 26 +cd17 5 103 26 +cd1c 4 106 26 +cd20 4 106 26 +cd24 5 106 26 +cd29 5 107 26 +cd2e 7 112 26 +cd35 7 112 26 +cd3c 6 115 26 +cd42 d 115 26 +cd4f d 115 26 +cd5c 26 112 26 +cd82 3 233 26 +cd85 c 234 26 +cd91 14 235 26 +cda5 4 237 26 +cda9 8 238 26 +cdb1 4 239 26 +cdb5 4 240 26 +cdb9 4 241 26 +cdbd b 241 26 +cdc8 18 243 26 +cde0 9 246 26 +FUNC cdf0 116 0 MacFileUtilities::MachoWalker::WalkHeaderAtOffset(long long) +cdf0 e 202 26 +cdfe 4 112 26 +ce02 3 102 26 +ce05 2 102 26 +ce07 5 103 26 +ce0c 4 106 26 +ce10 4 106 26 +ce14 5 106 26 +ce19 5 107 26 +ce1e 7 112 26 +ce25 7 112 26 +ce2c 6 115 26 +ce32 d 115 26 +ce3f d 115 26 +ce4c 25 112 26 +ce71 3 207 26 +ce74 c 208 26 +ce80 10 209 26 +ce90 25 214 26 +ceb5 d 215 26 +cec2 4 217 26 +cec6 8 218 26 +cece 4 219 26 +ced2 4 220 26 +ced6 4 221 26 +ceda b 221 26 +cee5 18 223 26 +cefd 9 226 26 +FUNC cf10 5f 0 MacFileUtilities::MachoWalker::ReadBytes(void*, unsigned long, long long) +cf10 6 101 26 +cf16 4 112 26 +cf1a 3 102 26 +cf1d 2 102 26 +cf1f 5 103 26 +cf24 4 106 26 +cf28 7 106 26 +cf2f 7 106 26 +cf36 8 107 26 +cf3e 3 112 26 +cf41 10 112 26 +cf51 2 115 26 +cf53 8 115 26 +cf5b b 115 26 +cf66 9 117 26 +FUNC cf70 34 0 MacFileUtilities::MachoWalker::CurrentHeader(mach_header_64*, long long*) +cf70 9 120 26 +cf79 1e 121 26 +cf97 4 122 26 +cf9b 5 122 26 +cfa0 4 127 26 +FUNC cfb0 1ab 0 MacFileUtilities::MachoWalker::WalkHeaderCore(long long, unsigned int, bool) +cfb0 1a 249 26 +cfca f 250 26 +cfd9 17 255 26 +cff0 4 112 26 +cff4 3 102 26 +cff7 8 102 26 +cfff 9 103 26 +d008 4 106 26 +d00c 4 106 26 +d010 9 106 26 +d019 17 112 26 +d030 4 115 26 +d034 16 115 26 +d04a a 252 26 +d054 8 256 26 +d05c 9 259 26 +d065 4 259 26 +d069 16 259 26 +d07f 8 259 26 +d087 4 262 26 +d08b 3 262 26 +d08e 2 250 26 +d090 10 250 26 +d0a0 4 112 26 +d0a4 3 102 26 +d0a7 8 102 26 +d0af 9 103 26 +d0b8 4 106 26 +d0bc 4 106 26 +d0c0 5 106 26 +d0c5 b 112 26 +d0d0 4 115 26 +d0d4 16 115 26 +d0ea 6 115 26 +d0f0 9 259 26 +d0f9 4 259 26 +d0fd 13 259 26 +d110 4 259 26 +d114 4 262 26 +d118 3 262 26 +d11b 2 250 26 +d11d 17 250 26 +d134 5 107 26 +d139 7 112 26 +d140 c 112 26 +d14c f 266 26 +FUNC d160 107 0 MacStringUtils::ConvertToString(__CFString const*) +d160 13 37 28 +d173 b 38 28 +d17e 1a 1798 5 +d198 5 41 28 +d19d 10 45 28 +d1ad 4 46 28 +d1b1 17 46 28 +d1c8 2b 48 28 +d1f3 5 50 28 +d1f8 5 220 31 +d1fd 5 50 28 +d202 b 51 28 +d20d 8 203 31 +d215 11 54 28 +d226 29 220 31 +d24f 8 203 31 +d257 10 54 28 +FUNC d270 31d 0 MacStringUtils::IntegerValueAtIndex(std::__1::basic_string, std::__1::allocator >&, unsigned int) +d270 16 56 28 +d286 11 2242 3 +d297 16 2021 5 +d2ad 10 1798 5 +d2bd 3 63 28 +d2c0 4 1785 5 +d2c4 5 1785 5 +d2c9 3 1697 5 +d2cc 4 1779 5 +d2d0 4 1759 5 +d2d4 a 1697 5 +d2de 7 1779 5 +d2e5 2b 1759 5 +d310 4 1749 5 +d314 6 1749 5 +d31a a 1697 5 +d324 14 1791 5 +d338 4 1749 5 +d33c 4 1697 5 +d340 9 1791 5 +d349 3 1749 5 +d34c 3 1697 5 +d34f 4 1460 5 +d353 a 1076 5 +d35d 4 1079 5 +d361 f 646 5 +d370 4 662 5 +d374 b 646 5 +d37f 5 1080 5 +d384 3 1079 5 +d387 c 1079 5 +d393 3 1081 5 +d396 19 66 28 +d3af 4 1460 5 +d3b3 6 69 28 +d3b9 1b 3369 5 +d3d4 e 1697 5 +d3e2 e 1741 5 +d3f0 5 1776 5 +d3f5 3 636 5 +d3f8 9 1756 5 +d401 b 1471 5 +d40c 1d 2464 5 +d429 11 1798 5 +d43a a 69 28 +d444 7 71 28 +d44b 9 1697 5 +d454 9 1791 5 +d45d 5 72 28 +d462 5 73 28 +d467 3 75 28 +d46a 4 1749 5 +d46e 6 1749 5 +d474 5 1697 5 +d479 4 1759 5 +d47d 9 1779 5 +d486 4 1791 5 +d48a 2 1697 5 +d48c 9 1791 5 +d495 6 1749 5 +d49b 5 1697 5 +d4a0 5 1759 5 +d4a5 5 1779 5 +d4aa c 1791 5 +d4b6 6 1749 5 +d4bc 2 1697 5 +d4be 4 1460 5 +d4c2 a 1037 5 +d4cc 4 1040 5 +d4d0 4 1040 5 +d4d4 8 1050 1 +d4dc 3 1052 1 +d4df 11 1039 5 +d4f0 4 638 5 +d4f4 3 1051 1 +d4f7 5 1051 1 +d4fc 3 1050 1 +d4ff 14 1050 1 +d513 5 1041 5 +d518 11 1043 5 +d529 18 63 28 +d541 a 82 28 +d54b 5 82 28 +d550 17 82 28 +d567 f 1471 5 +d576 a 82 28 +d580 d 82 28 +FUNC d590 44 0 +d590 c 39 21 +d59c a 203 20 +d5a6 10 44 21 +d5b6 6 138 21 +d5bc 3 177 20 +d5bf 7 65 21 +d5c6 7 87 21 +d5cd 7 51 21 +FUNC d5e0 1a 0 google_breakpad::MachMessage::SetDescriptorCount(int) +d5e0 3 135 21 +d5e3 2 138 21 +d5e5 8 140 21 +d5ed 5 138 21 +d5f2 2 137 21 +d5f4 3 137 21 +d5f7 2 138 21 +d5f9 1 142 21 +FUNC d600 73 0 google_breakpad::MachMessage::SetData(void*, int) +d600 4 56 21 +d604 4 94 21 +d608 3 85 21 +d60b 8 94 21 +d613 4 172 20 +d617 6 82 21 +d61d 3 85 21 +d620 3 87 21 +d623 3 59 21 +d626 3 59 21 +d629 d 61 21 +d636 4 65 21 +d63a 5 66 21 +d63f 4 94 21 +d643 4 94 21 +d647 5 66 21 +d64c 8 66 21 +d654 4 94 21 +d658 4 94 21 +d65c 4 172 20 +d660 6 82 21 +d666 3 85 21 +d669 3 85 21 +d66c 5 87 21 +d671 2 71 21 +FUNC d680 34 0 google_breakpad::MachSendMessage::MachSendMessage(int) +d680 8 39 21 +d688 4 39 21 +d68c a 44 21 +d696 6 138 21 +d69c 3 177 20 +d69f 7 65 21 +d6a6 7 87 21 +d6ad 7 51 21 +FUNC d6c0 1c 0 google_breakpad::MachMessage::CalculateSize() +d6c0 4 94 21 +d6c4 4 94 21 +d6c8 4 172 20 +d6cc 6 82 21 +d6d2 3 85 21 +d6d5 3 85 21 +d6d8 3 87 21 +d6db 1 89 21 +FUNC d6e0 e 0 google_breakpad::MachMessage::GetDataPacket() +d6e0 4 94 21 +d6e4 4 94 21 +d6e8 5 96 21 +d6ed 1 98 21 +FUNC d6f0 17 0 +d6f0 7 106 21 +d6f7 f 106 21 +d706 1 107 21 +FUNC d710 aa 0 google_breakpad::MachMessage::AddDescriptor(google_breakpad::MachMsgPortDescriptor const&) +d710 a 111 21 +d71a 4 94 21 +d71e 4 94 21 +d722 4 172 20 +d726 6 82 21 +d72c 3 85 21 +d72f 3 85 21 +d732 3 87 21 +d735 3 114 21 +d738 4 114 21 +d73c d 116 21 +d749 5 96 21 +d74e 3 123 21 +d751 4 123 21 +d755 4 123 21 +d759 5 123 21 +d75e 8 106 21 +d766 10 106 21 +d776 4 94 21 +d77a 4 126 21 +d77e 3 135 21 +d781 2 138 21 +d783 8 140 21 +d78b 6 138 21 +d791 3 186 20 +d794 3 137 21 +d797 2 138 21 +d799 4 94 21 +d79d 4 172 20 +d7a1 6 82 21 +d7a7 3 85 21 +d7aa 3 85 21 +d7ad 5 87 21 +d7b2 8 131 21 +FUNC d7c0 16 0 +d7c0 2 145 21 +d7c2 3 146 21 +d7c5 c 149 21 +d7d1 4 146 21 +d7d5 1 153 21 +FUNC d7e0 13 0 google_breakpad::MachMessage::GetTranslatedPort(int) +d7e0 2 156 21 +d7e2 5 157 21 +d7e7 3 149 21 +d7ea 8 135 20 +d7f2 1 161 21 +FUNC d800 83 0 +d800 e 167 21 +d80e 9 168 21 +d817 f 170 21 +d826 3 170 21 +d829 4 174 21 +d82d 2 178 21 +d82f e 177 21 +d83d 3 177 21 +d840 4 182 21 +d844 d 185 21 +d851 c 186 21 +d85d 3 186 21 +d860 4 188 21 +d864 9 192 21 +d86d 2 194 21 +d86f 8 191 21 +d877 3 191 21 +d87a 9 195 21 +FUNC d890 83 0 google_breakpad::ReceivePort::ReceivePort(char const*) +d890 e 167 21 +d89e 9 168 21 +d8a7 f 170 21 +d8b6 3 170 21 +d8b9 4 174 21 +d8bd 2 178 21 +d8bf e 177 21 +d8cd 3 177 21 +d8d0 4 182 21 +d8d4 d 185 21 +d8e1 c 186 21 +d8ed 3 186 21 +d8f0 4 188 21 +d8f4 9 192 21 +d8fd 2 194 21 +d8ff 8 191 21 +d907 3 191 21 +d90a 9 195 21 +FUNC d920 3f 0 +d920 6 199 21 +d926 9 200 21 +d92f f 202 21 +d93e 3 202 21 +d941 4 206 21 +d945 2 210 21 +d947 e 209 21 +d955 3 209 21 +d958 7 213 21 +FUNC d960 3f 0 google_breakpad::ReceivePort::ReceivePort() +d960 6 199 21 +d966 9 200 21 +d96f f 202 21 +d97e 3 202 21 +d981 4 206 21 +d985 2 210 21 +d987 e 209 21 +d995 3 209 21 +d998 7 213 21 +FUNC d9a0 a 0 +d9a0 2 219 21 +d9a2 7 220 21 +d9a9 1 221 21 +FUNC d9b0 a 0 google_breakpad::ReceivePort::ReceivePort(unsigned int) +d9b0 2 219 21 +d9b2 7 220 21 +d9b9 1 221 21 +FUNC d9c0 23 0 +d9c0 7 225 21 +d9c7 9 226 21 +d9d0 2 226 21 +d9d2 7 226 21 +d9d9 2 227 21 +d9db 8 226 21 +FUNC d9f0 23 0 google_breakpad::ReceivePort::~ReceivePort() +d9f0 7 225 21 +d9f7 9 226 21 +da00 2 226 21 +da02 7 226 21 +da09 2 227 21 +da0b 8 226 21 +FUNC da20 66 0 google_breakpad::ReceivePort::WaitForMessage(google_breakpad::MachReceiveMessage*, unsigned int) +da20 9 231 21 +da29 5 232 21 +da2e 3 237 21 +da31 4 237 21 +da35 2 258 21 +da37 6 240 21 +da3d 3 241 21 +da40 4 241 21 +da44 7 242 21 +da4b 7 243 21 +da52 7 244 21 +da59 3 247 21 +da5c d 247 21 +da69 18 249 21 +da81 5 258 21 +FUNC da90 4b 0 +da90 a 264 21 +da9a 8 265 21 +daa2 18 266 21 +daba 3 266 21 +dabd 4 269 21 +dac1 4 272 21 +dac5 b 272 21 +dad0 3 272 21 +dad3 8 275 21 +FUNC dae0 4b 0 google_breakpad::MachPortSender::MachPortSender(char const*) +dae0 a 264 21 +daea 8 265 21 +daf2 18 266 21 +db0a 3 266 21 +db0d 4 269 21 +db11 4 272 21 +db15 b 272 21 +db20 3 272 21 +db23 8 275 21 +FUNC db30 a 0 +db30 2 279 21 +db32 7 280 21 +db39 1 281 21 +FUNC db40 a 0 google_breakpad::MachPortSender::MachPortSender(unsigned int) +db40 2 279 21 +db42 7 280 21 +db49 1 281 21 +FUNC db50 41 0 google_breakpad::MachPortSender::SendMessage(google_breakpad::MachSendMessage&, unsigned int) +db50 7 285 21 +db57 9 297 21 +db60 4 286 21 +db64 3 290 21 +db67 4 290 21 +db6b 2 304 21 +db6d 2 293 21 +db6f 4 293 21 +db73 19 295 21 +db8c 5 304 21 +FUNC dba0 c3 0 main +dba0 1a 30 33 +dbba 11 2242 3 +dbcb 19 2021 5 +dbe4 2c 31 33 +dc10 5 31 33 +dc15 10 21 33 +dc25 31 34 33 +dc56 d 31 33 +FUNC dc70 33 0 (anonymous namespace)::callback(char const*, char const*, void*, bool) +dc70 9 9 33 +dc79 4 10 33 +dc7d 16 11 33 +dc93 c 13 33 +dc9f 4 16 33 +PUBLIC 0 0 _mh_execute_header +PUBLIC 4680 0 __clang_call_terminate +PUBLIC e36c 0 GCC_except_table2 +PUBLIC e384 0 GCC_except_table5 +PUBLIC e39c 0 GCC_except_table11 +PUBLIC e41c 0 GCC_except_table13 +PUBLIC e49c 0 GCC_except_table0 +PUBLIC e534 0 GCC_except_table3 +PUBLIC e560 0 GCC_except_table8 +PUBLIC e60c 0 GCC_except_table9 +PUBLIC e6b8 0 GCC_except_table14 +PUBLIC e6e4 0 GCC_except_table15 +PUBLIC e720 0 GCC_except_table3 +PUBLIC e75c 0 GCC_except_table8 +PUBLIC e77c 0 GCC_except_table10 +PUBLIC e7bc 0 GCC_except_table16 +PUBLIC e7e4 0 GCC_except_table17 +PUBLIC e810 0 GCC_except_table18 +PUBLIC e884 0 GCC_except_table19 +PUBLIC e8cc 0 GCC_except_table25 +PUBLIC e90c 0 GCC_except_table0 +PUBLIC e968 0 GCC_except_table1 +PUBLIC e9a4 0 GCC_except_table3 +PUBLIC ea0c 0 GCC_except_table5 +PUBLIC ea24 0 GCC_except_table9 +PUBLIC ea60 0 GCC_except_table10 +PUBLIC eafc 0 GCC_except_table11 +PUBLIC eb64 0 GCC_except_table12 +PUBLIC ec5c 0 GCC_except_table13 +PUBLIC ecc4 0 GCC_except_table14 +PUBLIC ed7c 0 GCC_except_table15 +PUBLIC ee0c 0 GCC_except_table16 +PUBLIC ee4c 0 GCC_except_table18 +PUBLIC ee78 0 GCC_except_table23 +PUBLIC eed4 0 GCC_except_table24 +PUBLIC ef30 0 GCC_except_table30 +PUBLIC efc0 0 GCC_except_table31 +PUBLIC f020 0 GCC_except_table33 +PUBLIC f0bc 0 GCC_except_table5 +PUBLIC f110 0 GCC_except_table3 +PUBLIC f13c 0 GCC_except_table10 +PUBLIC f184 0 GCC_except_table4 +PUBLIC f19c 0 GCC_except_table6 +PUBLIC f1b4 0 GCC_except_table0 +PUBLIC f1fc 0 GCC_except_table1 +PUBLIC f23c 0 GCC_except_table16 +PUBLIC f254 0 GCC_except_table18 +PUBLIC f26c 0 GCC_except_table0 +PUBLIC f700 0 google_breakpad::MinidumpFileWriter::kInvalidMDRVA +PUBLIC f720 0 typeinfo name for google_breakpad::MinidumpGenerator +PUBLIC f750 0 firstByteMark +PUBLIC f760 0 trailingBytesForUTF8 +PUBLIC f860 0 offsetsFromUTF8 +PUBLIC 113c0 0 vtable for google_breakpad::MinidumpGenerator +PUBLIC 11460 0 typeinfo for google_breakpad::MinidumpGenerator +PUBLIC 114d8 0 google_breakpad::s_exception_mask +PUBLIC 114e0 0 google_breakpad::gProtectedData (.0) +PUBLIC 114f0 0 google_breakpad::MinidumpGenerator::build_string_ +PUBLIC 11500 0 google_breakpad::MinidumpGenerator::os_major_version_ +PUBLIC 11504 0 google_breakpad::MinidumpGenerator::os_minor_version_ +PUBLIC 11508 0 google_breakpad::MinidumpGenerator::os_build_number_ +STACK CFI INIT d20 1a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d40 1a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT e70 2d .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI e71 .cfa: $rsp 16 + +STACK CFI INIT 1140 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 1420 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 17d0 104 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 17d1 .cfa: $rsp 16 + +STACK CFI 17d3 .cfa: $rsp 24 + +STACK CFI 17d5 .cfa: $rsp 32 + +STACK CFI 17d7 .cfa: $rsp 40 + +STACK CFI 17d9 .cfa: $rsp 48 + +STACK CFI 17da .cfa: $rsp 56 + +STACK CFI 17db $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT 19a0 c8 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 19a2 .cfa: $rsp 16 + +STACK CFI 19a4 .cfa: $rsp 24 + +STACK CFI 19a6 .cfa: $rsp 32 + +STACK CFI 19a7 .cfa: $rsp 40 + +STACK CFI 19a8 $r12: .cfa -32 + ^ $r14: .cfa -24 + ^ $r15: .cfa -16 + ^ $rbx: .cfa -40 + ^ .cfa: $rsp 48 + +STACK CFI INIT 1a70 f3 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 1a72 .cfa: $rsp 16 + +STACK CFI 1a74 .cfa: $rsp 24 + +STACK CFI 1a76 .cfa: $rsp 32 + +STACK CFI 1a77 .cfa: $rsp 40 + +STACK CFI 1a78 $r12: .cfa -32 + ^ $r14: .cfa -24 + ^ $r15: .cfa -16 + ^ $rbx: .cfa -40 + ^ .cfa: $rsp 48 + +STACK CFI INIT 1df0 1ba .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 1df1 .cfa: $rsp 16 + +STACK CFI 1df3 .cfa: $rsp 24 + +STACK CFI 1df5 .cfa: $rsp 32 + +STACK CFI 1df7 .cfa: $rsp 40 + +STACK CFI 1df9 .cfa: $rsp 48 + +STACK CFI 1dfa .cfa: $rsp 56 + +STACK CFI 1dfb $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT 1fb0 7 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 21c0 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 2db0 4a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 2e00 3a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 2e40 1c3 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 2e41 .cfa: $rsp 16 + +STACK CFI 2e43 .cfa: $rsp 24 + +STACK CFI 2e45 .cfa: $rsp 32 + +STACK CFI 2e47 .cfa: $rsp 40 + +STACK CFI 2e49 .cfa: $rsp 48 + +STACK CFI 2e4a .cfa: $rsp 56 + +STACK CFI 2e4b $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT 32f0 185 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 32f1 .cfa: $rsp 16 + +STACK CFI 32f3 .cfa: $rsp 24 + +STACK CFI 32f5 .cfa: $rsp 32 + +STACK CFI 32f7 .cfa: $rsp 40 + +STACK CFI 32f9 .cfa: $rsp 48 + +STACK CFI 32fa .cfa: $rsp 56 + +STACK CFI 32fb $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT 3ec0 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 3ed0 20 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 42a0 e .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 42b0 e .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 42c0 9 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 4400 8 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 4680 b .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 4681 .cfa: $rsp 16 + +STACK CFI INIT 4690 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 5970 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 5cd0 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 5d80 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 5db0 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 7410 24 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 7411 .cfa: $rsp 16 + +STACK CFI INIT 7440 8 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 7450 9 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 7460 22 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 7461 .cfa: $rsp 16 + +STACK CFI INIT 7810 3d .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 7811 .cfa: $rsp 16 + +STACK CFI INIT 7850 4 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 7860 8 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 7870 b5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 7871 .cfa: $rsp 16 + +STACK CFI 7873 .cfa: $rsp 24 + +STACK CFI 7875 .cfa: $rsp 32 + +STACK CFI 7876 .cfa: $rsp 40 + +STACK CFI 7877 $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -40 + ^ .cfa: $rsp 48 + +STACK CFI INIT 8100 4e .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 8101 .cfa: $rsp 16 + +STACK CFI 8102 .cfa: $rsp 24 + +STACK CFI 8103 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT 85b0 158 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 85b1 .cfa: $rsp 16 + +STACK CFI 85b3 .cfa: $rsp 24 + +STACK CFI 85b5 .cfa: $rsp 32 + +STACK CFI 85b7 .cfa: $rsp 40 + +STACK CFI 85b9 .cfa: $rsp 48 + +STACK CFI 85ba .cfa: $rsp 56 + +STACK CFI 85bb $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT 8f70 fa .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 9b20 13 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT 9b40 137 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI 9b41 .cfa: $rsp 16 + +STACK CFI 9b43 .cfa: $rsp 24 + +STACK CFI 9b45 .cfa: $rsp 32 + +STACK CFI 9b47 .cfa: $rsp 40 + +STACK CFI 9b49 .cfa: $rsp 48 + +STACK CFI 9b4a .cfa: $rsp 56 + +STACK CFI 9b4b $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT a370 108 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI a371 .cfa: $rsp 16 + +STACK CFI a373 .cfa: $rsp 24 + +STACK CFI a375 .cfa: $rsp 32 + +STACK CFI a376 .cfa: $rsp 40 + +STACK CFI a377 $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -40 + ^ .cfa: $rsp 48 + +STACK CFI INIT b080 114 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI b081 .cfa: $rsp 16 + +STACK CFI b083 .cfa: $rsp 24 + +STACK CFI b085 .cfa: $rsp 32 + +STACK CFI b087 .cfa: $rsp 40 + +STACK CFI b089 .cfa: $rsp 48 + +STACK CFI b08a .cfa: $rsp 56 + +STACK CFI b08b $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT b1a0 5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b1b0 16 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b1d0 16 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b410 c5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b4e0 c5 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b5b0 c0 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b670 c0 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b730 1 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b740 1 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT b9d0 e .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT bbd0 3d .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI bbd1 .cfa: $rsp 16 + +STACK CFI bbd2 .cfa: $rsp 24 + +STACK CFI bbd3 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT bd00 3d .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI bd01 .cfa: $rsp 16 + +STACK CFI bd02 .cfa: $rsp 24 + +STACK CFI bd03 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT c390 f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c3a0 f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c3b0 22 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c3e0 35 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c420 6d .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c490 f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c4a0 87 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c530 2a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c560 25 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c590 c8 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c660 5e .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c760 2f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c790 2f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT c7c0 17 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI c7c1 .cfa: $rsp 16 + +STACK CFI INIT c7e0 17 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI c7e1 .cfa: $rsp 16 + +STACK CFI INIT cf10 5f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI cf11 .cfa: $rsp 16 + +STACK CFI cf12 .cfa: $rsp 24 + +STACK CFI cf13 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT cf70 34 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT cfb0 1ab .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI cfb1 .cfa: $rsp 16 + +STACK CFI cfb3 .cfa: $rsp 24 + +STACK CFI cfb5 .cfa: $rsp 32 + +STACK CFI cfb7 .cfa: $rsp 40 + +STACK CFI cfb9 .cfa: $rsp 48 + +STACK CFI cfba .cfa: $rsp 56 + +STACK CFI cfbb $r12: .cfa -48 + ^ $r13: .cfa -40 + ^ $r14: .cfa -32 + ^ $r15: .cfa -24 + ^ $rbp: .cfa -16 + ^ $rbx: .cfa -56 + ^ .cfa: $rsp 64 + +STACK CFI INIT d590 44 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI d591 .cfa: $rsp 16 + +STACK CFI d592 .cfa: $rsp 24 + +STACK CFI d593 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT d5e0 1a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d680 34 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI d681 .cfa: $rsp 16 + +STACK CFI d682 .cfa: $rsp 24 + +STACK CFI d683 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT d6c0 1c .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d6e0 e .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d6f0 17 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d710 aa .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI d712 .cfa: $rsp 16 + +STACK CFI d713 .cfa: $rsp 24 + +STACK CFI d714 $r14: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT d7c0 16 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d7e0 13 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d920 3f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI d921 .cfa: $rsp 16 + +STACK CFI d922 .cfa: $rsp 24 + +STACK CFI d923 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT d960 3f .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI d961 .cfa: $rsp 16 + +STACK CFI d962 .cfa: $rsp 24 + +STACK CFI d963 $rbp: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT d9a0 a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d9b0 a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT d9c0 23 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI d9c1 .cfa: $rsp 16 + +STACK CFI INIT d9f0 23 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI d9f1 .cfa: $rsp 16 + +STACK CFI INIT da20 66 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI da21 .cfa: $rsp 16 + +STACK CFI INIT da90 4b .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI da92 .cfa: $rsp 16 + +STACK CFI da93 .cfa: $rsp 24 + +STACK CFI da94 $r14: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT dae0 4b .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI dae2 .cfa: $rsp 16 + +STACK CFI dae3 .cfa: $rsp 24 + +STACK CFI dae4 $r14: .cfa -16 + ^ $rbx: .cfa -24 + ^ .cfa: $rsp 32 + +STACK CFI INIT db30 a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT db40 a .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI INIT db50 41 .cfa: $rsp 8 + .ra: .cfa -8 + ^ +STACK CFI db51 .cfa: $rsp 16 + diff --git a/tests/sentry/api/endpoints/test_chunk_upload.py b/tests/sentry/api/endpoints/test_chunk_upload.py index ba5cbc3507f10d..e91930f9fc34bc 100644 --- a/tests/sentry/api/endpoints/test_chunk_upload.py +++ b/tests/sentry/api/endpoints/test_chunk_upload.py @@ -9,21 +9,23 @@ from sentry.models import ApiToken, FileBlob from sentry.models.file import DEFAULT_BLOB_SIZE from sentry.testutils import APITestCase -from sentry.api.endpoints.chunk_upload import (MAX_CHUNKS_PER_REQUEST, MAX_CONCURRENCY, - HASH_ALGORITHM) +from sentry.api.endpoints.chunk import (MAX_CHUNKS_PER_REQUEST, MAX_CONCURRENCY, + HASH_ALGORITHM, MAX_REQUEST_SIZE) class ChunkUploadTest(APITestCase): - def test_chunk_parameters(self): - token = ApiToken.objects.create( + def setUp(self): + self.organization = self.create_organization(owner=self.user) + self.token = ApiToken.objects.create( user=self.user, - scope_list=['project:releases'], + scope_list=['project:write'], ) + self.url = reverse('sentry-api-0-chunk-upload', args=[self.organization.slug]) - url = reverse('sentry-api-0-chunk-upload') + def test_chunk_parameters(self): response = self.client.get( - url, - HTTP_AUTHORIZATION='Bearer {}'.format(token.token), + self.url, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), format='json' ) @@ -35,45 +37,40 @@ def test_chunk_parameters(self): assert response.status_code == 200, response.content assert response.data['chunkSize'] == DEFAULT_BLOB_SIZE assert response.data['chunksPerRequest'] == MAX_CHUNKS_PER_REQUEST + assert response.data['maxRequestSize'] == MAX_REQUEST_SIZE assert response.data['concurrency'] == MAX_CONCURRENCY assert response.data['hashAlgorithm'] == HASH_ALGORITHM - assert response.data['url'] == options.get('system.url-prefix') + assert response.data['url'] == options.get('system.url-prefix') + self.url options.set('system.upload-url-prefix', 'test') response = self.client.get( - url, - HTTP_AUTHORIZATION='Bearer {}'.format(token.token), + self.url, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), format='json' ) - assert response.data['url'] == options.get('system.upload-url-prefix') + assert response.data['url'] == options.get('system.upload-url-prefix') + self.url def test_wrong_api_token(self): token = ApiToken.objects.create( user=self.user, + scope_list=['org:org'], ) - url = reverse('sentry-api-0-chunk-upload') response = self.client.get( - url, + self.url, HTTP_AUTHORIZATION='Bearer {}'.format(token.token), ) assert response.status_code == 403, response.content def test_upload(self): - token = ApiToken.objects.create( - user=self.user, - scope_list=['project:releases'], - ) - string1 = '1 this is my testString' string2 = '2 this is my testString' checksum1 = sha1(string1).hexdigest() checksum2 = sha1(string2).hexdigest() - url = reverse('sentry-api-0-chunk-upload') response = self.client.post( - url, + self.url, data={ 'file': [ @@ -81,7 +78,7 @@ def test_upload(self): SimpleUploadedFile(checksum2, string2) ] }, - HTTP_AUTHORIZATION='Bearer {}'.format(token.token), + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), format='multipart' ) @@ -93,67 +90,82 @@ def test_upload(self): assert file_blobs[1].checksum == checksum2 def test_too_many_chunks(self): - token = ApiToken.objects.create( - user=self.user, - scope_list=['project:releases'], - ) - files = [] + + # Exactly the limit for x in range(0, MAX_CHUNKS_PER_REQUEST + 1): - content = '%s' % x + content = "x" files.append(SimpleUploadedFile(sha1(content).hexdigest(), content)) - url = reverse('sentry-api-0-chunk-upload') response = self.client.post( - url, + self.url, data={ 'file': files }, - HTTP_AUTHORIZATION='Bearer {}'.format(token.token), + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), format='multipart' ) assert response.status_code == 400, response.content - def test_too_large_chunk(self): - token = ApiToken.objects.create( - user=self.user, - scope_list=['project:releases'], + def test_too_large_request(self): + files = [] + + # Exactly the limit + for x in range(0, MAX_CHUNKS_PER_REQUEST): + content = "x" * (MAX_REQUEST_SIZE / MAX_CHUNKS_PER_REQUEST) + files.append(SimpleUploadedFile(sha1(content).hexdigest(), content)) + + response = self.client.post( + self.url, + data={ + 'file': files + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), + format='multipart' + ) + + assert response.status_code == 200, response.content + + # We overflow the request here + files.append(SimpleUploadedFile(sha1('content').hexdigest(), 'content')) + response = self.client.post( + self.url, + data={ + 'file': files + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), + format='multipart' ) + assert response.status_code == 400, response.content + def test_too_large_chunk(self): files = [] content = "x" * (DEFAULT_BLOB_SIZE + 1) files.append(SimpleUploadedFile(sha1(content).hexdigest(), content)) - url = reverse('sentry-api-0-chunk-upload') response = self.client.post( - url, + self.url, data={ 'file': files }, - HTTP_AUTHORIZATION='Bearer {}'.format(token.token), + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), format='multipart' ) assert response.status_code == 400, response.content def test_checksum_missmatch(self): - token = ApiToken.objects.create( - user=self.user, - scope_list=['project:releases'], - ) - files = [] content = "x" * (DEFAULT_BLOB_SIZE + 1) files.append(SimpleUploadedFile('wrong checksum', content)) - url = reverse('sentry-api-0-chunk-upload') response = self.client.post( - url, + self.url, data={ 'file': files }, - HTTP_AUTHORIZATION='Bearer {}'.format(token.token), + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token), format='multipart' ) diff --git a/tests/sentry/api/endpoints/test_dif_assemble.py b/tests/sentry/api/endpoints/test_dif_assemble.py new file mode 100644 index 00000000000000..9b024d18d80ef7 --- /dev/null +++ b/tests/sentry/api/endpoints/test_dif_assemble.py @@ -0,0 +1,238 @@ +from __future__ import absolute_import + +from mock import patch +from hashlib import sha1 + +from django.core.urlresolvers import reverse +from django.core.files.base import ContentFile + +from sentry.models import ApiToken, FileBlob, File, FileBlobIndex, FileBlobOwner +from sentry.models.file import ChunkFileState +from sentry.testutils import APITestCase + + +class DifAssembleEndpoint(APITestCase): + def setUp(self): + self.organization = self.create_organization(owner=self.user) + self.token = ApiToken.objects.create( + user=self.user, + scope_list=['project:write'], + ) + self.team = self.create_team(organization=self.organization) + self.project = self.create_project( + teams=[ + self.team], + organization=self.organization, + name='foo') + self.url = reverse( + 'sentry-api-0-assemble-dif-files', + args=[ + self.organization.slug, + self.project.slug]) + + def test_assemble_json_scheme(self): + response = self.client.post( + self.url, + data={ + 'lol': 'test' + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + assert response.status_code == 400, response.content + + checksum = sha1('1').hexdigest() + response = self.client.post( + self.url, + data={ + checksum: 'test' + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + assert response.status_code == 400, response.content + + response = self.client.post( + self.url, + data={ + checksum: { + } + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + assert response.status_code == 400, response.content + + response = self.client.post( + self.url, + data={ + checksum: { + 'name': 'dif', + 'chunks': [], + } + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + assert response.status_code == 200, response.content + assert response.data[checksum]['state'] == ChunkFileState.NOT_FOUND + + def test_assemble_check(self): + content = 'foo bar'.encode('utf-8') + fileobj = ContentFile(content) + file1 = File.objects.create( + name='baz.js', + type='default', + size=7, + ) + file1.putfile(fileobj, 3) + + checksum = sha1(content).hexdigest() + + blobs = FileBlob.objects.all() + checksums = [] + for blob in blobs: + checksums.append(blob.checksum) + + # Request to see of file is there + # file exists but we have no overship for the chunks + response = self.client.post( + self.url, + data={ + checksum: { + 'name': 'dif', + 'chunks': checksums, + } + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + + assert response.status_code == 200, response.content + assert response.data[checksum]['state'] == ChunkFileState.NOT_FOUND + assert response.data[checksum]['missingChunks'] == set(checksums) + + # Now we add ownership to the blob + blobs = FileBlob.objects.all() + for blob in blobs: + FileBlobOwner.objects.create( + blob=blob, + organization=self.organization + ) + + # Request now tells us that everything is alright + response = self.client.post( + self.url, + data={ + checksum: { + 'name': 'dif', + 'chunks': checksums, + } + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + + assert response.status_code == 200, response.content + assert response.data[checksum]['state'] == ChunkFileState.OK + assert response.data[checksum]['missingChunks'] == [] + + not_found_checksum = sha1('1').hexdigest() + + response = self.client.post( + self.url, + data={ + not_found_checksum: { + 'name': 'dif', + 'chunks': [not_found_checksum], + } + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + + assert response.status_code == 200, response.content + assert response.data[not_found_checksum]['state'] == ChunkFileState.NOT_FOUND + assert response.data[not_found_checksum]['missingChunks'] == set([not_found_checksum]) + + @patch('sentry.tasks.assemble.assemble_dif') + def test_assemble(self, mock_assemble_dif): + content1 = 'foo'.encode('utf-8') + fileobj1 = ContentFile(content1) + checksum1 = sha1(content1).hexdigest() + + content2 = 'bar'.encode('utf-8') + fileobj2 = ContentFile(content2) + checksum2 = sha1(content2).hexdigest() + + content3 = 'baz'.encode('utf-8') + fileobj3 = ContentFile(content3) + checksum3 = sha1(content3).hexdigest() + + total_checksum = sha1(content2 + content1 + content3).hexdigest() + + # The order here is on purpose because we check for the order of checksums + bolb1 = FileBlob.from_file(fileobj1) + FileBlobOwner.objects.get_or_create( + organization=self.organization, + blob=bolb1 + ) + bolb3 = FileBlob.from_file(fileobj3) + FileBlobOwner.objects.get_or_create( + organization=self.organization, + blob=bolb3 + ) + bolb2 = FileBlob.from_file(fileobj2) + + # we make a request now but we are missing ownership for chunk 2 + response = self.client.post( + self.url, + data={ + total_checksum: { + 'name': 'test', + 'chunks': [ + checksum2, checksum1, checksum3 + ] + } + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + assert response.status_code == 200, response.content + assert response.data[total_checksum]['state'] == ChunkFileState.NOT_FOUND + assert response.data[total_checksum]['missingChunks'] == set([checksum2]) + + # we add ownership to chunk 2 + FileBlobOwner.objects.get_or_create( + organization=self.organization, + blob=bolb2 + ) + + # new request, ownership for all chunks is there but file does not exist yet + response = self.client.post( + self.url, + data={ + total_checksum: { + 'name': 'test', + 'chunks': [ + checksum2, checksum1, checksum3 + ], + } + }, + HTTP_AUTHORIZATION='Bearer {}'.format(self.token.token) + ) + assert response.status_code == 200, response.content + assert response.data[total_checksum]['state'] == ChunkFileState.CREATED + assert response.data[total_checksum]['missingChunks'] == [] + + file_blob_id_order = [bolb2.id, bolb1.id, bolb3.id] + + mock_assemble_dif.apply_async.assert_called_once_with( + kwargs={ + 'project_id': self.project.id, + 'file_id': 1, + 'file_blob_ids': file_blob_id_order, + 'checksum': total_checksum, + } + ) + + file = File.objects.filter( + id=1, + ).get() + file.assemble_from_file_blob_ids(file_blob_id_order, total_checksum) + assert file.checksum == total_checksum + + file_blob_index = FileBlobIndex.objects.all() + assert len(file_blob_index) == 3 diff --git a/tests/sentry/tasks/test_assemble.py b/tests/sentry/tasks/test_assemble.py new file mode 100644 index 00000000000000..28ca11b2261c27 --- /dev/null +++ b/tests/sentry/tasks/test_assemble.py @@ -0,0 +1,95 @@ +from __future__ import absolute_import + +from hashlib import sha1 + +from django.core.files.base import ContentFile + +from sentry.testutils import TestCase +from sentry.tasks.assemble import assemble_dif +from sentry.models import FileBlob, File +from sentry.models.file import ChunkFileState + + +class AssembleTest(TestCase): + def setUp(self): + self.organization = self.create_organization(owner=self.user) + self.team = self.create_team(organization=self.organization) + self.project = self.create_project( + teams=[ + self.team], + organization=self.organization, + name='foo') + + def test_wrong_dif(self): + content1 = 'foo'.encode('utf-8') + fileobj1 = ContentFile(content1) + + content2 = 'bar'.encode('utf-8') + fileobj2 = ContentFile(content2) + + content3 = 'baz'.encode('utf-8') + fileobj3 = ContentFile(content3) + + total_checksum = sha1(content2 + content1 + content3).hexdigest() + + # The order here is on purpose because we check for the order of checksums + bolb1 = FileBlob.from_file(fileobj1) + bolb3 = FileBlob.from_file(fileobj3) + bolb2 = FileBlob.from_file(fileobj2) + + file = File.objects.create( + name='test', + checksum=total_checksum, + type='chunked', + headers={'__state': ChunkFileState.CREATED} + ) + + file_blob_id_order = [bolb2.id, bolb1.id, bolb3.id] + + file = File.objects.create( + name='test', + checksum=total_checksum, + type='chunked', + headers={'__state': ChunkFileState.CREATED} + ) + + assemble_dif( + project_id=self.project.id, + file_id=file.id, + file_blob_ids=file_blob_id_order, + checksum=total_checksum, + ) + + file = File.objects.filter( + id=file.id, + ).get() + + assert file.headers.get('__state') == ChunkFileState.ERROR + + def test_dif(self): + sym_file = self.load_fixture('crash.sym') + bolb1 = FileBlob.from_file(ContentFile(sym_file)) + + total_checksum = sha1(sym_file).hexdigest() + + file = File.objects.create( + name='test.sym', + checksum=total_checksum, + type='chunked', + headers={'__state': ChunkFileState.CREATED} + ) + + file_blob_id_order = [bolb1.id] + + assemble_dif( + project_id=self.project.id, + file_id=file.id, + file_blob_ids=file_blob_id_order, + checksum=total_checksum, + ) + + file = File.objects.filter( + checksum=total_checksum, + ).get() + + assert file.headers == {'Content-Type': 'text/x-breakpad'}