This commit is contained in:
Bryce
2023-05-17 15:10:16 -07:00
parent 8ee743e371
commit 18d95f7e20
90 changed files with 2264 additions and 615 deletions

View File

@@ -1,287 +1,287 @@
// Copyright (c) 2006, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Framework to provide a simple C API to crash reporting for
// applications. By default, if any machine-level exception (e.g.,
// EXC_BAD_ACCESS) occurs, it will be handled by the BreakpadRef
// object as follows:
//
// 1. Create a minidump file (see Breakpad for details)
// 2. Prompt the user (using CFUserNotification)
// 3. Invoke a command line reporting tool to send the minidump to a
// server
//
// By specifying parameters to the BreakpadCreate function, you can
// modify the default behavior to suit your needs and wants and
// desires.
// A service name associated with the original bootstrap parent port, saved in
// OnDemandServer and restored in Inspector.
#define BREAKPAD_BOOTSTRAP_PARENT_PORT "com.Breakpad.BootstrapParent"
typedef void *BreakpadRef;
#ifdef __cplusplus
extern "C" {
#endif
#include <CoreFoundation/CoreFoundation.h>
#include <Foundation/Foundation.h>
#include "BreakpadDefines.h"
// Optional user-defined function to dec to decide if we should handle
// this crash or forward it along.
// Return true if you want Breakpad to handle it.
// Return false if you want Breakpad to skip it
// The exception handler always returns false, as if SEND_AND_EXIT were false
// (which means the next exception handler will take the exception)
typedef bool (*BreakpadFilterCallback)(int exception_type,
int exception_code,
mach_port_t crashing_thread,
void *context);
// Create a new BreakpadRef object and install it as an exception
// handler. The |parameters| will typically be the contents of your
// bundle's Info.plist.
//
// You can also specify these additional keys for customizable behavior:
// Key: Value:
// BREAKPAD_PRODUCT Product name (e.g., "MyAwesomeProduct")
// This one is used as the key to identify
// the product when uploading. Falls back to
// CFBundleName if not specified.
// REQUIRED
//
// BREAKPAD_PRODUCT_DISPLAY This is the display name, e.g. a pretty
// name for the product when the crash_sender
// pops up UI for the user. Falls back first to
// CFBundleDisplayName and then to
// BREAKPAD_PRODUCT if not specified.
//
// BREAKPAD_VERSION Product version (e.g., 1.2.3), used
// as metadata for crash report. Falls back to
// CFBundleVersion if not specified.
// REQUIRED
//
// BREAKPAD_VENDOR Vendor name, used in UI (e.g. "A report has
// been created that you can send to <vendor>")
//
// BREAKPAD_URL URL destination for reporting
// REQUIRED
//
// BREAKPAD_REPORT_INTERVAL # of seconds between sending
// reports. If an additional report is
// generated within this time, it will
// be ignored. Default: 3600sec.
// Specify 0 to send all reports.
//
// BREAKPAD_SKIP_CONFIRM If true, the reporter will send the report
// without any user intervention.
// Defaults to NO
//
// BREAKPAD_CONFIRM_TIMEOUT Number of seconds before the upload
// confirmation dialog will be automatically
// dismissed (cancelling the upload).
// Default: 300 seconds (min of 60).
// Specify 0 to prevent timeout.
//
// BREAKPAD_SEND_AND_EXIT If true, the handler will exit after sending.
// This will prevent any other handler (e.g.,
// CrashReporter) from getting the crash.
// Defaults TO YES
//
// BREAKPAD_DUMP_DIRECTORY The directory to store crash-dumps
// in. By default, we use
// ~/Library/Breakpad/<BREAKPAD_PRODUCT>
// The path you specify here is tilde-expanded.
//
// BREAKPAD_INSPECTOR_LOCATION The full path to the Inspector executable.
// Defaults to <Framework resources>/Inspector
//
// BREAKPAD_REPORTER_EXE_LOCATION The full path to the Reporter/sender
// executable.
// Default:
// <Framework Resources>/crash_report_sender.app
//
// BREAKPAD_LOGFILES Indicates an array of log file paths that
// should be uploaded at crash time.
//
// BREAKPAD_REQUEST_COMMENTS If true, the message dialog will have a
// text box for the user to enter comments.
// Default: NO
//
// BREAKPAD_REQUEST_EMAIL If true and BREAKPAD_REQUEST_COMMENTS is also
// true, the message dialog will have a text
// box for the user to enter their email address.
// Default: NO
//
// BREAKPAD_SERVER_TYPE A parameter that tells Breakpad how to
// rewrite the upload parameters for a specific
// server type. The currently valid values are
// 'socorro' or 'google'. If you want to add
// other types, see the function in
// crash_report_sender.m that maps parameters to
// URL parameters. Defaults to 'google'.
//
// BREAKPAD_SERVER_PARAMETER_DICT A plist dictionary of static
// parameters that are uploaded to the
// server. The parameters are sent as
// is to the crash server. Their
// content isn't added to the minidump
// but pass as URL parameters when
// uploading theminidump to the crash
// server.
//
// BREAKPAD_IN_PROCESS A boolean NSNumber value. If YES, Breakpad
// will write the dump file in-process and then
// launch the reporter executable as a child
// process.
//=============================================================================
// The BREAKPAD_PRODUCT, BREAKPAD_VERSION and BREAKPAD_URL are
// required to have non-NULL values. By default, the BREAKPAD_PRODUCT
// will be the CFBundleName and the BREAKPAD_VERSION will be the
// CFBundleVersion when these keys are present in the bundle's
// Info.plist, which is usually passed in to BreakpadCreate() as an
// NSDictionary (you could also pass in another dictionary that had
// the same keys configured). If the BREAKPAD_PRODUCT or
// BREAKPAD_VERSION are ultimately undefined, BreakpadCreate() will
// fail. You have been warned.
//
// If you are running in a debugger, Breakpad will not install, unless the
// BREAKPAD_IGNORE_DEBUGGER envionment variable is set and/or non-zero.
//
// The BREAKPAD_SKIP_CONFIRM and BREAKPAD_SEND_AND_EXIT default
// values are NO and YES. However, they can be controlled by setting their
// values in a user or global plist.
//
// It's easiest to use Breakpad via the Framework, but if you're compiling the
// code in directly, BREAKPAD_INSPECTOR_LOCATION and
// BREAKPAD_REPORTER_EXE_LOCATION allow you to specify custom paths
// to the helper executables.
//
//=============================================================================
// The following are NOT user-supplied but are documented here for
// completeness. They are calculated by Breakpad during initialization &
// crash-dump generation, or entered in by the user.
//
// BREAKPAD_PROCESS_START_TIME The time, in seconds since the Epoch, the
// process started
//
// BREAKPAD_PROCESS_CRASH_TIME The time, in seconds since the Epoch, the
// process crashed.
//
// BREAKPAD_PROCESS_UP_TIME The total time in milliseconds the process
// has been running. This parameter is not
// set until the crash-dump-generation phase.
//
// BREAKPAD_LOGFILE_KEY_PREFIX Used to find out which parameters in the
// parameter dictionary correspond to log
// file paths.
//
// BREAKPAD_SERVER_PARAMETER_PREFIX This prefix is used by Breakpad
// internally, because Breakpad uses
// the same dictionary internally to
// track both its internal
// configuration parameters and
// parameters meant to be uploaded
// to the server. This string is
// used internally by Breakpad to
// prefix user-supplied parameter
// names so those can be sent to the
// server without leaking Breakpad's
// internal values.
//
// BREAKPAD_ON_DEMAND Used internally to indicate to the
// Reporter that we're sending on-demand,
// not as result of a crash.
//
// BREAKPAD_COMMENTS The text the user provided as comments.
// Only used in crash_report_sender.
// Returns a new BreakpadRef object on success, NULL otherwise.
BreakpadRef BreakpadCreate(NSDictionary *parameters);
// Uninstall and release the data associated with |ref|.
void BreakpadRelease(BreakpadRef ref);
// Clients may set an optional callback which gets called when a crash
// occurs. The callback function should return |true| if we should
// handle the crash, generate a crash report, etc. or |false| if we
// should ignore it and forward the crash (normally to CrashReporter).
// Context is a pointer to arbitrary data to make the callback with.
void BreakpadSetFilterCallback(BreakpadRef ref,
BreakpadFilterCallback callback,
void *context);
// User defined key and value string storage. Generally this is used
// to configure Breakpad's internal operation, such as whether the
// crash_sender should prompt the user, or the filesystem location for
// the minidump file. See Breakpad.h for some parameters that can be
// set. Anything longer than 255 bytes will be truncated. Note that
// the string is converted to UTF8 before truncation, so any multibyte
// character that straddles the 255(256 - 1 for terminator) byte limit
// will be mangled.
//
// A maximum number of 64 key/value pairs are supported. An assert()
// will fire if more than this number are set. Unfortunately, right
// now, the same dictionary is used for both Breakpad's parameters AND
// the Upload parameters.
//
// TODO (nealsid): Investigate how necessary this is if we don't
// automatically upload parameters to the server anymore.
// TODO (nealsid): separate server parameter dictionary from the
// dictionary used to configure Breakpad, and document limits for each
// independently.
void BreakpadSetKeyValue(BreakpadRef ref, NSString *key, NSString *value);
NSString *BreakpadKeyValue(BreakpadRef ref, NSString *key);
void BreakpadRemoveKeyValue(BreakpadRef ref, NSString *key);
// You can use this method to specify parameters that will be uploaded
// to the crash server. They will be automatically encoded as
// necessary. Note that as mentioned above there are limits on both
// the number of keys and their length.
void BreakpadAddUploadParameter(BreakpadRef ref, NSString *key,
NSString *value);
// This method will remove a previously-added parameter from the
// upload parameter set.
void BreakpadRemoveUploadParameter(BreakpadRef ref, NSString *key);
// Add a log file for Breakpad to read and send upon crash dump
void BreakpadAddLogFile(BreakpadRef ref, NSString *logPathname);
// Generate a minidump and send
void BreakpadGenerateAndSendReport(BreakpadRef ref);
void BreakpadSetComment( BreakpadRef ref, char const *pchComment );
#ifdef __cplusplus
}
#endif
// Copyright (c) 2006, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Framework to provide a simple C API to crash reporting for
// applications. By default, if any machine-level exception (e.g.,
// EXC_BAD_ACCESS) occurs, it will be handled by the BreakpadRef
// object as follows:
//
// 1. Create a minidump file (see Breakpad for details)
// 2. Prompt the user (using CFUserNotification)
// 3. Invoke a command line reporting tool to send the minidump to a
// server
//
// By specifying parameters to the BreakpadCreate function, you can
// modify the default behavior to suit your needs and wants and
// desires.
// A service name associated with the original bootstrap parent port, saved in
// OnDemandServer and restored in Inspector.
#define BREAKPAD_BOOTSTRAP_PARENT_PORT "com.Breakpad.BootstrapParent"
typedef void *BreakpadRef;
#ifdef __cplusplus
extern "C" {
#endif
#include <CoreFoundation/CoreFoundation.h>
#include <Foundation/Foundation.h>
#include "BreakpadDefines.h"
// Optional user-defined function to dec to decide if we should handle
// this crash or forward it along.
// Return true if you want Breakpad to handle it.
// Return false if you want Breakpad to skip it
// The exception handler always returns false, as if SEND_AND_EXIT were false
// (which means the next exception handler will take the exception)
typedef bool (*BreakpadFilterCallback)(int exception_type,
int exception_code,
mach_port_t crashing_thread,
void *context);
// Create a new BreakpadRef object and install it as an exception
// handler. The |parameters| will typically be the contents of your
// bundle's Info.plist.
//
// You can also specify these additional keys for customizable behavior:
// Key: Value:
// BREAKPAD_PRODUCT Product name (e.g., "MyAwesomeProduct")
// This one is used as the key to identify
// the product when uploading. Falls back to
// CFBundleName if not specified.
// REQUIRED
//
// BREAKPAD_PRODUCT_DISPLAY This is the display name, e.g. a pretty
// name for the product when the crash_sender
// pops up UI for the user. Falls back first to
// CFBundleDisplayName and then to
// BREAKPAD_PRODUCT if not specified.
//
// BREAKPAD_VERSION Product version (e.g., 1.2.3), used
// as metadata for crash report. Falls back to
// CFBundleVersion if not specified.
// REQUIRED
//
// BREAKPAD_VENDOR Vendor name, used in UI (e.g. "A report has
// been created that you can send to <vendor>")
//
// BREAKPAD_URL URL destination for reporting
// REQUIRED
//
// BREAKPAD_REPORT_INTERVAL # of seconds between sending
// reports. If an additional report is
// generated within this time, it will
// be ignored. Default: 3600sec.
// Specify 0 to send all reports.
//
// BREAKPAD_SKIP_CONFIRM If true, the reporter will send the report
// without any user intervention.
// Defaults to NO
//
// BREAKPAD_CONFIRM_TIMEOUT Number of seconds before the upload
// confirmation dialog will be automatically
// dismissed (cancelling the upload).
// Default: 300 seconds (min of 60).
// Specify 0 to prevent timeout.
//
// BREAKPAD_SEND_AND_EXIT If true, the handler will exit after sending.
// This will prevent any other handler (e.g.,
// CrashReporter) from getting the crash.
// Defaults TO YES
//
// BREAKPAD_DUMP_DIRECTORY The directory to store crash-dumps
// in. By default, we use
// ~/Library/Breakpad/<BREAKPAD_PRODUCT>
// The path you specify here is tilde-expanded.
//
// BREAKPAD_INSPECTOR_LOCATION The full path to the Inspector executable.
// Defaults to <Framework resources>/Inspector
//
// BREAKPAD_REPORTER_EXE_LOCATION The full path to the Reporter/sender
// executable.
// Default:
// <Framework Resources>/crash_report_sender.app
//
// BREAKPAD_LOGFILES Indicates an array of log file paths that
// should be uploaded at crash time.
//
// BREAKPAD_REQUEST_COMMENTS If true, the message dialog will have a
// text box for the user to enter comments.
// Default: NO
//
// BREAKPAD_REQUEST_EMAIL If true and BREAKPAD_REQUEST_COMMENTS is also
// true, the message dialog will have a text
// box for the user to enter their email address.
// Default: NO
//
// BREAKPAD_SERVER_TYPE A parameter that tells Breakpad how to
// rewrite the upload parameters for a specific
// server type. The currently valid values are
// 'socorro' or 'google'. If you want to add
// other types, see the function in
// crash_report_sender.m that maps parameters to
// URL parameters. Defaults to 'google'.
//
// BREAKPAD_SERVER_PARAMETER_DICT A plist dictionary of static
// parameters that are uploaded to the
// server. The parameters are sent as
// is to the crash server. Their
// content isn't added to the minidump
// but pass as URL parameters when
// uploading theminidump to the crash
// server.
//
// BREAKPAD_IN_PROCESS A boolean NSNumber value. If YES, Breakpad
// will write the dump file in-process and then
// launch the reporter executable as a child
// process.
//=============================================================================
// The BREAKPAD_PRODUCT, BREAKPAD_VERSION and BREAKPAD_URL are
// required to have non-NULL values. By default, the BREAKPAD_PRODUCT
// will be the CFBundleName and the BREAKPAD_VERSION will be the
// CFBundleVersion when these keys are present in the bundle's
// Info.plist, which is usually passed in to BreakpadCreate() as an
// NSDictionary (you could also pass in another dictionary that had
// the same keys configured). If the BREAKPAD_PRODUCT or
// BREAKPAD_VERSION are ultimately undefined, BreakpadCreate() will
// fail. You have been warned.
//
// If you are running in a debugger, Breakpad will not install, unless the
// BREAKPAD_IGNORE_DEBUGGER envionment variable is set and/or non-zero.
//
// The BREAKPAD_SKIP_CONFIRM and BREAKPAD_SEND_AND_EXIT default
// values are NO and YES. However, they can be controlled by setting their
// values in a user or global plist.
//
// It's easiest to use Breakpad via the Framework, but if you're compiling the
// code in directly, BREAKPAD_INSPECTOR_LOCATION and
// BREAKPAD_REPORTER_EXE_LOCATION allow you to specify custom paths
// to the helper executables.
//
//=============================================================================
// The following are NOT user-supplied but are documented here for
// completeness. They are calculated by Breakpad during initialization &
// crash-dump generation, or entered in by the user.
//
// BREAKPAD_PROCESS_START_TIME The time, in seconds since the Epoch, the
// process started
//
// BREAKPAD_PROCESS_CRASH_TIME The time, in seconds since the Epoch, the
// process crashed.
//
// BREAKPAD_PROCESS_UP_TIME The total time in milliseconds the process
// has been running. This parameter is not
// set until the crash-dump-generation phase.
//
// BREAKPAD_LOGFILE_KEY_PREFIX Used to find out which parameters in the
// parameter dictionary correspond to log
// file paths.
//
// BREAKPAD_SERVER_PARAMETER_PREFIX This prefix is used by Breakpad
// internally, because Breakpad uses
// the same dictionary internally to
// track both its internal
// configuration parameters and
// parameters meant to be uploaded
// to the server. This string is
// used internally by Breakpad to
// prefix user-supplied parameter
// names so those can be sent to the
// server without leaking Breakpad's
// internal values.
//
// BREAKPAD_ON_DEMAND Used internally to indicate to the
// Reporter that we're sending on-demand,
// not as result of a crash.
//
// BREAKPAD_COMMENTS The text the user provided as comments.
// Only used in crash_report_sender.
// Returns a new BreakpadRef object on success, NULL otherwise.
BreakpadRef BreakpadCreate(NSDictionary *parameters);
// Uninstall and release the data associated with |ref|.
void BreakpadRelease(BreakpadRef ref);
// Clients may set an optional callback which gets called when a crash
// occurs. The callback function should return |true| if we should
// handle the crash, generate a crash report, etc. or |false| if we
// should ignore it and forward the crash (normally to CrashReporter).
// Context is a pointer to arbitrary data to make the callback with.
void BreakpadSetFilterCallback(BreakpadRef ref,
BreakpadFilterCallback callback,
void *context);
// User defined key and value string storage. Generally this is used
// to configure Breakpad's internal operation, such as whether the
// crash_sender should prompt the user, or the filesystem location for
// the minidump file. See Breakpad.h for some parameters that can be
// set. Anything longer than 255 bytes will be truncated. Note that
// the string is converted to UTF8 before truncation, so any multibyte
// character that straddles the 255(256 - 1 for terminator) byte limit
// will be mangled.
//
// A maximum number of 64 key/value pairs are supported. An assert()
// will fire if more than this number are set. Unfortunately, right
// now, the same dictionary is used for both Breakpad's parameters AND
// the Upload parameters.
//
// TODO (nealsid): Investigate how necessary this is if we don't
// automatically upload parameters to the server anymore.
// TODO (nealsid): separate server parameter dictionary from the
// dictionary used to configure Breakpad, and document limits for each
// independently.
void BreakpadSetKeyValue(BreakpadRef ref, NSString *key, NSString *value);
NSString *BreakpadKeyValue(BreakpadRef ref, NSString *key);
void BreakpadRemoveKeyValue(BreakpadRef ref, NSString *key);
// You can use this method to specify parameters that will be uploaded
// to the crash server. They will be automatically encoded as
// necessary. Note that as mentioned above there are limits on both
// the number of keys and their length.
void BreakpadAddUploadParameter(BreakpadRef ref, NSString *key,
NSString *value);
// This method will remove a previously-added parameter from the
// upload parameter set.
void BreakpadRemoveUploadParameter(BreakpadRef ref, NSString *key);
// Add a log file for Breakpad to read and send upon crash dump
void BreakpadAddLogFile(BreakpadRef ref, NSString *logPathname);
// Generate a minidump and send
void BreakpadGenerateAndSendReport(BreakpadRef ref);
void BreakpadSetComment( BreakpadRef ref, char const *pchComment );
#ifdef __cplusplus
}
#endif

View File

@@ -1,73 +1,73 @@
// Copyright (c) 2011, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Keys for configuration file
#define kReporterMinidumpDirectoryKey "MinidumpDir"
#define kReporterMinidumpIDKey "MinidumpID"
// Filename for recording uploaded IDs
#define kReporterLogFilename "uploads.log"
// The default subdirectory of the Library to put crash dumps in
// The subdirectory is
// ~/Library/<kDefaultLibrarySubdirectory>/<GoogleBreakpadProduct>
#define kDefaultLibrarySubdirectory "Breakpad"
// Specify some special keys to be used in the configuration file that is
// generated by Breakpad and consumed by the crash_sender.
#define BREAKPAD_PRODUCT "BreakpadProduct"
#define BREAKPAD_PRODUCT_DISPLAY "BreakpadProductDisplay"
#define BREAKPAD_VERSION "BreakpadVersion"
#define BREAKPAD_VENDOR "BreakpadVendor"
#define BREAKPAD_URL "BreakpadURL"
#define BREAKPAD_REPORT_INTERVAL "BreakpadReportInterval"
#define BREAKPAD_SKIP_CONFIRM "BreakpadSkipConfirm"
#define BREAKPAD_CONFIRM_TIMEOUT "BreakpadConfirmTimeout"
#define BREAKPAD_SEND_AND_EXIT "BreakpadSendAndExit"
#define BREAKPAD_DUMP_DIRECTORY "BreakpadMinidumpLocation"
#define BREAKPAD_INSPECTOR_LOCATION "BreakpadInspectorLocation"
#define BREAKPAD_REPORTER_EXE_LOCATION \
"BreakpadReporterExeLocation"
#define BREAKPAD_LOGFILES "BreakpadLogFiles"
#define BREAKPAD_LOGFILE_UPLOAD_SIZE "BreakpadLogFileTailSize"
#define BREAKPAD_REQUEST_COMMENTS "BreakpadRequestComments"
#define BREAKPAD_COMMENTS "BreakpadComments"
#define BREAKPAD_REQUEST_EMAIL "BreakpadRequestEmail"
#define BREAKPAD_EMAIL "BreakpadEmail"
#define BREAKPAD_SERVER_TYPE "BreakpadServerType"
#define BREAKPAD_SERVER_PARAMETER_DICT "BreakpadServerParameters"
#define BREAKPAD_IN_PROCESS "BreakpadInProcess"
// The keys below are NOT user supplied, and are used internally.
#define BREAKPAD_PROCESS_START_TIME "BreakpadProcStartTime"
#define BREAKPAD_PROCESS_UP_TIME "BreakpadProcessUpTime"
#define BREAKPAD_PROCESS_CRASH_TIME "BreakpadProcessCrashTime"
#define BREAKPAD_LOGFILE_KEY_PREFIX "BreakpadAppLogFile"
#define BREAKPAD_SERVER_PARAMETER_PREFIX "BreakpadServerParameterPrefix_"
#define BREAKPAD_ON_DEMAND "BreakpadOnDemand"
// Copyright (c) 2011, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Keys for configuration file
#define kReporterMinidumpDirectoryKey "MinidumpDir"
#define kReporterMinidumpIDKey "MinidumpID"
// Filename for recording uploaded IDs
#define kReporterLogFilename "uploads.log"
// The default subdirectory of the Library to put crash dumps in
// The subdirectory is
// ~/Library/<kDefaultLibrarySubdirectory>/<GoogleBreakpadProduct>
#define kDefaultLibrarySubdirectory "Breakpad"
// Specify some special keys to be used in the configuration file that is
// generated by Breakpad and consumed by the crash_sender.
#define BREAKPAD_PRODUCT "BreakpadProduct"
#define BREAKPAD_PRODUCT_DISPLAY "BreakpadProductDisplay"
#define BREAKPAD_VERSION "BreakpadVersion"
#define BREAKPAD_VENDOR "BreakpadVendor"
#define BREAKPAD_URL "BreakpadURL"
#define BREAKPAD_REPORT_INTERVAL "BreakpadReportInterval"
#define BREAKPAD_SKIP_CONFIRM "BreakpadSkipConfirm"
#define BREAKPAD_CONFIRM_TIMEOUT "BreakpadConfirmTimeout"
#define BREAKPAD_SEND_AND_EXIT "BreakpadSendAndExit"
#define BREAKPAD_DUMP_DIRECTORY "BreakpadMinidumpLocation"
#define BREAKPAD_INSPECTOR_LOCATION "BreakpadInspectorLocation"
#define BREAKPAD_REPORTER_EXE_LOCATION \
"BreakpadReporterExeLocation"
#define BREAKPAD_LOGFILES "BreakpadLogFiles"
#define BREAKPAD_LOGFILE_UPLOAD_SIZE "BreakpadLogFileTailSize"
#define BREAKPAD_REQUEST_COMMENTS "BreakpadRequestComments"
#define BREAKPAD_COMMENTS "BreakpadComments"
#define BREAKPAD_REQUEST_EMAIL "BreakpadRequestEmail"
#define BREAKPAD_EMAIL "BreakpadEmail"
#define BREAKPAD_SERVER_TYPE "BreakpadServerType"
#define BREAKPAD_SERVER_PARAMETER_DICT "BreakpadServerParameters"
#define BREAKPAD_IN_PROCESS "BreakpadInProcess"
// The keys below are NOT user supplied, and are used internally.
#define BREAKPAD_PROCESS_START_TIME "BreakpadProcStartTime"
#define BREAKPAD_PROCESS_UP_TIME "BreakpadProcessUpTime"
#define BREAKPAD_PROCESS_CRASH_TIME "BreakpadProcessCrashTime"
#define BREAKPAD_LOGFILE_KEY_PREFIX "BreakpadAppLogFile"
#define BREAKPAD_SERVER_PARAMETER_PREFIX "BreakpadServerParameterPrefix_"
#define BREAKPAD_ON_DEMAND "BreakpadOnDemand"

View File

@@ -1,42 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>16B2555</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Breakpad</string>
<key>CFBundleIdentifier</key>
<string>com.googlecode.google-breakpad</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Breakpad</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0.compiler</string>
<key>DTPlatformBuild</key>
<string>8A218a</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>13F34</string>
<key>DTSDKName</key>
<string>macosx10.9</string>
<key>DTXcode</key>
<string>0800</string>
<key>DTXcodeBuild</key>
<string>8A218a</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>19H512</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Breakpad</string>
<key>CFBundleIdentifier</key>
<string>com.googlecode.google-breakpad</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Breakpad</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0.compiler</string>
<key>DTPlatformBuild</key>
<string>12D4e</string>
<key>DTPlatformName</key>
<string>macosx</string>
<key>DTPlatformVersion</key>
<string>11.1</string>
<key>DTSDKBuild</key>
<string>20C63</string>
<key>DTSDKName</key>
<string>macosx11.1</string>
<key>DTXcode</key>
<string>1240</string>
<key>DTXcodeBuild</key>
<string>12D4e</string>
<key>LSMinimumSystemVersion</key>
<string>10.11</string>
</dict>
</plist>

View File

@@ -1,52 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>16B2555</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>crash_report_sender</string>
<key>CFBundleExecutable</key>
<string>crash_report_sender</string>
<key>CFBundleIconFile</key>
<string>crash_report_sender</string>
<key>CFBundleIdentifier</key>
<string>com.Breakpad.crash_report_sender</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>crash_report_sender</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0.compiler</string>
<key>DTPlatformBuild</key>
<string>8A218a</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>13F34</string>
<key>DTSDKName</key>
<string>macosx10.9</string>
<key>DTXcode</key>
<string>0800</string>
<key>DTXcodeBuild</key>
<string>8A218a</string>
<key>LSHasLocalizedDisplayName</key>
<true/>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>19H512</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>crash_report_sender</string>
<key>CFBundleExecutable</key>
<string>crash_report_sender</string>
<key>CFBundleIconFile</key>
<string>crash_report_sender</string>
<key>CFBundleIdentifier</key>
<string>com.Breakpad.crash_report_sender</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>crash_report_sender</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0.compiler</string>
<key>DTPlatformBuild</key>
<string>12D4e</string>
<key>DTPlatformName</key>
<string>macosx</string>
<key>DTPlatformVersion</key>
<string>11.1</string>
<key>DTSDKBuild</key>
<string>20C63</string>
<key>DTSDKName</key>
<string>macosx11.1</string>
<key>DTXcode</key>
<string>1240</string>
<key>DTXcodeBuild</key>
<string>12D4e</string>
<key>LSHasLocalizedDisplayName</key>
<true/>
<key>LSMinimumSystemVersion</key>
<string>10.11</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View File

@@ -0,0 +1,690 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Resources/Breakpad.nib</key>
<data>
+QCsJ6Erp46mpihY0O0UIgsvppk=
</data>
<key>Resources/English.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/English.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
94Rb5xB5h/M9s6+1p12hne5LJnw=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.icns</key>
<data>
qnqmtvXpsnZwBE3LM1r5HeaycNA=
</data>
<key>Resources/da.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/da.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
keCiCUgrkLjkY0QCsX7TLdRI+rM=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/de.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
JqsA1ULQf1utlPit9y1Y6h8L4QE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/de.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
o6oddgPESX//1IXIGRnZH4YfgQk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/es.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
cL6Veb5YPBUh3nluPBvD1dNKcrM=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/es.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
TZnDxArDHqebms0OcuOOlJrTcmk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/fr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/fr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
+VrKvOKFg5QOnkl6P02NvC123O8=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/goArrow.png</key>
<data>
nkv25D/nPP4hcdobLV4E1j10vng=
</data>
<key>Resources/it.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/it.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
5yY7+3M71LmTOD34HB1oINCiupQ=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/ja.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/ja.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
vRPNTr3gyvXwnmBFT2gbVrOOU8Y=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/nl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/nl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
sKDbblma/6DIFay+0zu59Cz9GFs=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/no.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/no.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
jKhDGk8xv4y9JYVznDHWSVyVBys=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
+Rx+gztMfQ/PRmX6iPqjo4oM0Mc=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
gHcQMpX4xjn8rxGNl0Gy22ctE5Y=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sv.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sv.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
qlm2QQW64CcY5XHGQDcDV1ESw9Y=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/tr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
NheGINmCVlLiC5tf3L3FGszVjVA=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/tr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
G0b99jELBPgDTpd4/wlxNr9k1ZI=
</data>
<key>optional</key>
<true/>
</dict>
</dict>
<key>files2</key>
<dict>
<key>Resources/Breakpad.nib</key>
<dict>
<key>hash</key>
<data>
+QCsJ6Erp46mpihY0O0UIgsvppk=
</data>
<key>hash2</key>
<data>
7CA3zuJ6kk9rKkruhSvVVG7s70TRSutSTnnNg874ntg=
</data>
</dict>
<key>Resources/English.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/English.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
94Rb5xB5h/M9s6+1p12hne5LJnw=
</data>
<key>hash2</key>
<data>
fFd9vKdZUgwfj5tDARquaX3aAdUM890hr1gFJw5+B7Q=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.icns</key>
<dict>
<key>hash</key>
<data>
qnqmtvXpsnZwBE3LM1r5HeaycNA=
</data>
<key>hash2</key>
<data>
fFfmJrqz5lhcnEGTvVsT8gh+cyhTfO0Y+jAzvqUxvsk=
</data>
</dict>
<key>Resources/da.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/da.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
keCiCUgrkLjkY0QCsX7TLdRI+rM=
</data>
<key>hash2</key>
<data>
x8BJpH4b0Zf+ymb7Ro3Xm0zM5x+zZfqGn8vrT7pCBgo=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/de.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
JqsA1ULQf1utlPit9y1Y6h8L4QE=
</data>
<key>hash2</key>
<data>
b6GX7xdlWIKNQ+dl1CcmUNjXbMUjsrhwdQ178MCBd7g=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/de.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
o6oddgPESX//1IXIGRnZH4YfgQk=
</data>
<key>hash2</key>
<data>
wfbpj/qVcuIVk8en0umujmgfQNR+LezGuYY9DiCe9B4=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/es.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
cL6Veb5YPBUh3nluPBvD1dNKcrM=
</data>
<key>hash2</key>
<data>
AWio5C8m0hLll/9YmRF9vKMNJ6XLUHcnYnVByXxkgGA=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/es.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
TZnDxArDHqebms0OcuOOlJrTcmk=
</data>
<key>hash2</key>
<data>
k47O787CIHDZ3bcYMKVXc5NrmwAjSNkbI8UGhtnTPnc=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/fr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/fr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
+VrKvOKFg5QOnkl6P02NvC123O8=
</data>
<key>hash2</key>
<data>
1jqWVZk8FCS/ntbwgG5yx7vBQKm8oGjeUDRCdnlA2c0=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/goArrow.png</key>
<dict>
<key>hash</key>
<data>
nkv25D/nPP4hcdobLV4E1j10vng=
</data>
<key>hash2</key>
<data>
qUrKjz/qnkeHNT9LPQU1cB/876EsKhKmS/avltrkfS8=
</data>
</dict>
<key>Resources/it.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/it.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
5yY7+3M71LmTOD34HB1oINCiupQ=
</data>
<key>hash2</key>
<data>
muxTmgK0UEoV7Jhk6okmdB0Eab2OnZiMC3puP7gGNcs=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/ja.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/ja.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
vRPNTr3gyvXwnmBFT2gbVrOOU8Y=
</data>
<key>hash2</key>
<data>
iOPKbrBUUd+Doz/QGs6ABNirX0SPeWA+JSpPZOkY0m4=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/nl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/nl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
sKDbblma/6DIFay+0zu59Cz9GFs=
</data>
<key>hash2</key>
<data>
opK0woO8TbLFE7WEb4oY0nzEjScX6LOSKencgMS7HNE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/no.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/no.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
jKhDGk8xv4y9JYVznDHWSVyVBys=
</data>
<key>hash2</key>
<data>
sADTELPVsXo0deQkxkuSYc9kH4z/If72eAUUPYamKvw=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
+Rx+gztMfQ/PRmX6iPqjo4oM0Mc=
</data>
<key>hash2</key>
<data>
BXbdoVOileOaq8gH6SPxvp2OVkPSmbqLRvipwGGWa9g=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
gHcQMpX4xjn8rxGNl0Gy22ctE5Y=
</data>
<key>hash2</key>
<data>
F1Cn4M6RfXGJsN3O5N9ElsBFiOH45t76fuveVq2nWfI=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sv.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/sv.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
qlm2QQW64CcY5XHGQDcDV1ESw9Y=
</data>
<key>hash2</key>
<data>
ncq2P7vEGBy7PtG2y46aBqg6kFQnUGHuvWIJqBkI83A=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/tr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
NheGINmCVlLiC5tf3L3FGszVjVA=
</data>
<key>hash2</key>
<data>
i+uUCp88kDm4kDg1aSBDyarzPnm9V0jrxKEGNM1Fh7s=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/tr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
G0b99jELBPgDTpd4/wlxNr9k1ZI=
</data>
<key>hash2</key>
<data>
AId5ZOSZg+6DLCCeSEIAm2TVBOLFcPbVYYmcA9XXiqY=
</data>
<key>optional</key>
<true/>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^Resources/</key>
<true/>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^.*</key>
<true/>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^[^/]+$</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,817 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Resources/Info.plist</key>
<data>
Udbcq1qiYO9E3hhYoN/ZDeh4kRY=
</data>
<key>Resources/Inspector</key>
<data>
SwgUwlfi/ClMFfvaf7ZDKQfht1Q=
</data>
<key>Resources/breakpadUtilities.dylib</key>
<data>
o50h0us1/uq3iqh283cxNmjKXo4=
</data>
<key>Resources/crash_report_sender.app/Contents/Info.plist</key>
<data>
YEOK87eViZTKpTaD2YHTpo5wWVU=
</data>
<key>Resources/crash_report_sender.app/Contents/MacOS/crash_report_sender</key>
<data>
SQulg9376CM1Y4dqsQd2Ddfwaf0=
</data>
<key>Resources/crash_report_sender.app/Contents/PkgInfo</key>
<data>
n57qDP4tZfLD1rCS43W0B4LQjzE=
</data>
<key>Resources/crash_report_sender.app/Contents/Resources/Breakpad.nib</key>
<data>
+QCsJ6Erp46mpihY0O0UIgsvppk=
</data>
<key>Resources/crash_report_sender.app/Contents/Resources/English.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/English.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
94Rb5xB5h/M9s6+1p12hne5LJnw=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/crash_report_sender.icns</key>
<data>
qnqmtvXpsnZwBE3LM1r5HeaycNA=
</data>
<key>Resources/crash_report_sender.app/Contents/Resources/da.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/da.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
keCiCUgrkLjkY0QCsX7TLdRI+rM=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/de.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
JqsA1ULQf1utlPit9y1Y6h8L4QE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/de.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
o6oddgPESX//1IXIGRnZH4YfgQk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/es.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
cL6Veb5YPBUh3nluPBvD1dNKcrM=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/es.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
TZnDxArDHqebms0OcuOOlJrTcmk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/fr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/fr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
+VrKvOKFg5QOnkl6P02NvC123O8=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/goArrow.png</key>
<data>
nkv25D/nPP4hcdobLV4E1j10vng=
</data>
<key>Resources/crash_report_sender.app/Contents/Resources/it.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/it.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
5yY7+3M71LmTOD34HB1oINCiupQ=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/ja.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/ja.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
vRPNTr3gyvXwnmBFT2gbVrOOU8Y=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/nl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/nl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
sKDbblma/6DIFay+0zu59Cz9GFs=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/no.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/no.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
jKhDGk8xv4y9JYVznDHWSVyVBys=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
+Rx+gztMfQ/PRmX6iPqjo4oM0Mc=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
gHcQMpX4xjn8rxGNl0Gy22ctE5Y=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sv.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sv.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
qlm2QQW64CcY5XHGQDcDV1ESw9Y=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/tr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
NheGINmCVlLiC5tf3L3FGszVjVA=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/tr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
G0b99jELBPgDTpd4/wlxNr9k1ZI=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/_CodeSignature/CodeResources</key>
<data>
VlfNFBkiGkJ8Qass2vV9iGeucdA=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/Breakpad.h</key>
<dict>
<key>hash</key>
<data>
chzp2fExnRTm9yOcacGtRExcdww=
</data>
<key>hash2</key>
<data>
BkRqwr514fiP4xI+97koHucPDbk+Oi/rLsyov79ngz0=
</data>
</dict>
<key>Headers/BreakpadDefines.h</key>
<dict>
<key>hash</key>
<data>
uLDsXXKbVwaKf/ARfzEDFuW/iro=
</data>
<key>hash2</key>
<data>
JNCNm1ydwP0UMLX1EY3eKZ3zYmJl09R9MMiGPU7R5NQ=
</data>
</dict>
<key>Resources/Info.plist</key>
<dict>
<key>hash</key>
<data>
Udbcq1qiYO9E3hhYoN/ZDeh4kRY=
</data>
<key>hash2</key>
<data>
vn8cFpm0+gmx+SrX5IS8WRWvsQwdqH4hz+0U8L4qXqw=
</data>
</dict>
<key>Resources/Inspector</key>
<dict>
<key>hash</key>
<data>
SwgUwlfi/ClMFfvaf7ZDKQfht1Q=
</data>
<key>hash2</key>
<data>
4gczxE4ryx52ImdDXaLrDrolN80V4hzGDR6il+IJSMM=
</data>
</dict>
<key>Resources/breakpadUtilities.dylib</key>
<dict>
<key>hash</key>
<data>
o50h0us1/uq3iqh283cxNmjKXo4=
</data>
<key>hash2</key>
<data>
o1TKcohbNr0irQCocjqadotb+Rynx3hnNv6lEsdE1LI=
</data>
</dict>
<key>Resources/crash_report_sender.app/Contents/Info.plist</key>
<dict>
<key>hash</key>
<data>
YEOK87eViZTKpTaD2YHTpo5wWVU=
</data>
<key>hash2</key>
<data>
ieD6cw6Jf4eHKm9mdzi7f6MXjgV/5RMfcUJvfzxWCAY=
</data>
</dict>
<key>Resources/crash_report_sender.app/Contents/MacOS/crash_report_sender</key>
<dict>
<key>hash</key>
<data>
SQulg9376CM1Y4dqsQd2Ddfwaf0=
</data>
<key>hash2</key>
<data>
954PCeOhUyHhW46UXEMBV9OlPrSL8QbrdGok8TrEcjg=
</data>
</dict>
<key>Resources/crash_report_sender.app/Contents/PkgInfo</key>
<dict>
<key>hash</key>
<data>
n57qDP4tZfLD1rCS43W0B4LQjzE=
</data>
<key>hash2</key>
<data>
glAhkclISwTWhTdPmHmgBmBpxJuKyuegSwHTjQfo7KA=
</data>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/Breakpad.nib</key>
<dict>
<key>hash</key>
<data>
+QCsJ6Erp46mpihY0O0UIgsvppk=
</data>
<key>hash2</key>
<data>
7CA3zuJ6kk9rKkruhSvVVG7s70TRSutSTnnNg874ntg=
</data>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/English.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/English.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
94Rb5xB5h/M9s6+1p12hne5LJnw=
</data>
<key>hash2</key>
<data>
fFd9vKdZUgwfj5tDARquaX3aAdUM890hr1gFJw5+B7Q=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/crash_report_sender.icns</key>
<dict>
<key>hash</key>
<data>
qnqmtvXpsnZwBE3LM1r5HeaycNA=
</data>
<key>hash2</key>
<data>
fFfmJrqz5lhcnEGTvVsT8gh+cyhTfO0Y+jAzvqUxvsk=
</data>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/da.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/da.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
keCiCUgrkLjkY0QCsX7TLdRI+rM=
</data>
<key>hash2</key>
<data>
x8BJpH4b0Zf+ymb7Ro3Xm0zM5x+zZfqGn8vrT7pCBgo=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/de.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
JqsA1ULQf1utlPit9y1Y6h8L4QE=
</data>
<key>hash2</key>
<data>
b6GX7xdlWIKNQ+dl1CcmUNjXbMUjsrhwdQ178MCBd7g=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/de.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
o6oddgPESX//1IXIGRnZH4YfgQk=
</data>
<key>hash2</key>
<data>
wfbpj/qVcuIVk8en0umujmgfQNR+LezGuYY9DiCe9B4=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/es.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
cL6Veb5YPBUh3nluPBvD1dNKcrM=
</data>
<key>hash2</key>
<data>
AWio5C8m0hLll/9YmRF9vKMNJ6XLUHcnYnVByXxkgGA=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/es.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
TZnDxArDHqebms0OcuOOlJrTcmk=
</data>
<key>hash2</key>
<data>
k47O787CIHDZ3bcYMKVXc5NrmwAjSNkbI8UGhtnTPnc=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/fr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/fr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
+VrKvOKFg5QOnkl6P02NvC123O8=
</data>
<key>hash2</key>
<data>
1jqWVZk8FCS/ntbwgG5yx7vBQKm8oGjeUDRCdnlA2c0=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/goArrow.png</key>
<dict>
<key>hash</key>
<data>
nkv25D/nPP4hcdobLV4E1j10vng=
</data>
<key>hash2</key>
<data>
qUrKjz/qnkeHNT9LPQU1cB/876EsKhKmS/avltrkfS8=
</data>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/it.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/it.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
5yY7+3M71LmTOD34HB1oINCiupQ=
</data>
<key>hash2</key>
<data>
muxTmgK0UEoV7Jhk6okmdB0Eab2OnZiMC3puP7gGNcs=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/ja.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/ja.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
vRPNTr3gyvXwnmBFT2gbVrOOU8Y=
</data>
<key>hash2</key>
<data>
iOPKbrBUUd+Doz/QGs6ABNirX0SPeWA+JSpPZOkY0m4=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/nl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/nl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
sKDbblma/6DIFay+0zu59Cz9GFs=
</data>
<key>hash2</key>
<data>
opK0woO8TbLFE7WEb4oY0nzEjScX6LOSKencgMS7HNE=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/no.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/no.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
jKhDGk8xv4y9JYVznDHWSVyVBys=
</data>
<key>hash2</key>
<data>
sADTELPVsXo0deQkxkuSYc9kH4z/If72eAUUPYamKvw=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sl.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
+Rx+gztMfQ/PRmX6iPqjo4oM0Mc=
</data>
<key>hash2</key>
<data>
BXbdoVOileOaq8gH6SPxvp2OVkPSmbqLRvipwGGWa9g=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sl.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
gHcQMpX4xjn8rxGNl0Gy22ctE5Y=
</data>
<key>hash2</key>
<data>
F1Cn4M6RfXGJsN3O5N9ElsBFiOH45t76fuveVq2nWfI=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sv.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
S4XKKUjazzsJO9x/+VUrlLc9+PE=
</data>
<key>hash2</key>
<data>
FeVy1U7LgPaJDd5lYwuMHAt6F1tL9McG+42UFKzY2zk=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/sv.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
qlm2QQW64CcY5XHGQDcDV1ESw9Y=
</data>
<key>hash2</key>
<data>
ncq2P7vEGBy7PtG2y46aBqg6kFQnUGHuvWIJqBkI83A=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/tr.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
NheGINmCVlLiC5tf3L3FGszVjVA=
</data>
<key>hash2</key>
<data>
i+uUCp88kDm4kDg1aSBDyarzPnm9V0jrxKEGNM1Fh7s=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/Resources/tr.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
G0b99jELBPgDTpd4/wlxNr9k1ZI=
</data>
<key>hash2</key>
<data>
AId5ZOSZg+6DLCCeSEIAm2TVBOLFcPbVYYmcA9XXiqY=
</data>
<key>optional</key>
<true/>
</dict>
<key>Resources/crash_report_sender.app/Contents/_CodeSignature/CodeResources</key>
<dict>
<key>hash</key>
<data>
VlfNFBkiGkJ8Qass2vV9iGeucdA=
</data>
<key>hash2</key>
<data>
Fc4XJrcmBCC+iCiohGnULJ5ymG67u/vtsZi6cKbTGYU=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^Resources/</key>
<true/>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^.*</key>
<true/>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^[^/]+$</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>