openSeaChest_Erase.txt                                    Revision: 21-Apr-2020
===============================================================================
 openSeaChest_Erase for Linux and Windows - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
 See Version History below.
===============================================================================
Welcome to the openSeaChest open source project!

This collection of storage device utility software is branched (forked) off of
an original utility collection called the Seagate SeaChest Utilities by Seagate
Technology LLC.  The original SeaChest Utilities are still available at
www.seagate.com or https://github.com/Seagate/ToolBin/tree/master/SeaChest.
Binary versions are available for Linux or Windows, with the Windows versions
signed by Seagate Technology LLC.

BINARIES and SOURCE CODE files of the openSeaChest open source project have
been made available to you under the Mozilla Public License 2.0 (MPL).  The
openSeaChest project repository is maintained at
https://github.com/Seagate/openSeaChest.

This User Guide file contains important information about openSeaChest Erase.
Please read this entire file before using this software.

Many tests and commands are completely data safe, while others will change the
drive (like firmware download or data erasure or setting the maximum capacity,
etc).  Be careful using openSeaChest because some of the features, like the
data erasure options, will cause data loss.   Some commands, like setting the
maximum LBA, may cause existing data on the drive to become inaccessible.  Some
commands, like disabling the read look ahead buffer, may affect the performance
of the drive.  Seagate is not responsible for lost user data.

openSeaChest diagnostics are command line utilities which are available for
expert users.  These command line tools assume the user is knowledgeable about
running software from the operating system command prompt. CLI tools are in the
English language only and use "command line arguments" to define the various
tasks and specific devices.  openSeaChest diagnostics are available for both
Linux and Windows environments.

openSeaChest_Erase is a comprehensive command line tool that can be used to
efficiently erase data on Seagate disk drives (this includes Seagate, Maxtor,
Samsung and LaCie).

NOTE: openSeaChest_Erase may not be fully functional on non-Seagate drives.

NOTE: Windows 8, Windows Server 2012 and newer do not support the Sanitize
command set.

This User Guide file contains important information about openSeaChest_Erase.
Please read this entire file before using this software.

If this is your drive, you should always keep a current backup of your
important data.

If this is not your drive and the original owner has no claim of ownership to
it or the data stored on it, then you may still be responsible for the data in
your possession.   To protect yourself from potential liability and to protect
the previous owner's privacy, you should remove all data by performing a data
erasure on this drive.

Be very careful because using openSeaChest_Erase will cause data loss. Seagate
is not responsible for lost user data.

Important note: Many tests in this tool directly reference storage device data
sectors, also known as Logical Block Addresses (LBA). Test arguments may
require a starting LBA or an LBA range.  The predefined variable 'maxLBA'
refers to the last sector on the drive.  Many older SATA and SAS storage
controllers (also known as Host Bus Adapters [HBA]) have a maximum addressable
limit of 4294967295 [FFFFh] LBAs hard wired into their design.  This equates to
2.1TB using 512 byte sectors.  This also means accessing an LBA beyond the
2.1TB limitation either will result in an error or simply the last readable LBA
(usually LBA 4294967295 [FFFFh]) depending on the actual hardware.  This
limitation can have important consequences.  For example, if you intended to
erase a 4TB drive, then only the first 2TB will actually get erased (or maybe
even twice!) and the last 2TB will remain untouched.  You should carefully
evaluate your system hardware to understand if your storage controllers provide
support for greater than 2.1TB.

Note: One gigabyte, or GB, equals one billion bytes when referring to hard
drive capacity. This software may use information provided by the operating
system to display capacity and volume size. The Windows file system uses a
binary calculation for gibibyte or GiB (2^30) which causes the abbreviated size
to appear smaller. The total number of bytes on a disk drive divided by the
decimal calculation for gigabyte or GB (10^9) shows the expected abbreviated
size. See this FAQ for more information
<http://knowledge.seagate.com/articles/en_US/FAQ/172191en?language=en_US>.

NOTE: Windows 8, Windows Server 2012 and newer do not support the Sanitize
command set.

Usage - Linux (run with sudo)
=============================
        openSeaChest_Erase [-d <sg_device>] {arguments} {options}

Examples - Linux
================
        sudo openSeaChest_Erase --scan
        sudo openSeaChest_Erase -d /dev/sg2 -i
        sudo openSeaChest_Erase --device /dev/sg1 --sanitize info

Usage - Windows (run as administrator)
======================================
        openSeaChest_Erase [-d <device>] {arguments} {options}

Examples - Windows
==================
        openSeaChest_Erase --scan
        openSeaChest_Erase -d PD2 -i
        openSeaChest_Erase --device PD1 --sanitize info

Utility Arguments
=================
        -s, --scan
                Scan the system and list all storage devices with logical
                /dev/sg? assignments. Shows model, serial and firmware
                numbers. If your device is not listed on a scan immediately
                after booting, then wait 10 seconds and run it again.

        -S, --Scan   (note the capital letter S)
                This option is the same as --scan or -s, however it will also
                perform a low level rescan to pick up other devices. This
                low-level rescan may wake devices from low power states and may
                cause the OS to re-enumerate them. Use this diagnostic option
                when a device is plugged in and not discovered in a normal scan.

                NOTE: A low-level rescan may not be available on all interfaces
                or all OSs.  The low-level rescan is not guaranteed to find
                additional devices in the system when the device is unable to
                come to a ready state.

        -F, --scanFlags [option list]
                Use this option with -s to control the output from scan with the
                options listed below. Multiple options can be combined.
                     ata            - show only ATA (SATA) devices
                     usb            - show only USB devices
                     scsi           - show only SCSI (SAS)) devices
                     nvme           - show only NVMe devices
                     interfaceATA   - show devices on an ATA interface
                     interfaceUSB   - show devices on a USB interface
                     interfaceSCSI  - show devices on a SCSI or SAS interface
                     interfaceNVME  - show devices on a NVMe interface
                    Linux:
                     sd             - show /dev/sd? device handles
                     sgtosd         - show the sd and sg device handle mapping
                    Windows:
                     ignoreCSMI     - do not scan for any CSMI devices
                     allowDuplicates - allow drives with both CSMI and PD
                                       handles to show up multiple times in the
                                       list.

                Examples of combining two options:
                     -s --scanFlags usb scsi  - show only USB and SAS devices
                     --scan -F ata interfaceSCSI  - show only SATA nearline
                        drives on a SAS adapter

        -d, --device <device handle>
                Use this option with all commands, except --scan, to specify
                the sg device handle (target drive) on which to perform an
                operation. See the section below 'Tool Usage Hints' for
                information about defining multiple device handles.

                Example Lin: -d /dev/sg5
                Example Win: -d PD0, or -d PD3

        -i, --deviceInfo
                Show information and features for the storage device. USB
                devices will show the product name, serial and firmware numbers
                as communicated by the USB-SATA bridge.  Add--usbChildInfo to
                display details about the drive within the USB enclosure.

        --SATInfo                       (SATA only)
                Displays SATA device information on any interface using both
                SCSI Inquiry/VPD/Log reported data (translated according to
                SAT) and the ATA Identify/Log reported data.

        --testUnitReady
                A simple check to see if the device responds to commands from
                interface.  Ready or Not Ready are the outputs.  Not Ready
                results will also include the full SCSI Sense Code.

        --displayLBA [LBA | maxLBA]
                This option will read and display the contents of the specified
                LBA to the screen. The display format is hexadecimal with an
                ASCII translation on the side (when available).  The predefined
                text string "maxLBA" (without quotes) may be entered to
                indicate the last sector on the drive instead of the specific
                LBA number.

        --showEraseSupport
                This option checks the drive to determine which methods of data
                erasure are supported and lists them, from fastest to slowest.
                Gives overwrite erase time estimate.

        --poll
                Use this option to cause another operation to poll for progress
                until it has completed.  This argument does not return to the
                command prompt and prints ongoing completion percentages (%)
                and the final test result.  Full drive procedures will take a
                very long time.  Used with --sanitize, --ataSecureErase (SATA),
                --writeSame (SATA), or --formatUnit (SAS).

        --progress [sanitize | format]
                Get the periodic ongoing progress for certain types of tests
                which were started quietly (default) and running in the
                background until completion and the tool has already returned
                to the command prompt.  This type of progress checking is used
                when not using the --poll argument which does not return to the
                command prompt.  The progress counts up from 0% to 100%.
                Specify the type of test to check progress.

        --showPhysicalElementStatus
                Use this option to see the status/health of the storage
                elements inside a drive. Use the element # shown with the
                --removePhysicalElement option to remove that storage element
                from use. This option can also be used to see if a depopulation
                is still in progress or if it has completed.  See the section
                below 'Interpreting Head Health and Status' for more
                information.

SATA Only
---------
        --ataSATsecurityProtocol [enable | disable]         (SATA only)
                This option can be used to force enable or disable using the
                ATA security protocol as specified in the SAT specification. By
                default, the tool will use this method when it is supported to
                allow the SATL to understand and manage the security commands
                being performed and prevent other issues.

                Use this option to disable an ATA security password. If a drive
                lost power during an ATA Security Erase in SeaChest, then using
                the password SeaChest with type 'user' will remove the temporary
                password set by the utility.

                Example:
                --ataSATsecurityProtocol disable --ataSecPassword SeaChest --ataSecPassType user

                Some commands like --scan and --deviceInfo will still run on a
                locked drive. To disable a password set by a BIOS, the BIOS
                must have set the password in ASCII. A BIOS may choose to hash
                the password typed in the configuration however it chooses and
                this utility has no idea how to match what the BIOS has done so
                it may not always work to remove a password set by something
                other than this utility. See the --ataSecPWMod command below
                for additional alternatives.

        --ataSecPassword ["ASCII password" | SeaChest | empty]      (SATA only)
                Use this option to specify a password to use with an ATA
                security operation. If specifying a password with spaces,
                quotes must be used. If SeaChest is given, the default SeaChest
                password will be used. If empty is given, an empty password
                will be used.

                Examples:
                  "This is a valid password"
                  ThisIsAlsoValid
                  "This password uses \"quotes\"
                  "This password is \/\/eird"

                Note: Windows PE offers an ATA Security Erase feature. If the
                erase is interrupted then a temporary password
                AutoATAWindowsString12345678901 is still set.

                Note: See the section below "When drives are reported Security
                "Frozen" by openSeaChest".

        --ataSecPassType [user | master]                (SATA only)
                Use this option to specify if the password being given with the
                --ataSecPassword option is a user or a master password. If this
                option is not provided, user is assumed.

        --ataSecPWMod [byteswapped | zeropad | spacepad | fpad | leftAlign |
          rightAlign | uppercase | lowercase | invertcase] (SATA Only)
                Use this option to have the utility make modifications to the
                ATA security password to attempt other various ways it may be
                sent by a system bios. These are not guaranteed to work, but
                may help unlock a drive that was locked by a BIOS that encoded
                the password in a unique way. This option can be presented
                multiple times to select multiple modifications.

                EX: --ataSecPWMod byteswapped --ataSecPWMod invertcase
                  byteswapped - byteswaps the password. EX: blah -> lbha
                  zeropad - zero pads the password if less than 32 characters
                  spacepad - space pads the password if less than 32 characters
                  fpad - pads the passwords with Fh (all 1's) if less than
                     32characters
                  leftAlign - left aligns the password in the buffer
                  rightAlign - right aligns the password in the buffer
                  uppercase - sends the password as all uppercase
                  lowercase - sends the password as all lowercase
                  invertcase - switches uppercase for lower, and lowercase for
                  upper

Utility Options
===============
        -h, --help
                Show utility options and example usage (this output you see now)

        -v [0-4], --verbose [0 | 1 | 2 | 3 | 4]
                Show verbose information. Verbosity levels are
                0 - quiet
                1 - default
                2 - command descriptions
                3 - command descriptions and values
                4 - command descriptions, values, and data buffers.

                Example: -v 3 or --verbose 3

        -q, --quiet
                Run openSeaChest in quiet mode. This is the same as -v0
                or --verbose 0

        -V, --version
                Show openSeaChest version and copyright information & exit

        --license
                Display the Seagate End User License Agreement (EULA).

        --echoCommandLine
                Shows the command line above the banner in the standard output.
                Useful when saving output to logs.

        --enableLegacyUSBPassthrough
                Only use this option on old USB or IEEE1394 (Firewire) products
                that do not otherwise work with the tool. This option will
                enable a trial and error method that attempts sending various
                ATA Identify commands through vendor specific means. Because of
                this, certain products may respond in unintended ways since
                they may interpret these commands differently than the bridge
                chip the command was designed for.

        --hideLBACounter
                Use this option to supress the output from options that show
                LBA counters without turning off all output to the screen.

        --sat12byte
                This forces the lower layer code to issue SAT spec ATA
                Pass-through 12-byte commands when possible instead of 16-byte
                commands.  By default, 16-byte commands are always used for ATA
                Pass-through.  USB products may need this option as a
                workaround if the default does not perform.

        --onlySeagate
                Use this option to match only Seagate drives for the options
                provided. May also be used with the --scan command.

        --modelMatch [model Number]
                Use this option to run on all drives matching the provided
                model number. This option will provide a closest match although
                an exact match is preferred. Ex: ST500 will match ST500LM0001.
                The option --childModelMatch may be used to match drives in USB
                enclosures.

                Note: See the section below 'Tool Usage Hints' for information
                about defining multiple device handles.

        --onlyFW [firmware revision]
                Use this option to run on all drives matching the provided
                firmware revision. This option will only do an exact match.
                The option --childOnlyFW may be used to match drives in USB
                enclosures.

        --hours [hours]
                Use this option to specify a time in hours for a timed
                operation to run.

        --minutes [minutes]
                Use this option to specify a time in minutes for a timed
                operation to run.

        --seconds [seconds]
                Use this option to specify a time in seconds for a timed
                operation to run.

        --forceATA
                Using this option will force the current drive to be treated as
                a ATA drive. Only ATA commands will be used to talk to the
                drive.

        --forceATADMA   (SATA Only)
                Using this option will force the tool to issue SAT commands to
                ATA device using the protocol set to DMA whenever possible (on
                DMA commands). This option can be combined with --forceATA.

        --forceATAPIO   (SATA Only)
                Using this option will force the tool to issue PIO commands to
                ATA device when possible. This option can be combined with
                --forceATA.

        --forceATAUDMA  (SATA Only)
                Using this option will force the tool to issue SAT commands to
                ATA device using the protocol set to UDMA whenever possible (on
                DMA commands). This option can be combined with --forceATA.

        --forceSCSI
                Using this option will force the current drive to be treated as
                a SCSI drive. Only SCSI commands will be used to talk to the
                drive.

        Windows only:
        --csmiIgnorePort
                Use this option to force setting the "ignore Port" flag for the
                port identifier in a CSMI passthrough command. This option can
                be combined with --csmiUsePort which will force the passthrough
                to rely on only the SAS address. This flag is intended to help
                troubleshoot or improve CSMI compatibility on systems that are
                otherwise not functional.

        --csmiUsePort
                Use this option to force setting the "Use Port" flag for the
                PHY identifier in a CSMI passthrough command. This option can
                be combined with --csmiIgnorePort which will force the
                passthrough to rely on only the SAS address. This flag is
                intended to help troubleshoot or improve CSMI compatibility on
                systems that are otherwise not functional.

        --csmiVerbose
                Use this option to show some verbose output when running the
                tool on a CSMI handle. The debugging information shown will be
                specific to the CSMI passthrough mechanism and may be useful
                when troubleshooting system/driver compatibility issues.

Data Destructive Commands
========================================
Data destructive commands will require additional command line arguments as
confirmation of your understanding that data will be lost on the drive.
Seagate is not responsible for lost user data.

Note: The time required to erase an entire drive may take several hours. The
erase time length is slightly longer than the time it takes to read the entire
drive. The openSeaChest --deviceInfo command output has a line similar to this
example: 'Long Drive Self Test Time:  1 hour 38 minutes'. You can use the
reported time for your drive as being less than the time necessary to erase the
entire drive.

        --confirm this-will-erase-data ... etc

        --performQuickestErase
                This option checks the drive to determine which methods of data
                erasure are supported and determines which is the quickest to
                erase ALL data on the drive. It then starts the quickest erase.
                Combine this option with the --poll option to enable polling
                for progress on the fastest erase.  See also --showEraseSupport.

                Note 1: Some erase methods require polling and will have polling
                enabled by default.

                Note 3: See the section below "When drives are reported Security
                "Frozen" by openSeaChest".

Note: Windows 8 (and newer) native drivers block Sanitize commands.

        --sanitize [info | blockerase | cryptoerase | overwrite | freezelock |
                    antifreezelock]
                Use the info argument to show supported sanitize operations.
                Optionally, use blockerase, cryptoerase, or overwrite to start
                a sanitize operation.

                Example:--sanitize info
                Example:--sanitize blockerase

                * blockerase on some solid state drives (SSD) is very fast at
                less than one (1) second, while on other SSDs it can take
                longer than 30 seconds. It performs a physical low level block
                erase operation on all current, past and potential user data
                making previous data irretrievable. Consider using the --poll
                option to monitor % completion.

                * cryptoerase is usually very fast at less than one (1) second.
                It changes the internal encryption keys that are used for user
                data causing all previous data to be useless. Some products may
                take a few minutes to fully finish this command option.

                * overwrite physically overwrites all current, past and
                potential user data. The ATA specification gives overwrite the
                option to set a user defined pattern and multiple passes.
                openSeaChest_Erase will use zeros (0) and one pass.

                Overwrite on hard disk drives (HDD) takes a very long time to
                complete at approximately three (3) hours per terabyte. Once
                this command starts it must finish the overwrite erase before
                normal use of the drive is returned. Even if a power reset is
                performed during overwrite erase the drive will continue from
                where it was stopped until it reaches the end of the of
                erasure. Automatic sector reallocation (repair) is permitted
                during the operation of this function.

                The optional --poll argument does not return to the command
                prompt and prints ongoing completion percentages (%) and the
                final test result. Otherwise, the Sanitize command begins and
                immediately returns to the command prompt.  Use the --progress
                sanitize command to check on the completion percentage (%) and
                test result.

                * freezelock is a command to block processing of sanitize
                operations until a power cycle is performed on a device. It is
                only available on ATA drives. Once this command has been sent,
                the freezelock status becomes immediate and cannot be cleared
                until the drive has been powered off. All sanitize commands,
                except a sanitize status will be aborted.

                * antifreezelock is a command which is designed to block a
                freezelock command from locking out the sanitize feature set.
                It is only available on ATA drives that support the ACS3, or
                higher specification.

        --overwrite [starting LBA | maxLBA]
                Use this option to start an overwrite erase at the specified
                starting LBA.  Use 0 for the starting LBA to mean the beginning
                of the drive.  The predefined text string "maxLBA" (without
                quotes) may be entered to indicate the last sector on the drive
                instead of the specific LBA number.  The overwrite data pattern
                will be all zeros (0000... etc) for the specified range.  You
                must combine this option with either the --overwriteRange to
                set the range count of the erasure, or the time settings
                (--minutes, etc. see above).

                Example: --overwrite 0 --overwriteRange 1000000
                         --overwrite 0 --hours 1 --minutes 30

                Important: If the end of the drive is reached before the time
                is up, the operation will continue at the beginning of the
                drive until the specified time is finished.  This means your
                starting LBA may not be the lowest LBA erased.  Use --overwrite
                and --overwriteRange together instead for more control of the
                starting and ending LBAs.  This test always issues write
                commands to the drive. No TRIM or UNMAP commands are used
                during this operation.

                Note: This erase may be used on HDD (hard disk drive) or SSD
                (solid state disk) devices, although not advised for SSD
                because it impacts endurance life due to abnormal write
                activity.

        --overwriteRange [LBA count]
                Use with the --overwrite option to specify a range of LBAs to
                erase on the selected drive.  If the starting LBA and the range
                count together exceed the MaxLBA (last sector of the drive)
                then the test will end at the MaxLBA.  Also, if this command is
                omitted then the end of the drive is assumed and the test will
                end at the MaxLBA.

        --trim [starting LBA | maxLBA]         (SATA and NVMe)
        --unmap [starting LBA | maxLBA]        (SAS only)
                Use this option to start a TRIM (SATA) or UNMAP (SAS) operation
                at the specified starting LBA.  Use 0 for the starting LBA to
                mean the beginning of the drive.  The predefined text string
                "maxLBA" (without quotes) may be entered to indicate the last
                sector on the drive instead of the specific LBA number.  These
                commands are common on SSD devices and less common on HDDs.
                You must combine this option with the corresponding --trimRange
                or --unmapRange to set the range of the operation.

        --trimRange [LBA count]         (SATA and NVMe)
        --unmapRange [LBA count]        (SAS only)
                Use one of these options to specify a range of LBAs to TRIM or
                UNMAP on a drive. A starting point must be specified with the
                corresponding --trim or --unmap option.  If the starting LBA
                and the range count together exceed the MaxLBA (last sector of
                the drive) then the test will end at the MaxLBA.  Also, if this
                command is omitted then the end of the drive is assumed and the
                test will end at the MaxLBA.

        --writeSame [starting LBA | maxLBA]
                Use this option to start a WRITE SAME erase at the specified
                starting LBA.  Use 0 for the starting LBA to mean the beginning
                of the drive.  The predefined text string "maxLBA" (without
                quotes) may be entered to indicate the last sector on the drive
                instead of the specific LBA number.  The Write Same data
                pattern will be all zeros (0000... etc) for the specified
                range.  You must combine this option with the --writeSameRange
                to set the range of the erasure.

                On SCSI devices, this uses the writesame16 command. On ATA
                devices, this uses the SCT writesame feature.

                Note: For SATA drives, adding the --poll option will cause this
                operation to poll for progress until complete. This is not
                available on SAS and SCSI drives because SCSI drives do not
                report the progress on a Write Same operation.

        --writeSameRange [LBA count]
                Use with the --writeSame option to specify a range of LBAs to
                erase on the selected drive.  If the starting LBA and the range
                count together exceed the MaxLBA (last sector of the drive)
                then the test will end at the MaxLBA.  Also, if this command is
                omitted then the end of the drive is assumed and the test will
                end at the MaxLBA.

        --pattern [repeat:asciinospaces | random | increment:startValue |
             file:filename]
                Use this option with overwrite, sanitize, and format unit
                operations to write a specific pattern to a range of LBAs or
                the whole drive.

                * repeat - without spaces, enter an ASCII text string or a
                hexadecimal string terminated by a lower case "h". This pattern
                will be repeated until it fills the logical size of the LBA.
                i.e. helloword or FFFFFFFFh
                Note: A hexadecimal pattern will be interpreted as a 32bit
                      unsigned integer. 4 hex bytes (8 characters) must be
                      given for a hex value to be used. Ex: 1F037AC8h or
                      0000FFFFh

                * random - the entire logical sector size will be filled with
                random bytes. This pattern will be written to all LBAs in the
                desired range.

                * increment - enter the starting numerical value. Starting with
                this value, each byte will be written with 1 + previous value.

                * file - user supplied file name to use for a pattern. The file
                will be truncated or padded with zeros to the logical sector
                size.
                Note 1: Each file will be interpreted as a binary file.
                Note 2: A path must also be provided if the file is not in the
                        local directory.
                Note 3: Sanitize Overwrite on SATA only supports a 32bit
                        pattern. The file option will get truncated to a 32bit
                        pattern for SATA products.

        --removePhysicalElement [element #]
                Use this option to remove a storage element from use on a
                drive. When this is done, the drive will erase all user data
                and lower the capacity to a new point where the drive is still
                usable without the provided element #. Use the
                --showPhysicalElementStatus option to see the status of the
                depopulation operation.

SATA Only
---------
        --ataSecureErase [normal | enhanced]          (SATA only)
                Use the normal or enhanced argument to start an ATA security
                erase on a device.

                * normal writes binary zeros (0) to all user data areas.

                * enhanced writes binary zeros (0) to all user data areas,
                including sectors that are no longer in use due to
                reallocation. Not all drives support the enhanced mode. For
                some models (ISE enabled), enhanced mode erase can take seconds
                because it uses crypto erase internally.

                ATA Security Erase on standard drives (non-SED) takes a very
                long time to complete at approximately three (3) hours per
                terabyte. Self Encrypting Drives (SED) may run an quick
                cryptographic erase by changing the drive's encryption keys.
                The industry standard command ATA Security Erase begins by
                locking the drive with a temporary password which is cleared at
                the end of the erasure. Do not run this command unless you have
                ample time to allow it to run through to the end. If the
                procedure is interrupted prior to completion, then the drive
                will remain in a locked state and you must manually restart it
                from the beginning. The temporary password to unlock the drive
                is "SeaChest", plain ASCII letters without the quotes.  See the
                various ATA password options in the Utility Arguments section
                above.

                If the drive reports that it is freezelocked, then this is
                usually put on by a BIOS command at startup.  After the
                operating system is finished booting you can try removing the
                power to just the hard drive.  This should allow it to restart
                without the freezelock command.

                Note: See the section below "When drives are reported Security
                "Frozen" by openSeaChest".

SAS Only
--------
        --formatUnit [current | new sector size]    (SAS Only)
                This option will start a format unit operation on a SAS drive
                Use "current" to perform a format unit operation with the
                Sector size currently being used, otherwise enter a new sector
                size to use upon format completion.

                Valid sector sizes are given by the --showSupportedSectorSizes
                command (see above) or  listed in the device Product Manual.
                This command will erase all data on the drive. The security
                initialize feature is not used and protection information will
                not be set. Combine this option with --poll or --progress to
                check for completion status until the format is complete.

                Warning: Once a Format Unit command is started it must be
                allowed to finish in order to calculate the total number of
                logical blocks (LBAs) at the finish.  If the sector size has
                changed then there will be a corresponding change to the total
                number of LBAs. If a device stops a Format Unit before it
                completes then the device will report a "Corrupted Format"
                sense code, "03-31".  Restart the format and allow it to finish
                to correct this error.

        --fastFormat [fast format mode] (SAS Only) (SBC4 required)
                You must use this option with the --formatUnit option to run a
                fast format. Available fast format modes:
                    0 - This is a standard format unit command. All logical
                        blocks will be overwritten. This command will take a
                        very long time.
                    1 - This is a fast format unit command keeping existing
                        data in the physical sector. This option can be used to
                        quickly change the the logical sector size between 5xx
                        emulation and 4xxx native logical block sizes.
                        Resulting LBA (sector) count is either /8 or *8 the
                        current Read Capacity, depending on the direction of
                        the conversion.  The media may be readable, but data
                        may be unspecified or may return errors on read access
                        according to it's error processing algorithms.
                    2 - This is a fast format unit command that can change the
                        logical sector size quickly. Media may or may not be
                        read accessible until a write has been performed to
                        the media.

                Example: --formatUnit 512 --fastFormat 1 --confirm I-... etc
                Example: --formatUnit 4096 --fastFormat 1 --confirm I-... etc

                Note: There is no electronic method to test if a SAS drive
                      supports Fast Format. Refer to the drive product manual
                      to determine if it supports the sub-command.  (See the
                      help topic below: About FastFormat)


Return codes
============
        0       No Error Found
        1       Error in command line options
        2       Invalid Device Handle or Missing Device Handle
        3       Operation Failure
        4       Operation not supported
        5       Operation Aborted
        6       File Path Not Found
        7       Cannot Open File
        8       File Already Exists
        9       Need Elevated Privileges (sudo, run as administrator)
        Anything else = unknown error

================
Tool Usage Hints
================
See Sample Output examples below.

First, run the openSeaChest -s option to determine what /dev/sg? or PD? device
handle assignment lines up to your disk drive. This option will also show you
other details about the drive including the current firmware revision.

Linux:
Vendor     Handle       Model Number       Serial Number     FwRev
ATA        /dev/sg0     ST94813AS          3AA043KP          3.03
SEAGATE    /dev/sg1     ST1000NM0011       ZAA15VAS          SN03

Windows:
Vendor     Handle   Model Number        Serial Number     FwRev
IDE        PD0      ST94813AS           3AA043KP          3.03
SEAGATE    PD1      ST1000NM0011        ZAA15VAS          SN03

You can use SeaChest -s --onlySeagate to limit the display to just Seagate.

All utility arguments will require you to identify the specific drive by
providing the sg or PD device handle (-d, --device).

Lin example, openSeaChest_Basics -d /dev/sg1 --shortDST poll
Win example, openSeaChest_Basics -d PD2 --shortDST poll

You may combine multiple tests with a single command line.  For example,
inLinux, openSeaChest_Basics -d /dev/sg0 -i --smartCheck runs both identify and
SMART.  In Windows, openSeaChest_Basics -d PD0 -i --smartCheck runs both
identify and SMART.

Multiple device handles can be given by adding -d /dev/sg# for each additional
handle.  Devices are processed in sequential order.  For example, in Linux,
openSeaChest_Basics -d /dev/sg0 -d /dev/sg3 -i runs identify on these two
devices.  In Windows, openSeaChest_Basics -d PD0 -d PD3 -i runs identify on
these two devices.

Caution: All device handles may be specified.  However, great care should be
taken to fully anticipate the consequences of running a command on all storage
devices in a system.  For example, a command to erase data on all drives could
be catastrophic or exactly what you want. The shortcut to select all devices is
-d all.  Seagate is not responsible for lost user data.  Along with the
designation for all devices, you can narrow the tasks to specific types of
drives by using the --onlySeagate, --modelMatch and --onlyFW filters.

If the task is an OFFLINE command like format unit or short DST, meaning that
the drive works on the task in the background and the tool quickly returns to
the command prompt (there is little or no I/O to the system), then you can
expect the system to run normally. If the task has high I/O to the system like
a sequential read of all sectors on the drive, then you can expect the system
to slow down with each additional device.

The discussion above is about starting SEQUENTIAL tests, or one after the
other.  When the task does not return to the command prompt for a very long
time, then you have a few options to run tests in PARALLEL, also called
simultaneous, in other words all at the same time.  One way is to start
different drives in different Terminal windows, if available.  There are other
more sophisticated methods using parallel processing, for information about
these methods please see the information at this link:
https://github.com/Seagate/ToolBin/tree/master/SeaChest/parallel_testing

Tests which take a very long time to complete or erase all user data on the
drive will require a longer command line argument than indicated in the --help
output to the screen.  This approach is taken to eliminate the possibility of
accidental data loss or the commitment of long test times. The longer command
arguments are similar to -I-understand-this-command-will-take-a-long-time or
-I-understand-this-command-will-erase-all-data.

Advanced SAS installations may use dual ports.  These are listed as Port 0 and
Port 1 on the device information report. When both ports are active, each one
may have a unique /dev/sg designation.  The scan option may indicate that there
are two drives in the system with the same serial number.  Dual port
installations will also report two different Worldwide Numbers (WWN).

Windows Only Usage
==================
All Windows version tools support finding CSMI devices and talking to them like
you would a normal device.  The scan output will show all drives it detects
ONCE. CSMI device handles have a structure like SCSI0:1.  If a drive has both a
PD? and SCSI?:? handle, then openSeaChest will show the PD handle instead of the
SCSI (CSMI) handle.

When drives are in a RAID, the PD device handle is usually not available and
the CSMI handle may provide an alternate way to talk to the drive.  Just
because a device has a CSMI handle doesn't mean it is part of a RAID.

If you want to see both handles, add --scanFlags allowDuplicates to the command
line.  If you don't want to see any CSMI devices, add --scanFlags ignoreCSMI to
the command line.  openSeaChest_Info -d SCSI?:? --csmiInfo is useful when
troubleshooting CSMI device handles questions.

When drives are reported Security "Frozen" by openSeaChest
------------------------------------------------------
Note:  Your system or the openSeaChest software may report that a SATA password
cannot be changed because it is "frozen". Many systems BIOS will automatically
set the ATA SECURITY FREEZE LOCK command on all SATA drives at start up. The
SECURITY FREEZE LOCK command prevents changes to all Security states until a
following power-on reset or hardware reset. The purpose of the SECURITY FREEZE
LOCK command is to prevent password setting attacks on the security system.

The openSeaChest --deviceInfo command will display something similar to this:
"ATA Security Information: Supported, Frozen". To disable Freeze Lock, first
check your BIOS SATA disk options to control the setting at start up.
Otherwise, you might pause the boot up shortly after powering on the system and
then temporarily remove the power to the security frozen drive (let it
completely spin down). When the power is back on the drive it will start
without being frozen.

Windows systems may also decide not to recognize the drive if it is ATA
Security Locked and it will not be listed by the openSeaChest --scan command.
If the drive remains undetected in Windows, your alternative is to make a
bootable USB flash drive and run openSeaChest_Erase from the Linux operating
system.

Interpreting Head Health and Status
-----------------------------------
Beginning in 2016, some Seagate nearline drives started to support the
Remanufacture command set which allows a disk drive with a manageable
read/write head problem to remain in service at a reduced capacity by
"depopulating" the head element.  You can check if a drive supports the
Remanufacture command set by running --deviceInfo and looking for 'Storage
Element Depopulation' in the list of supported features.  (Not to be confused
with 'SATA Rebuild Assist' which is a feature used to rebuild RAID systems.)

A drive failure (due to a head problem) that is easily removed from the system
is replaced with a spare drive.  A drive that is nearly inaccessible may make
sense to remain in the system at a reliable lesser capacity by depopulating the
problem head.

If supported by the drive, the --showPhysicalElementStatus command will display
a simple table showing head number, type, health, and status.

The Health level is represented like a percentage, 0-100.  0 is perfectly
healthy, 100 = at manufacturer's limit, above this to 207 is above the
manufacturer's limit. A report of 254 means a depopulate is in progress.

The Status levels are active, in limit, degraded, truncated, truncate failed.

If a drive head has developed isolated, degraded performance, and does not
affect any other reliability in the system, then the head can be removed from
service. A drive with seven platters and fourteen heads would lose 1/14th of
its storage capacity, or ~7%.  Likewise, a four head drive would lose 25%.

If a drive is reported as "degraded" by --showPhysicalElementStatus then it can
be depopulated using the --removePhysicalElement command.  When a head is
depopulated the drive must perform a complete full pack write; this is
obviously data destructive and takes a very long time to complete.

When disk drives are built the post assembly factory process includes media
scanning, any defects mapping, defining sector sizes, and establishing system,
cache and data zones.  This activity is generically known as a low-level
format.  During head depopulation (i.e. removing a physical element) the drive
performs a kind of 'mid-level format' using Sanitize Overwrite which has the
unique behavior that once started it must finish.  If power is interrupted
during a Sanitize Overwrite it will pick up again where it left off when power
returns.

================
About FastFormat
================
A FastFormat (quickly changing the logical sector size) may take a few minutes
for the process to complete. The disk activity LED may show activity during the
conversion.  The larger the drive, the longer it takes.  This feature is found
on SAS and SATA interface Seagate drive families designed and manufactured
later than 2016.  SAS interface drives will report support for FastFormat if it
is available in the drive. Just run the -i or --deviceInfo command and check
under the Features Supported section.  Unfortunately, SATA interface drives do
not report this capability.  Please refer to the SATA product manual for
verification of this feature.

SAS and SATA interface drives accomplish a FastFormat this with the
--setSectorSize [new sector size] command found in SeaChest_Format or
SeaChest_Lite.  In addition, for SAS interface drives, only, the same result is
possible using the --formatUnit command with the --fastFormat [fast format
mode] modifier equal to 1.  This command is found in SeaChest_Format and
SeaChest_Erase.  For example:
--formatUnit 4096 --fastFormat 1 --confirm this-will... etc

SAS interface drives, only, can all do a long format unit.  This procedure
takes a very long time, more than a day in some cases, but it does have the
advantage of full defect management with all sectors being readable at the
conclusion.  The fast format does not do this full drive read and
verification.  If your drive is new, there is no real need to run a long format
unit to change sector between 5xxE (512 bytes per logical sector emulation) and
4kN (4096 native bytes per sector, logical and physical).

NOTE: Operating systems do a device discovery during start up and set various
parameters, like total sectors and sector size, into the storage device
descriptions. The logical sector size times the number or logical sectors
defines the drive capacity.  You should expect to see OS I/O errors if you
change the logical sector size on a drive and then perform read or write
operations before the OS has updated its storage device descriptions.  Some
operating systems will throw an error after accessing a drive that has just run
a FastFormat but during its error recovery routines it may re-discover the
device parameters and update the system logs.  A system restart, however, is
the most reliable way to refresh the storage device descriptions.

=========================
Linux General Usage Hints
=========================
Remember that Linux file names and command line arguments are cAsE SeNsiTiVe.

Display a file listing with the Linux command: ls -lah

The tool will require root privileges to run using either sudo or su commands.
Also, verify that the tool has executable rights.

A dot slash is a dot followed immediately by a forward slash (./). It is used
in Linux to execute a compiled program in the current directory when it is not
a built-in command or found in your path.

For example, ./openSeaChest -d /dev/sg0 --shortDST poll
or, sudo ./openSeaChest -d /dev/sg0 --shortDST poll

Shut down the files system and remove the power with the command:
poweroff

See previous screen history with the key combination:
Shift+PgUp or Shift+PgDn

Save a log file by redirecting the screen output to a text file by adding space
&>test.log at the end of your command line. Choose your own file name. To
append the screen output to an existing log file use >>test.log.

To save a log and display results at the conclusion of the tests, you can use
the "tee" command. Tee command writes to the STDOUT and to a file.
For example,
openSeaChest --echoCommandLine -d /dev/sg0 -i --smartCheck | tee -a mySeaChestLog.txt

Display a log or text file with the Linux "less" command: less myfile.log
Press the letter q to quit displaying the file.  Similarly, you can easily
read the Seagate License agreement by piping the output to the less
command with openSeaChest --license |less

Display a list of sg (SCSI generic) devices with the command:
cat /sys/class/scsi_generic/sg*/device/model
or
ls /dev/sg*

sg devices include the following interfaces: SATA, USB, SCSI (SCSI, SAS and FC)

Add the command word 'time' on the same command line before the openSeaChest
command to see how much time it takes to run a test.
For example, time ./openSeaChest -d /dev/sg0 --shortDST poll

When drives are not detected by openSeaChest
--------------------------------------------
The problem is that the sg driver isn't loaded on the system on boot.  You can
test if it is loaded by doing "ls /dev/sg*" and see if anything shows up. If
nothing shows up then the SG driver is missing (which is required by
openSeaChest to issue commands).

You need to do "modprobe sg" as root to load the sg module (since it wasn't
compiled into the kernel), then you will get sg devices that we can scan and
find. Once you run the modprobe command and sg is successfully loaded, then you
can re-run "ls /dev/sg*" and see SG device nodes. openSeaChest tools should
then be able to find devices once again.

How to control the amount of runtime kernel messages
----------------------------------------------------
When testing more drives than a system can hold, careful use of host adapters
and hot-plugging batches of drives (but never to direct motherboard
connections!) can help speed the process.  The Linux operating system will
display various system error messages, or none, when storage devices are
powered down and exchanged with the next drives.  The amount of information
contained in the OS error messages can be reviewed using the Linux utility
command "sysctl kernel.printk".  The default setting is defined by the
particular distro.  Tiny Core Linux, for example may set "4 4 1 7".  To hide
hot-plugging messages try "3 4 1 7", to increase the messaging to include
device details like model numbers try "6 4 1 7".  The command to set is 'sudo
sysctl -w kernel.printk="6 4 1 7"'.  See man sysctl - "configure kernel
parameters at runtime" for more.

Tesing storage devices on the USB and Thunderbolt interfaces
------------------------------------------------------------
Sometimes, when testing a storage device, it is more convenient to attach it as
an external drive to the test system. In the case of SATA drives there are very
many SATA-to-USB 'bridge' adapters available.  The quality and range of command
'passthrough' support for these adapters varies greatly.  Our tools will
attempt to work through these adapters.

If your notebook has a Thunderbolt interface connection then you may be able to
test a wide range of devices.  External Thunderbolt expansion systems provide a
PCIe slot in a chassis that can hold a SAS, NVMe, or SATA host adapter. The
host adapters would have cables that go out to your test bench where you would
provide the drive and an external power supply for the drives. Thunderbolt 2
expansion systems work in Linux by default. Thunderbolt 3 expansion systems
need to be enabled in the kernel with boot time options before it will be
recognized by the Linux operating system. See
https://www.kernel.org/doc/html/v4.14/admin-guide/thunderbolt.html for
information about how to activate the interface.

===========================
Windows General Usage Hints
===========================
The tool will require Administrative privileges to run.
Also, verify that the tool has executable rights.

Remember that the command line arguments are cAsE SeNsiTiVe.

Save a log file by redirecting the screen output to a text file by adding space
&>test.log at the end of your command line. Choose your own file name. To
append the screen output to an existing log file use >>test.log.

To save a log and display results at the conclusion of the tests, you can use
the powershell "tee" command. Tee command writes to the STDOUT and to a file.

For example:
powershell ".\openSeaChest --echoCommandLine -d PD1 --smartCheck | tee -append mySeaChestLog.txt"

Manual Launch for Windows
-------------------------
An individual openSeaChest utility for Windows cannot be launched by just
clicking on the file name. If started that way, the openSeaChest utility will
briefly show a black window box and quickly close.  That is what happens when
trying to run it from the Windows File Manager.

This is a command line tool and the requirement is to open a Command Prompt as
Administrator.  There are two easy ways to do this:
  1. Windows Accessories, right-click the Command Prompt icon and select Run as
     Administrator.
  2. Click Windows Start. In the Start Search box, type cmd, and then press
     CTRL+SHIFT+ENTER.

Then change drives or directory to where the openSeaChest utility is located and
run the tool file name from there.

=============
Sample Output
=============

SATA HDD Device Information:

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST4000DX001-1CE168
        Serial Number: ZQ3034X7R
        Firmware Revision: CC44
        World Wide Name: 500Q0C5007A5FCF19
        Drive Capacity (TB/TiB): 4.00/3.64
        Native Drive Capacity (TB/TiB): 4.00/3.64
        Temperature Data:
                Current Temperature (C): 25
                Highest Temperature (C): 40
                Lowest Temperature (C): 18
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  4 days 1 hour
        Power On Hours: 97.00
        MaxLBA: 7814037167
        Native MaxLBA: 7814037167
        Logical Sector Size (B): 512
        Physical Sector Size (B): 4096
        Sector Alignment: 0
        Rotation Rate (RPM): 5900
        Form Factor (inch): 3.5
        Last DST information:
                Time since last DST (hours): 0.00
                DST Status/Result: 0x0
                DST Test run: 0x1
        Interface speed:
                Max Speed (Gb/s): 6.0
                Negotiated Speed (Gb/s): 6.0
        Annualized Workload Rate (TB/yr): 2.51
        Total Bytes Read (GB): 6.65
        Total Bytes Written (GB): 21.27
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Not Supported
        Cache Size (MiB): 64.00
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Supported, Frozen
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate, Segmented
        Specifications Supported:
                ACS-2
                ATA8-ACS
                ATA/ATAPI-7
                ATA/ATAPI-6
                ATA/ATAPI-5
                ATA/ATAPI-4
                SATA 3.1
                SATA 3.0
                SATA 2.6
                SATA 2.5
                SATA II: Extensions
                SATA 1.0a
        Features Supported:
                NCQ
                HPA
                Power Management
                Security
                SMART
                DCO
                48bit Address
                APM
                GPL
                Free-fall Control
                Write-Read-Verify

SATA SSD Device Information:

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST120FP0021
        Serial Number: PQ57011BD
        Firmware Revision: B770
        World Wide Name: 5000C501005A16633
        Drive Capacity (GB/GiB): 120.03/111.79
        Native Drive Capacity (GB/GiB): 120.03/111.79
        Temperature Data:
                Current Temperature (C): 26
                Highest Temperature (C): 0
                Lowest Temperature (C): 17
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  2 days 23 hours
        Power On Hours: 71.00
        MaxLBA: 234441647
        Native MaxLBA: 234441647
        Logical Sector Size (B): 512
        Physical Sector Size (B): 4096
        Sector Alignment: 0
        Rotation Rate (RPM): SSD
        Form Factor (inch): 2.5
        Last DST information:
                Not supported
        Interface speed:
                Max Speed (Gb/s): 6.0
                Negotiated Speed (Gb/s): 3.0
        Annualized Workload Rate (TB/yr): 299.80
        Total Bytes Read (TB): 2.35
        Total Bytes Written (GB): 90.19
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Not Supported
        Cache Size (MiB): Not Reported
        Percentage Used Endurance Indicator (%): 1.00437
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Supported, Frozen
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate, Segmented
        Specifications Supported:
                ATA8-ACS
                ATA/ATAPI-7
                ATA/ATAPI-6
                ATA/ATAPI-5
                ATA/ATAPI-4
                SATA 3.0
        Features Supported:
                Sanitize
                NCQ
                HPA
                Power Management
                Security
                SMART
                48bit Address
                GPL
                TRIM

SAS HDD Device Information:

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST4000NM0043
        Serial Number: Z1QZ04KVG
        Firmware Revision: 0004
        World Wide Name: 500Q0C5005594AEFB
        Copyright: Copyright (c) 2014 Seagate All rights reserved
        Drive Capacity (TB/TiB): 4.00/3.64
        Temperature Data:
                Current Temperature (C): 28
                Highest Temperature (C): Not Reported
                Lowest Temperature (C): Not Reported
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  61 days 11 hours 14 minutes
        Power On Hours: 1475.23
        MaxLBA: 7814037167
        Native MaxLBA: Not Reported
        Logical Sector Size (B): 512
        Physical Sector Size (B): 512
        Sector Alignment: 0
        Rotation Rate (RPM): 7200
        Form Factor (inch): 3.5
        Last DST information:
                Time since last DST (hours): 548.23
                DST Status/Result: 0x0
                DST Test run: 0x1
        Interface speed:
                Port 0 (Current Port)
                        Max Speed (GB/s): 6.0
                        Negotiated Speed (Gb/s): 3.0
                Port 1
                        Max Speed (GB/s): 6.0
                        Negotiated Speed (Gb/s): Not Reported
        Annualized Workload Rate (TB/yr): 0.02
        Total Bytes Read (GB): 2.27
        Total Bytes Written (GB): 2.39
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Self Encrypting
        Cache Size (MiB): Not Reported
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Not Supported
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate
        Specifications Supported:
                SPC-4
        Features Supported:
                EPC
                TCG
                Self Test
                Informational Exceptions
                Format Unit
                Sanitize

SAS SSD: Device Information

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST400FM0053
        Serial Number: P3QF13026
        Firmware Revision: 0006
        World Wide Name: 5000QC50069010B4B
        Copyright: Copyright (c) 2014 Seagate All rights reserved -
        Drive Capacity (GB/GiB): 400.09/372.61
        Temperature Data:
                Current Temperature (C): 34
                Highest Temperature (C): Not Reported
                Lowest Temperature (C): Not Reported
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  30 days 21 hours 29 minutes
        Power On Hours: 741.48
        MaxLBA: 781422767
        Native MaxLBA: Not Reported
        Logical Sector Size (B): 512
        Physical Sector Size (B): 4096
        Sector Alignment: 0
        Rotation Rate (RPM): SSD
        Form Factor (inch): 2.5
        Last DST information:
                Time since last DST (hours): 434.48
                DST Status/Result: 0x0
                DST Test run: 0x1
        Interface speed:
                Port 0 (Current Port)
                        Max Speed (GB/s): 12.0
                        Negotiated Speed (Gb/s): 3.0
                Port 1
                        Max Speed (GB/s): 12.0
                        Negotiated Speed (Gb/s): Not Reported
        Annualized Workload Rate (TB/yr): 9.48
        Total Bytes Read (GB): 24.62
        Total Bytes Written (GB): 837.41
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Not Supported
        Cache Size (MiB): Not Reported
        Percentage Used Endurance Indicator (%): 1.00000
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Not Supported
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate, Segmented, Deferred
        Specifications Supported:
                SPC-4
        Features Supported:
                EPC
                Power Comsumption
                UNMAP
                Self Test
                Informational Exceptions
                Format Unit
                Sanitize

===============
Version History
===============
SeaChest_Erase is branched off from SeaChest Basics v1.0.3.

v0.0.1  14-Mar-2015  Added --writeSame, --revertSP and TCG --revert.
v0.0.2  21-May-2015  Added --testUnitReady. Improved device discovery.
v0.0.3  12-Aug-2015  Modified some commands to consist of two parts - starting
                     LBA and LBA range count.  Improved device discovery.
                     Corrections to verbose output.
v0.0.3  16-Oct-2015  1_7_0 libraries.  Added enhanced version information.
                     Added -sat12byte to increase compatibility.  Added
                     --SATInfo to compare ATA vs SCSI identification
                     differences.
v1.0.0  02-May-2016  1_9_1 libraries.  Added new verbosity level. Added
                     --onlySeagate restriction.  Added --modelMatch and
                     --onlyFW filters. Added logic change for --overwrite and
                     --trim commands to assume Max LBA (end of the drive) as
                     the range when the erase range is not specified.  Added
                     --performQuickestErase, --formatUnit, --fastFormat,
                     --showEraseSupport.
v1.0.1  19-May-2016  1_9_2 libraries fixed scan information from ATAPI devices.
                     Fixed a bug where we could accidentally clear some stored
                     identify data from the device structure. Fixed continuing
                     on when there was a permission denied error opening a
                     drive. Adjustments to --fastFormat.
v1.0.2  15-Jun-2016  1_9_3 libraries fixed issues with ATA secure erase
                     commands. Fixed bugs with --modelMatch and --onlyFW
                     filters.
v1.1.0  06-Jul-2016  1_10_0 libraries add --forceATA and --forceSCSI.  Added
                     --displayLBA and --pattern.
v1.1.1  14-Jul-2016  1_10_1 libraries adds SMART and power management
                     functions, format polling, endianess detection, buffer
                     size fixes, SAS device statistics, Win32 IOCTL
                     pass-through fix on Win8 and higher. Added support for
                     maxLBA keyword.
v1.2.0  01-Sep-2016  1_11_1 libraries updates to various printed message,
                     minor bug fixes. Fixed --SATInfo command.
v1.2.0  21-Sep-2016  1_11_2 libraries updates adds --forceATADMA, --forceATAPIO
                     and --forceATAUDMA  (SATA Only).
v1.3.0  10-Oct-2016  1_11_4 libraries updates. Support for multiple devices.
v1.3.0  25-Oct-2016  1_11_5 libraries updates improved LaCie  detection, adds
                     SAT Vendor ID, SAT Product ID, and SAT Product Revision to
                     the -i --SATInfo output.
v1.3.1  27-Oct-2016  1_11_6 libraries updates WWN detection.  Added
                     --enableLegacyUSBPassthrough
v1.3.1  03-Nov-2016  1_11_7 libraries fixed issue with SAS EPC power mode
                     settings.
v1.3.2  10-Nov-2016  1_11_8 libraries fixed issue with Sanitize Overwrite
                     patterns. Also improved logic when using the various Range
                     commands.
v1.3.2  13-Dec-2016  1_11_10 libraries fixes a problem when using maxLBA without
                     the corresponding command range option, SAS power mode
                     setting, and Sanitize erase patterns.
v1.4.0  23-Feb-2017  1_13_0 libraries adds support for SAS 12.0Gb/s and
                     22.5Gb/s physical bus speeds, support for double buffered
                     passthrough IOCTLs. --showEraseSupport now gives overwrite
                     erase time estimate.  --progress support for writesame
                     removed (caused test to abort), use --poll instead. Add
                     --hideLBACounter. New -F, --scanFlags [options: ignoreCSMI
                     allowDuplicates] for Windows tools. Add CSMI support to
                     all Windows version tools.
v1.4.0  06-Mar-2017  1_13_2 libraries adds Enhanced device information output
                     for SAS features.
v1.5.0  24-May-2017  1_14_3 libraries. Added "Storage Element Depopulation" if
                     a supported feature.  Adds --showPhysicalElementStatus,
                     --forceSeagateDepop, --removePhysicalElement.
v1.6.0  14-Jun-2017  1_15_0 libraries adds bug fix malformed command line
                     should exit with code = 1; added detection of parallel ATA
                     and SCSI speeds; temperature data on ATA now uses the
                     values from the SCT status log or device statistics log.
                     Bug fix where the "-d all" was not filtering out csmi
                     drives like it is supposed to causing duplicate drives to
                     show up.  Adds the child drive matching options
                     --childModelMatch, --childOnlyFW, and --childNewFW.  Bug
                     fix with --showEraseSupport showing non-ascii characters.
                     Added --showPhysicalElementStatus and
                     --removePhysicalElement.
v1.7.0  14-Jul-2017  1_16_1 libraries adds support for ATA drives that have the
                     Sense Data Reporting feature enabled, changes to how we
                     interpret the completion status from the drive, new Sense
                     Data ASC, ASCQ definitions from SPC5. Adds --Scan (or -S,
                     note the capital S) aggressive system scan.
v1.7.0  27-Jul-2017  1_16_2 libraries enhances Seagate brand detection.
v1.7.0  19-Sep-2017  1_16_4 libraries fixes SCSI "--progress format", added
                     reading remanufacture time for SAS when the drive reports
                     a time, fixed SAS --abortDST.
v1.7.0  25-Sep-2017  1_17_0 libraries adds improved SATA device discovery on
                     SAS adapters, added NVMe read, write & Flush commands.
v1.7.1  10-Oct-2017  1_17_1 libraries adds Better handling of NVMe as a SCSI
                     device, SAT library strings, and fixes to Read-Buffer
                     error history (ISL). Updated copyright notice, invalid
                     command line options now only display an error instead of
                     long help. Added remanufacturing time for SCSI.
v1.7.3  12-Oct-2017  1_17_3 libraries improves Fast-Format compatibility on SAS.
                     Added detection of current SAS format protection mode.
v1.7.3  26-Oct-2017  1_17_5 libraries fixes SATA drive discovery behind HBAs
                     that don't show as SATA and don't support the SAT VPD
                     page; added Automatic fallback to 12byte CDBs during
                     initial device discovery;  integrated fixes for SAS
                     firmware download and fixes for SAS LongDST time
                     calculation; added detection of TCG Pyrite and Opalite
                     drives.
v1.7.3  31-Oct-2017  1_17_6 libraries adds ATA Security compatibility with SATL
                     on some LSI adapters, corrects firmware download issue
                     under Windows 10 API.
v1.7.3  02-Nov-2017  1_17_7 libraries fixes Long DST time on SCSI/SAS products.

The above history is provided as a courtesy to show the original SeaChest
development activity.

============================
openSeaChest Version History
============================
v1.7.1  12-Nov-2017  1_17_x libraries.  Launch date of the Seagate openSeaChest
open source project for storage devices.
v1.7.4  21-Sep-2018  1_18_2 libraries Added in reading os-release PRETTY_NAME
                     field to get the OS name under linux; NVMe enabled;  fixed
                     a bug in the ATA activate FW command; added in reading ID
                     Data log and Device statistics logs page 0 to check the
                     list of supported pages; fixed a bug in the loop used to
                     read mode pages for -i information on SAS; IDD SAS
                     improvements; fixed a bug in DST & Clean with ATA drives
                     behind SCSI controllers. Fix for --modelMatch that have
                     spaces in the name. Added additional information to the
                     banner and -V data to show support levels. Add general
                     support for NVMe and NVMe specific identify data to "-i"
                     command.
v1.7.4  18-Oct-2018  1_18_3 libraries Added NVMe generic read command support.
v1.9.0  28-Feb-2019  1_19_2 libraries.  ATA Security password options sometimes
                     needed for ATA Security Erase controls.  Added
                     --ataSATsecurityProtocol, --ataSecPassword,
                     --ataSecPassType, --ataSecPWMod. Removed
                     --disableATASecurityPW. Rename --secureErase to
                     --ataSecureErase.
v2.0.0  03-May-2019  1_19_18 libraries added per device verbosity, --deviceInfo
                     adds SAS (not SATA) FastFormat for Features Supported
                     section,  --deviceInfo now gives Low Current Spinup
                     status. Adds --psid (removes that argument from
                     --revertSP), adds --sid.
v2.0.1 10-Jun-2019   1_19_23 libraries added SNTL (SCSI to NVMe translator),
                     updated software SAT translator to use dataset management
                     XL command, fixes for issuing vendor unique commands under
                     Windows, improved fast format support detection, and
                     refactored verbose output for NVMe commands.
v2.1.1  04-Feb-2020  1_21_30 libraries add in check for Elevated Privileges
                     (sudo, run as administrator) before trying to talk to
                     devices, new exit code 9 if privileges are missing;
                     printing the USB VID/PID in the device info; fix to sg
                     helper to support large systems; many changes in support
                     of dual actuators (example: warning that EPC settings
                     affect multiple LUNs); overhaul to USB device detection
                     and support, incorporating a new USB hacks and workarounds
                     approach which uses a lookup table listing various USB
                     bridge VIDs/PIDs and their specific issues; separate
                     Seagate SAS SN and PCBA SN.
v2.1.2  13-Apr-2020  1_21_30 libraries, fix memory allocation during the scan
                     command.

===========================================
About openSeaChest Command Line Diagnostics
===========================================
Seagate offers both graphical user interface (GUI) and command line interface
(CLI) diagnostic tools for our storage devices.  SeaTools for Windows and
SeaTools Bootable for end users are the two most popular GUI tools.  These
tools support 15 languages.

openSeaChest diagnostics are command line utilities which are available for
expert users.  These command line tools assume the user is knowledgeable about
running software from the operating system command prompt.  CLI tools are in
the English language only and use "command line arguments" to define the
various tasks and specific devices.  openSeaChest diagnostics are available for
both Linux and Windows environments.

Linux versions of openSeaChest tools are available as stand alone 32 or 64-bit
executables you can copy to your own system.  Windows OS versions of
openSeaChest diagnostics are installed through a typical setup wizard and can
be removed via the Control Panel.

In addition, Seagate offers a tool to build a bootable USB openSeaChest flash
drive which boots to a 32-bit Linux command prompt.  This is a Windows
executable file which formats a USB Flash drive you provide.  It copies over
all the files needed to use it as a bootable device for the openSeaChest
diagnostic software. All data on the USB Flash drive will be erased so be sure
to protect any valuable files.

Technical Support for openSeaChest drive utilities is not available.  If you
have the time to send us some feedback about this software, especially if you
notice something we should fix or improve, we would greatly appreciate hearing
from you.  To report your comments and suggestions, please use this email
seaboard@seagate.com.  Please let us know the name and version of the tool you
are using.

openSeaChest drive utilities support SATA, SAS and USB interface devices.

openSeaChest Basics - Contains the most important tests and tools.

Other openSeaChest "break out" utilities are available and listed below which
offer more in-depth functionality in specific areas. These are:

openSeaChest Configure - Tools to control various settings on the drives are
brought together into this one tool.  Typical commands, for example, include
Write Cache and Read Lookahead Cache enable or disable.

openSeaChest Erase - The focus is on data erasure.  There are many different
choices for erasing data from simple boot track erase to full cryptographic
erasure (when supported).  Be sure to back up important data before using this
tool.  Seagate is not responsible for lost user data.  This tool only works on
Seagate drives.

openSeaChest Firmware - Seagate products are run by firmware.  Having the
latest firmware can improve performance and or reliability of your product.
Seagate recommends applying new firmware to enhance the performance and or
reliability of your drive.  Most products may see one or two firmware updates
within the early life of the product.

openSeaChest Format - Storage products which utilize the SAS, SCSI or Fibre
Channel interfaces are able to perform a full low-level media format in the
field.  The SCSI Format Unit command offers many specialty options to
accommodate a variety of conditions and to fine tune the procedure.  This
complex command deserves its own "break out" utility.

openSeaChest GenericTests - Read Tests are the original disk drive diagnostic
which is to just read every sector on the drive, sequentially.  This tool
offers several common read tests which can be defined by either time or range.
In addition, the Long Generic test has the ability to repair problem sectors,
possibly eliminating an unnecessary drive return.

openSeaChest Info - Historical generic activity logs (like total bytes written
and power on hours) and performance logs (like temperature) are available for
analytical review.  Identification and inquiry data stored on the drive is also
provided.  A view of SMART and device statistics is available when supported by
the drive.

openSeaChest PowerControl - Seagate disk drives offer a multitude of options to
manage power.  This tool manipulates the various power modes.

openSeaChest Security - Various settings are available on modern Seagate disk
drives which may be locked and unlocked.  These settings may interact with the
operating systems and systems BIOS.  Options also include cryptographic erase
for Self-Encrypting Drives (SED).

openSeaChest SMART - This tool provides a closer look at the collected SMART
attributes data.  SMART stands for Self-Monitoring, Analysis and Reporting
Technology.  Short Drive Self Test is included as one of the standard SMART
commands. In addition, the DST & Clean test has the ability to repair problem
sectors, possibly eliminating an unnecessary drive return.

=================================
Support and Open Source Statement
=================================
Seagate offers technical support for disk drive installation.  If you have any
questions related to Seagate products and technologies, feel free to submit
your request on our web site. See the web site for a list of world-wide
telephone numbers.

Seagate Support:
http://www.seagate.com/support-home/
Contact Us:
http://www.seagate.com/contacts/

Please report bugs/suggestions to https://github.com/Seagate/openSeaChest.
Include the output of --version information in the email. See the user guide
section 'General Usage Hints' for information about saving output to a log file.

This software uses open source packages obtained with permission from the
relevant parties. For a complete list of open source components, sources and
licenses, please see our Linux USB Boot Maker Utility FAQ for additional
information.

The newest online version of the openSeaChest Utilities documentation, open
source usage and acknowledgement licenses, and our Linux USB Boot Maker FAQ can
be found at: https://github.com/Seagate/openSeaChest.

Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
======================================================================

BINARIES and SOURCE CODE files of the openSeaChest open source project have
been made available to you under the Mozilla Public License 2.0 (MPL).  Mozilla
is the custodian of the Mozilla Public License ("MPL"), an open source/free
software license.

https://www.mozilla.org/en-US/MPL/

Mozilla Public License Version 2.0
==================================

1. Definitions
--------------

1.1. "Contributor"
    means each individual or legal entity that creates, contributes to
    the creation of, or owns Covered Software.

1.2. "Contributor Version"
    means the combination of the Contributions of others (if any) used
    by a Contributor and that particular Contributor's Contribution.

1.3. "Contribution"
    means Covered Software of a particular Contributor.

1.4. "Covered Software"
    means Source Code Form to which the initial Contributor has attached
    the notice in Exhibit A, the Executable Form of such Source Code
    Form, and Modifications of such Source Code Form, in each case
    including portions thereof.

1.5. "Incompatible With Secondary Licenses"
    means

    (a) that the initial Contributor has attached the notice described
        in Exhibit B to the Covered Software; or

    (b) that the Covered Software was made available under the terms of
        version 1.1 or earlier of the License, but not also under the
        terms of a Secondary License.

1.6. "Executable Form"
    means any form of the work other than Source Code Form.

1.7. "Larger Work"
    means a work that combines Covered Software with other material, in
    a separate file or files, that is not Covered Software.

1.8. "License"
    means this document.

1.9. "Licensable"
    means having the right to grant, to the maximum extent possible,
    whether at the time of the initial grant or subsequently, any and
    all of the rights conveyed by this License.

1.10. "Modifications"
    means any of the following:

    (a) any file in Source Code Form that results from an addition to,
        deletion from, or modification of the contents of Covered
        Software; or

    (b) any new file in Source Code Form that contains any Covered
        Software.

1.11. "Patent Claims" of a Contributor
    means any patent claim(s), including without limitation, method,
    process, and apparatus claims, in any patent Licensable by such
    Contributor that would be infringed, but for the grant of the
    License, by the making, using, selling, offering for sale, having
    made, import, or transfer of either its Contributions or its
    Contributor Version.

1.12. "Secondary License"
    means either the GNU General Public License, Version 2.0, the GNU
    Lesser General Public License, Version 2.1, the GNU Affero General
    Public License, Version 3.0, or any later versions of those
    licenses.

1.13. "Source Code Form"
    means the form of the work preferred for making modifications.

1.14. "You" (or "Your")
    means an individual or a legal entity exercising rights under this
    License. For legal entities, "You" includes any entity that
    controls, is controlled by, or is under common control with You. For
    purposes of this definition, "control" means (a) the power, direct
    or indirect, to cause the direction or management of such entity,
    whether by contract or otherwise, or (b) ownership of more than
    fifty percent (50%) of the outstanding shares or beneficial
    ownership of such entity.

2. License Grants and Conditions
--------------------------------

2.1. Grants

Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:

(a) under intellectual property rights (other than patent or trademark)
    Licensable by such Contributor to use, reproduce, make available,
    modify, display, perform, distribute, and otherwise exploit its
    Contributions, either on an unmodified basis, with Modifications, or
    as part of a Larger Work; and

(b) under Patent Claims of such Contributor to make, use, sell, offer
    for sale, have made, import, and otherwise transfer either its
    Contributions or its Contributor Version.

2.2. Effective Date

The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.

2.3. Limitations on Grant Scope

The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:

(a) for any code that a Contributor has removed from Covered Software;
    or

(b) for infringements caused by: (i) Your and any other third party's
    modifications of Covered Software, or (ii) the combination of its
    Contributions with other software (except as part of its Contributor
    Version); or

(c) under Patent Claims infringed by Covered Software in the absence of
    its Contributions.

This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).

2.4. Subsequent Licenses

No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).

2.5. Representation

Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.

2.7. Conditions

Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.

3. Responsibilities
-------------------

3.1. Distribution of Source Form

All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.

3.2. Distribution of Executable Form

If You distribute Covered Software in Executable Form then:

(a) such Covered Software must also be made available in Source Code
    Form, as described in Section 3.1, and You must inform recipients of
    the Executable Form how they can obtain a copy of such Source Code
    Form by reasonable means in a timely manner, at a charge no more
    than the cost of distribution to the recipient; and

(b) You may distribute such Executable Form under the terms of this
    License, or sublicense it under different terms, provided that the
    license for the Executable Form does not attempt to limit or alter
    the recipients' rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).

3.4. Notices

You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.

4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------

If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.

5. Termination
--------------

5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.

************************************************************************
*                                                                      *
*  6. Disclaimer of Warranty                                           *
*  -------------------------                                           *
*                                                                      *
*  Covered Software is provided under this License on an "as is"       *
*  basis, without warranty of any kind, either expressed, implied, or  *
*  statutory, including, without limitation, warranties that the       *
*  Covered Software is free of defects, merchantable, fit for a        *
*  particular purpose or non-infringing. The entire risk as to the     *
*  quality and performance of the Covered Software is with You.        *
*  Should any Covered Software prove defective in any respect, You     *
*  (not any Contributor) assume the cost of any necessary servicing,   *
*  repair, or correction. This disclaimer of warranty constitutes an   *
*  essential part of this License. No use of any Covered Software is   *
*  authorized under this License except under this disclaimer.         *
*                                                                      *
************************************************************************

************************************************************************
*                                                                      *
*  7. Limitation of Liability                                          *
*  --------------------------                                          *
*                                                                      *
*  Under no circumstances and under no legal theory, whether tort      *
*  (including negligence), contract, or otherwise, shall any           *
*  Contributor, or anyone who distributes Covered Software as          *
*  permitted above, be liable to You for any direct, indirect,         *
*  special, incidental, or consequential damages of any character      *
*  including, without limitation, damages for lost profits, loss of    *
*  goodwill, work stoppage, computer failure or malfunction, or any    *
*  and all other commercial damages or losses, even if such party      *
*  shall have been informed of the possibility of such damages. This   *
*  limitation of liability shall not apply to liability for death or   *
*  personal injury resulting from such party's negligence to the       *
*  extent applicable law prohibits such limitation. Some               *
*  jurisdictions do not allow the exclusion or limitation of           *
*  incidental or consequential damages, so this exclusion and          *
*  limitation may not apply to You.                                    *
*                                                                      *
************************************************************************

8. Litigation
-------------

Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.

9. Miscellaneous
----------------

This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.

10. Versions of the License
---------------------------

10.1. New Versions

Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.

10.2. Effect of New Versions

You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.

10.3. Modified Versions

If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses

If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice
-------------------------------------------

  This Source Code Form is subject to the terms of the Mozilla Public
  License, v. 2.0. If a copy of the MPL was not distributed with this
  file, You can obtain one at http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------

  This Source Code Form is "Incompatible With Secondary Licenses", as
  defined by the Mozilla Public License, v. 2.0.
